Ресурсы каждого процесса ос windows код исполняемой функции

Оригинальные познавательные статьи, книги и разработки, которые Вы можете изучить на нашем сайте.

Системное программирование | Вопросы с ответами

Системное программирование

Вопросы с ответами по дисциплине «Системное программирование».

1. Операционная система – это___________:
+ Комплекс программ
— Прикладная программа
+ Администратор
— Обеспечение
— Назначение
— Пользование
— Сервисная программа
+ Менеджер ресурсов компьютера

2. Операционные системы являются ресурсами ___________ компьютера:
+ управления
+ диспетчеризация
+ планирование
— администратор
— менеджер
— обеспечение
— назначение
— пользование

3. Операционные системы для программирования приложений Win32API:
+ Windows 98
— Linux
+ Windows 2000
— Unix
+ Windows ХР
— Windows СЕ
— Windows NT
— MS DOS

4. Категории объектов ОС Windows приложении:
— Windows 98
— User
+ Graphics Device Interface
+ Unix
— Windows Shell
+ Kernel
— Network Services
— Base Services

5. Ресурсы принадлежащие каждому потоку в ОС Windows:
— потоки интерфейса пользователя
— пользовательские потоки
+ код исполняемой функции
— потоки исполняемой функции
+ набор регистров процессора
— библиотека общих элементов
— интерфейс пользователя
+ стек для работы приложения

6. Действия менеджера потоков, во время переключения процессора на исполнение другого потока:
— обслуживает очередь запускаемого потока
+ сохранить контекст прерываемого потока
+ восстановить контекст запускаемого потока
+ передать управление запускаемому потоку
— управляет доступом для ОС
— выполняет функции ввода и вывода
— обеспечивает функции для вывода графики
— обеспечивает функции для взаймодействия

7. Параметры функции CreateThread:
— TerminateThread
+ lpThreadAttributes
— AttachThreadInput
— CreateProcess
— CreateThread
— ExitThread
+ dwStackSize
+ lpStrtAddress

8. Функции работы с процессами и потоками в Win32 API:
— TerminateThread
— lpThreadAttributes
+ AttachThreadInput
+ CreateProcess
— ExitThread
+ CreateThread
— dwStackSize
— lpStrtAddress

9. Функция Sleep()___________:
+ задерживает выполнения потока
— возвращает нулевое значение
+ удаляет поток из очереди
— выполняет выход из потока
— освобождает память
+ делает короткие паузы
— завершает выполнение функций
— освобождает ресурсы

10. Классификация программ в зависимости от количества определяемых ими параллельных потоков управления:
— дуплексный
— многозадачный
+ многопоточный
— системный
+ с параллельным потоком
— параллельный
+ однопоточный
— с прямым потоком

11. Операции над потоком связанные с операционной системой:
— Create
+ Run
— Exit
+ Interrupt
— Open
+ Block
— Read
— Write

12. Ресурсы каждого процесса ОС Windows:
+ виртуальное адресное пространство
— код исполняемой функции
+ маркер доступа
— набор регистров процессора
— стек для работы приложения
+ страницы в реальной памяти
— стек для работы ОС
— консольный ввод

13. Объектам синхронизации первого класса в Windows, которые служат только для решения задач синхронизации параллельных потоков:
+ мьютекс (mutex)
+ событие (event)
+ семафор (semaphore)
— ожидающий таймер
— работа (job)
— процесс (process)
— поток (thread)
— консольный ввод (console input).

14. К третьему классу синхронизации относятся объекты, которые переходят
в сигнальное состояние по завершении своей работы:
— мьютекс (mutex)
— событие (event)
+ работа (job)
+ процесс (process)
+ поток (thread)
— семафор (semaphore)
— ожидающий таймер
— консольный ввод (console input)

15. Системные объекты, созданные менеджером объектов в Win32 API:
— класс
— поток
+ события
+ семафор
— процесс
+ критический раздел
— приоритет потока
— контекст

16. Логические комбинации флагов параметра dwDesiredAccess:
+ EVENT_ALL_ACCESS
+ EVENT_MODIFY_STATE
— ACTIONS_AFTER_EVENT
+ SYNCHRONIZE
— SEMAPHORE_ALL_ACCESS
— SEMAPHORE _MODIFY_STATE
— ACTIONS_BEFORE_EVENT
— CREATE_NEW_CONSOLE

17. Логические комбинации флагов параметра dwDesiredAccess, определяющий доступ к семафору:
— EVENT_ALL_ACCESS
— EVENT_MODIFY_STATE
+ SYNCHRONIZE
+ SEMAPHORE_ALL_ACCESS
— ACTIONS_AFTER_EVENT
+ SEMAPHORE _MODIFY_STATE
— ACTIONS_BEFORE_EVENT
— CREATE_NEW_CONSOLE

18. Значение функции WaitForsingieObject, в случае успешного завершения:
— wait_object_р
— wait_forsingie
+ wait_object_o
— wait_object
+ wait_abandoned
+ wait_timeout
— wait_exit
— wait_finally

19. Прототип функции waitForMuitipieObject:
+ DWORD nCount
+ CONST HANDLE *lpHandles
+ BOOL bWaitAll
— DWORD dwReserved
— BOOL bResume
— LPOVERLAPPED lpOverLapped
— HANDLE hThread
— DWORD IDThread

20. Значения функции waitForMuitipieobjects:
+ ОТ WAIT_OBJECT_0 ДО (WAIT_OBJECT_0 + nCount — 1);
— ОТ WAIT_OBJECT_0 ДО (WAIT_OBJECT_0 );
— ОТ WAIT_OBJECT_0 ДО (WAIT_OBJECT_0 + nCount);
+ ОТ WAIT_ABANDONED_0 ДО (WAIT_ABANDONED_0 + nCount — 1);
— WAIT_COMPLETION
+ WAIT_TIMEOUT
— ОТ WAIT_ABANDONED_0 ДО (WAIT_ABANDONED_0 + nCount + 1);
— ОТ WAIT_ABANDONED_0 ДО (WAIT_ABANDONED_0);

21. Состояние блока адресов в адресном пространстве:
+ выделен
— защищен
+ зарезвирован
+ свободен
— смещен
— удален
— копирован
— прикреплен

22. Интерфейсы (API) для управления памятью:
— Base Services
— Common Control Library
+ Virtual Memory
— Network Services
+ Memory Mapped File
+ Heap Memory
— Windows Shell
— Windows System Information

23. Куча – это___________:
— объекты памяти
— страница памяти
+ динамическая область памяти
— указатель блока памяти
+ блок памяти
— указатель строки
+ мелкие фрагменты памяти
— указатель функции

24. Функции для управления памятью кучи:
+ HeapAlloc()
— HeapDestroy()
+ HeapReAlloc()
— HeapFree()
— HeapSize()
+ HeapFree()
— HeapCreate()
— MapViewOfFile()

25. Форматы реального и виртуального адресов:
+ номер реальной страницы
— номер фактической страницы
— номер оперативной памяти
+ номер виртуальной страницы
— смещение в адресной строке
+ смещение в реальной и виртуальной странице
— файлы страницы
— номер динамической страницы

26. Форматы реального и виртуального адресов:
— a
+ r
— b
+ v
— c
+ d
— e
— k

27. Описание линейного адреса процесса в ОС Windows:
+ 32 бит
— 16 бит
+ от 0х00000000 до 0хFFFFFFFF
— 2 Гбайт логической памяти
— 4 Гбайт виртуальной памяти
— 2 Гбайт виртуальной памяти
+ 4 Гбайт логической памяти
— от 0х00000000 до 0х0000FFFF

28. Состояние страницы процесса виртуальной памяти:
— (блокирован);
— (выделен)
+ free (свободный)
— (не выделен)
+ committed (распределены)
— (готов)
— (не готов)
+ reserved (зарезвированый)

29. Функция файловой системы:
— совместно использовать объект файла
+ открытие доступа к существующему файлу
— выделят мелкие фрагменты файла
+ закрытие доступа к существующему файлу
— закрепление виртуальной памяти
+ установка указателя файла на нужную запись
— физическое или форматирование низкого уровня
— разбиение диска на разделы

30. Структура и описание каталога:
+ древовидная
— кольцевая
+ корневой
— табличная
+ (обратная косая)
— прямая
— выпуклая
— плоская

31. Имена каталогов и файлов не должны содержат:
— +
+ <
— *
+ :
+ /
— ?
— !
— .

32. Параметр dwDesiredAccess задает способ доступа к файлу и принимает значения:
+ 0
— FILE_SHARE_WRITE
— FILE_SHARE_READ
+ GENERIC_READ
+ GENERIC_WRITE
— OPEN_EXISTING
— OPEN_ALWAYS
— TRUNCATE_EXISTING

33. Значения параметра dwCreationDisposition при открытии файла:
— 0
— FILE_SHARE_WRITE
— FILE_SHARE_READ
— GENERIC_READ
— GENERIC_WRITE
+ OPEN_EXISTING
+ OPEN_ALWAYS
+ TRUNCATE_EXISTING

34. Правильная запись имени файла:
+ “C:\demo_file.dat”
— “C:\demo_file.dоt”
— “C:\demofile.dat”
— “C\demo_file.dat”
+ “C:\new_file.dat”
— “C:\ new_filedat”
+ “C:\back_file.dat”
— “\back_file.dat”

35. Значение функций GetFileType:
— FILE_SHARE_WRITE
— FILE_SHARE_READ
— GENERIC_READ
+ FILE_TYPE_DISK
+ FILE_TYPE_CHAR
— TRUNCATE_EXISTING
+ FILE_TYPE_PIPE
— OPEN_ALWAYS

36. Значения параметра функции CopyFile:
+ lpExistingFileName
— lpThreadAttributes
— AttachThreadInput
+ lpNewFileName
— dwStackSize
— lpStrtAddress
+ bFailIfExists
— TerminateThread

37. Верхние уровни, составляющие основу структуры реестра Windows:
— HKEY_LOCAL
— HKEY_LOCAL_WORD
+ HKEY_LOCAL_MACHINE
+ HKEY_CURRENT_USER
+ HKEY_CLASSES_ROOT
— HKEY_CURRENT_ MACHINE
— HKEY_CLASSES_ MACHINE
— HKEY_CLASSES_USER

38. API функции, применяемые для выполнения операций с реестром:
— RegReserverd
+ RegCloseKey
— RegClass
— RegSubKeys
+ RegCreateKey
— RegOpen
— RegQery
+ RegDeleteKey

39. API функции применяемые в среде Windows NT:
— RegQueryValue()
+ RegSetKeySecurity()
— RegCloseKey()
— RegFlushKey()
+ RegGetKeySecurity()
— RegLoadKey()
+ параметры безопасности
— RegOpenKey()

40. HKey идентифицирует текущий раздел или предопределенные дескрипторы:
— HKEY_LOCAL_MACHINE
— HKEY_LOCAL_WORD
+ HKEY_CLASSES_ROOT
— HKEY_CURRENT_ MACHINE
— HKEY_CLASSES_USER
+ HKEY_CURRENT_USER
— HKEY_CLASSES_ MACHINE
+ HKEY_USERS

41. Параметры функции WriteFile:
— nNumberOfBytes
— lpThreadAttributes
+ hFile
+ lpBuffer
— dwStackSize
— lpNewFileName
— bFailIfExists
+ nNumberOfBytesToWrite

42. Системный вызов для файла:
+ chown()
+ lchown()
— chmod
— fchmod
— stat()
— lstat()
+ fchown()
— read()

43. Метаданные файла связанные со временем:
— st_blocks
— st_dev
+ st_ctime
— st_uid
+ st_atime
— st_gid
— st_size
+ st_mtime

44. Функции для перемещения файла:
— lpNewFileName
+ replaceFile
— readFile
+ copyFile
— hFile
+ moveFile
— write_File
— delete_File

45. Механизм отображения файлов в память:
+ отображение содержимого файла
— установка времени таймера
+ представление или вид файла
+ когерентность данных
— указывать на функцию завершения
— создать файловое пространство
— открыть файл приложения
— создать файл загрузки

46. Параметры функции CreateFileMapping (создание объекта отображающий файл в память):
— lpBuffer
— numberOfBytes
— completionKey
+ flProtect
— readFile
+ lpAttributes
— waitCommEvent
+ hFile

47. Значения параметра flProtect :
— PAGE_READ
+ PAGE_READONLY
— PAGE_WRITEONLY
+ PAGE_READWRITE
— PAGE_READCOPY
+ PAGE_WRITECOPY
— PAGE_WRITE
— PAGE_COPYONLY

48. Прототип функции MapViewOfFile:
+ HANDLE hFileMappingObject
+ DWORD dwFileOffsetHigh
+ DWORD dwFileOffsetLow
— DWORD dwReserved
— BOOL bResume
— LPOVERLAPPED lpOverLapped
— HANDLE hThread
— DWORD IDThread

49. Прототип функции MapViewOfFileЕх, отображающий файл в адресное пространства с некоторого заданного виртуального адреса:
+ HANDLE hFileMappingObject
— DWORD dwReserved
+ DWORD DesireAccess
+ LPVOID lpBaseAddress
— BOOL bResume
— LPOVERLAPPED lpOverLapped
— HANDLE hThread
— DWORD IDThread

50. Механизм отображения файлов в память:
— узнать какой поток ее вызывает
+ файл отображен несколькими процессами
— хранить указатели на захваченную память
— запускать приложение
+ когерентность отображений
+ обмен данными между процессами
— открыть файл приложения
— создать файл загрузки

51. Функции файла stdio.h языка программирования С, создающие стандартную библиотеку ввода-вывода:
— stdout— файл ввода
— stlib —файлы библиотеки
+ stdin — стандартный файл ввода
— tanh —математикалыќ шамаларды шыєаратын файл
+ stdout — стандартный файл вывода
— strcmp —функция сравнения
+ stderr —файл вывода сообщения об ошибке
— main— программаны орындауды бастайтын файл

52. Прототип функции DllMain:
+ HINSTANCE
+ DWORD
+ LPVOID
— HMODULE
— LPCTSTR
— HANDLE
— DWORD
— LPCSTR

53. Параметр fdwReason может иметь одно из следующих значений, которое
указывает на причину, по которой операционная система вызывает
функцию DllMain:
— dont_resolve_dll_references
— load_library_as_datafile
— load_with_altered_search_path
+ dll_process_attach
+ dll_thread_attach
+ dll_process_detach
— case dll_process_attach
— dwPrewTlsIndex= dwFirstTlsIndex

54. Прототип функции LoadLibraryEx, для загрузки динамически подключаемых библиотек:
+ LPCTSTR
+ HANDLE
+ DWORD
— HINSTANCE
— DWORD_В
— LPVOID
— HMODULE
— LPCSTR

55. Значения параметра dwFiags, задающий флаги управления загрузкой модуля:
+ dont_resolve_dll_references
+ load_library_as_datafile
+ load_with_altered_search_path
— dll_process_attach
— dll_thread_attach
— dll_process_detach
— case dll_process_attach
— dwPrewTlsIndex= dwFirstTlsIndex

56. Действия необходимые для статической загрузки DLL:
— создать файл
+ поместить библиотеку и файл в каталог
— хранить указатели на захваченную память
— запускать приложение
— узнать какой поток ее вызывает
+ ввести имя используемой библиотеки импорта
— сопоставить каждому потоку свой указатель
+ описать импортируемые из DLL имена в приложении

57. Задачи динамической локальной памяти потока:
— создать DLL
— поместить библиотеку в каталог
+ хранить указатели на захваченную память
— поместить файл импорта этой библиотеки в каталог
+ узнать какой поток ее вызывает
— ввести имя используемой библиотеки импорта
+ сопоставить каждому потоку свой указатель
— описать импортируемые из DLL имена в приложении

58. Порядок работы с локальной памятью потока:
+ распределение указателя
— сохранить указатель
— использовать указатель
+ работа с указателем
+ освобождение указателя
— завершение функции
— возвращает значение
— запись значения

59. Динамические подключаемые библиотеки предназначены___________:
+ для разработки функционально-замкнутых библиотек функций
+ для снижения затрат на разработку ПО
— для открытия файла, который будет отображаться в динамической памяти
— для загрузки в адресное пространство процесса
— для завершения нового потока в процессе
— для сохранения файла и каталога
+ для уменьшения физической памяти
— для перехода в адресную строку

60. Функция для работы локальной памятью потока:
+ TlsAlloc
— LpBuffer
+ TlsSetValue
+ TlsGetValue
— CompletionKey
— ReadFile
— NumberOfBytes
— lpAttributes

61. Параметры функции CreateFileMapping (создание объекта отображающий файл в память):
— lpBuffer
— numberOfBytes
— completionKey
+ flProtect
— readFile
+ lpAttributes
— waitCommEvent
+ hFile

62. Распределение локальной памяти потока в DLL:
+ case DLL_PROCESS_ATTACH
— dwPrewTlsIndex= dwFirstTlsIndex
— dwPrewTlsIndex= dwNextTlsIndex
+ dwlsIndex=TlsAlloc(); If (dwlsIndex ==-1)
+ break;
— return 0;
— dDll=LoadLibrary;
— returnGetLastError();

63. Статическая локальная память:
— оповещает параллельные потоки
+ использует спецификатор памяти declspec(thread)
+ определяет локальные переменные
— устанавливает соединения между потоками данных
— принимает записи
— содержит очередь пакетов
— обслуживает очередь пакетов
+ создает отдельный переменной

64. Значения аргумента dwCreationDisposition для создания файла:
— CREATE_FILE
— CREATE_THREAD
+ CREATE_NEW
— OPEN
+ CREATE_ALWAYS
— CREATE
+ OPEN_ALWAYS
— CREATE_NEWFILE

65. Параметры функции для асинхронной записи данных в файл WriteFileEx:
+ lpBuffer
— numberOfBytes
— completionKey
— devceIoControl
— readFile
+ lpOverLapped
— waitCommEvent
+ hFile

66. Прототип функции UnlockFileEx для асинхронной отмены блокировки области файла:
— LONG lPeriod
+ HANDLE hFile
— HANDLE hTimer
+ DWORD dwReserved
— BOOL bResume
+ LPOVERLAPPED lpOverLapped
— HANDLE hThread
— DWORD IDThread

67. Функции, инициирующие посылку пакетов в порт завершения ввода-вывода:
— CreateIoCompletionPort
— NumberOfBytes
— CompletionKey
+ DevceIoControl
+ ReadFile
— NumberOfConcurrentThreads
+ WaitCommEvent
— hFile

68. Функции, инициирующие посылку пакетов в порт завершения ввода-вывода:
— CreateIoCompletionPort
— NumberOfBytes
— CompletionKey
+ ConnectNamedPipe
+ LockFileEx
— NumberOfConcurrentThreads
+ TransactNamedFile
— hFile

69. Порт завершения ввода-вывода:
+ объект синхронизации
— динамическая библиотека
+ оповещает параллельные потоки
— устанавливает соединения
— принимает записи
+ содержит очередь пакетов
— обслуживает очередь пакетов
— создает параллельные потоки

70. Параметры процедуры ввода-вывода:
— lpBuffer
+ dwErrorCode
— lpCompletionRoutine
— dwError
+ dwNumberOfBytesTrnsferred
— dwRet
— hFile
+ lpOverLapped

71. Механизм структурной обработки исключений:
+ не допускается использование оператора goto
— допускается использование оператора goto
+ допускается использование функций GetExeptionCode
— допускается использование оператора throw
— не допускается использование функций GetExeptionCode
— не допускается использование оператора throw
+ допускается использование функций GetExeptionInformation
— не допускается использование функций GetExeptionInformation

72. Заголовок файла об обработке исключений:
— string.h
+ windows.h
— stdio.h
— lm.h
— sddl.h
+ iostream.h
+ float.h
— math.h

73. Прототип обработки исключений с плавающей точкой:
— unsigned typedef void
+ unsigned int _controlfp()
— _se_translator_function
— void se_trans_func
+ unsigned int new
— unsigned int
+ unsigned int mask
— unsigned code

74. Блок исключений:
+ _try
— _search
+ _except
— _controlfp
+ _finally
— _exception
— _handle
— _function

75. Блок исключений:
+ _try
— _search
+ _except
— _controlfp
+ _leave
— _exception
— _handle
— _function

76. Параметры функции RaiseException:
+ lpNewFileName
— dwExceptionFlag
— setHandleInformation
+ nNumberOfArguments
+ lpArguments
— hReadPipe
— write_File
— delete_File

77. Значения параметра new для управления исключениями:
+ _EM_DENORMAL
— _EM_FUNCTION
— _EM_TRANSLATION
+ _EM_OVERFLOW
— _EM_BYZERO
— _EM_FLOAT
— _EM_WORD
+ _EM_ZERODIVIDE

78. Функция-транслятор___________:
+ преобразовывает исключения
— реализует исключения
+ использует инструкцию throw языка С++
— возвращает начальные значения
— завершает выполнение блока
— начинает раскрутку стека
+ описывается в заголовочном файле eh.h
— использует функцию _leave

79. Элементы безопасности объектов Win32:
— создает маркер доступа
+ поддержка защищенных каналов
— разрешает доступ к каналу
— создает аудит доступа к объекту
+ поддержка интеллектуальных карточек
— изменяет информацию безопасности
+ встроенная поддержка функций АРI
— следит за изменениями потока

80. Функции интеллектуальных карточек:
— поддержка защищенных каналов
+ аутентификация пользователей
+ проведение финансовых операции
— разрешает доступ к каналу
— создает аудит доступа к объекту
— изменяет информацию безопасности
— встроенная поддержка функций АРI
+ хранение информации о человеке

81. Режимы доступа к объектам:
+ R, W;
— RA
+ WA;
— СA
— WR
+ WC;
— RW
— CW

82. Модели управления в дискреционной модели безопасности:
+ иерархическое управление
— дистанционное управление
— сетевое управление
+ либеральное управление
— доступное управление
+ централизованное управление
— серверное управление
— древовидное управление

83. Основные функции списка управления доступами:
+ создается владельцем объекта
— создается сервером
— запрещает доступ к объекту
— создается операционной системой
+ открывает требуемый доступ к объекту
+ хранится в виде списка
— ограничивает код доступа
— используется сервером

84. Идентификатор безопасности (Security Identifier):
+ создается операционной системой
— создается сервером
— хранится в оперативной памяти
+ хранится в базе данных SAM
— хранится в логической памяти
— представляет учетную запись
+ бинарное представление учетной записи
— создает учетную запись

85. Символы обозначающие идентификатор безопасности:
— A
+ S
+ R
+ I
— T
— F
— L
— M

86. Дескрипторы безопасности, известные на платформах Windows:
— R -1-5-1
+ S-1-5-1
— R -1-5-5
— S -1-5-17
+ S -1-5-10
— I-1-5-16
+ S -1-5-18
— S-1-5-20

87. Главное отличие привилегий от прав доступа ___________:
— права доступа ограничивает доступ субъекта к объектам
— никаких отличии привилегий от прав доступа
+ правами доступа к объекту управляет владелец этого объекта
+ привилегии касаются субъектов, а не охраняемых объектов системы
— привилегии назначаются по умолчанию в операционных системах Windows
— привилегии касаются охраняемых объектов системы
+ привилегии назначаются субъектам администратором системы
— права доступа выполнить некоторое действие по отношению объектам системы

88. Информация сохраненная в маркере доступа:
— SID учетной записи пользователя
+ идентификатор безопасности текущей сессии (logon session)
— каждое сообщение содержит информацию о субъекте
— статистическая информация о маркере доступа
+ содержит информацию о субъекте, который выполнил действие
— хранятся учетные записи пользователей и групп
+ данные, определяющие политику безопасности на локальной машине
— базу данных учетных записей

89. Уровни безопасности потока-сервера для обработки запросов потока-клиента:
+ Security Anonymous level
+ Security Identification level
+ Security Impersonation level
— Security Delegation
— Security Reference Monitor
— Security Account Manager
— Security Accounts Database
— Security_attributes

90. Уровни безопасности потока-сервера для обработки запросов потока-клиента:
+ Object Open
— ObjectType
+ Object Deleted
— Object_inherit
— pObjectName
+ Object Open for Delete
— se_file_object
— ObjectSecurity

91. Виды связей между процессами-отправителями и адресатами:
— между собой связаны три процесса
+ между собой связаны только два процесса
— между собой связаны четыре процесса
— один процесс связан с N-1 процессами
— один процесс связан с N+1 процессами
+ один процесс связан с N процессами
— нет связи между процессами
+ каждый из N процессов связан с одним процессом

92. Топология связей между процессами:
— между собой связаны три процесса
— между собой связаны четыре процесса
+ между собой связаны только два процесса
— один процесс связан с N-1 процессами
+ один процесс связан с N процессами
— один процесс связан с N+1 процессами
— нет связи между процессами
+ каждый из N процессов связан с одним процессом

93. Тип вместимости связи между процессами (буферизации):
— ограниченная связь
— открытый тип вместимости связи
+ нулевая вместимость связи
— закрытая вместимость связи
+ ограниченная вместимость связи
+ неограниченная вместимость связи
— каждый из процессов связан с одним процессом
— первичный вместимость связи

94. Размер значения именованного канала, посылающий сообщение к серверу:
+ нулевая вместимость связи
— каждый из процессов связан с одним процессом
— первичный вместимость связи
— закрытая вместимость связи
— параллельная связь вместимости
+ неограниченная вместимость связи
— каждый из N процессов связан с одним процессом
+ ограниченная вместимость связи

95. Анонимные каналы:
+ не имеют имени
— имеют названия
+ полудуплексные
— дуплексные
+ передают данные потоком
— не передает данные
— устанавливают связи
— доступны

96. Функции соединения клиентов анонимными каналами:
— CreatePipe
+ DuplicateHandle
— WriteFile
— hWritePipe
— hReadPipe
+ SetHandleInformation
— ReadFile
+ CreateProcess

97. Способы передачи наследуемого дескриптора процессу-клиенту анонимного канала:
+ через командную строку
— синхронный обмен
+ через файл
— топологическая связь
— основе wm_copydata
— с помощью сервер
— через канал
+ посредством сообщения wm_copydata

98. Функции описанные в файле stdio.h, обеспечивают ввод-вывод в стандартные файлы:
— printf
+ stdin
+ stdout
— scanf
— stdopen
+ stderr
— stdcreate
— cin

99. Прототип именованных каналов:
— stdin
+ lpName
+ dwOpenMode
— scanf
— stdout
+ dwPipeMode
— stdcreate
— cin

100. Флаги, для определения направления передачи данных:
+ pipe_access_duplex
— pipe_name
— nOutBufferSize
— nDefaultTimeOut
+ pipe_access_inbound
+ pipe_access_outbound
— dwOpenMode
— dwPipeMode

Комментарии:

Добавить комментарий

1. 2. Потоки и процессы

2. 2.1. Поток управления

3. Определение потока управления

• Определим программу как набор переменных, в которых
хранятся данные, и набор инструкций, которые
выполняют над этими данными некоторые операции.
• Последовательность инструкций, исполняемых во время
работы программы, называется потоком управления
внутри этой программы.
• В общем случае, различные исходные данные порождают
различные потоки управления.

4. Контекст потока

• Поток управления можно представить как нить в
программе, на которую нанизаны инструкции,
выполняемые микропроцессором.
• Поэтому поток управления также называется нитью
(thread).
• В русскоязычной литературе за потоком управления
закрепилось название поток.
• Cодержимое памяти, к которой поток имеет доступ во
время своего исполнения, называется контекстом
потока.

5. Пример программы

• Например, рассмотрим следующую программу:
int a, b, с;
cin >> a >> b;
if (a < b)
с = b — a;
else
c = a — b;
cout << c << endl;

6. Пример потока

• Предположим, что пользователь ввел следующие данные:
1 2.
• Тогда при работе программы будут выполняться
следующие инструкции:
cin >> a >> b;
if (a < b)
с = b — a;
cout << c << endl;

7. Пример потока

• Теперь предположим, что пользователь ввел следующие
данные: 2 1.
• Тогда при работе программы будут исполняться
следующие инструкции:
cin >> a >> b;
if (a < b)
else
c = a — b;
cout << c << endl;

8. Граф потока

• Графически потоки управления могут быть
представлен графом (блок схемой),
вершины которого обозначают инструкции,
а дуги указывают последовательность
исполнения инструкций.
• Например, для нашей программы граф
потоков управления имеет следующий вид:

9.

cin>>a
cin>>b
no
yes
a<b
?
c=b-a
c=a-b
cout<<c

10. Многопоточные и однопоточные программы

• Если в программе могут одновременно
существовать несколько потоков управления, то
программа называется многопоточной.
• А сами потоки в этом случае называются
параллельными.
• Если в программе одновременно может
существовать только один поток, то такая
программа называется однопоточной.

11. 2.2. Состояния потока

12. Определение потока как пары

• Потоки управления определяют динамическое
поведение программы.
• Для простоты изложения предположим, что
программа является однопоточной.
• Программы исполняются процессором.
• Поэтому поток можно рассматривать как пару
поток = (процессор, программа)

13. Условия готовности программы к исполнению

• Программа может исполняться процессором
только в том случае, если выполняются
следующие условия:
– процессор свободен и готов к исполнению этой
программы;
– все системные ресурсы, необходимые для исполнения
этой программы, свободны для использования.
• В этом случае говорят, что программа готова к
исполнению.

14. Состояния процессора и программы

• Для формального описания условий
готовности программы к исполнению
вводятся понятия:
– состояние процессора,
– состояние программы.

15. Возможные состояния процессора

• Предполагают, что процессор может
находиться в следующих состояниях:
• процессор не выделен для исполнения
программы;
• процессор выделен для исполнения
программы.

16. Возможные состояния программы

• Предполагают, что программа может
находиться в следующих состояниях:
• программа не готова к исполнению
процессором;
• программа готова к исполнению
процессором.

17. Краткие обозначения состояний процессора и программы

• Для краткости записи, введем для этих
состояний следующие названия:
– состояния процессора:
• «не выделен»;
• «выделен»;
– состояния программы:
• «не готова»;
• «готова».

18. Состояния потока

• Тогда состояние потока можно определить как
пару состояний:
состояние потока = (состояние процессора, состояние
программы)
• Перечислив различные комбинации состояний
процессора и программы, можно описать
всевозможные состояния потока.

19. Возможные состояния потока

• Введем для состояний потока следующие
названия:
– поток блокирован = (не выделен, не готова);
– поток готов к выполнению = (не выделен, готова);
– поток выполняется = (выделен, готова).
• Будем считать, что состояние (выделен, не готова)
является недостижимым для потока.
• Т. е. процессор не выделяется программе, не
готовой к исполнению.

20. Краткие обозначения состояний потока

• Более кратко эти состояния потока будем
обозначать словами:
– «блокирован»,
– «готов»,
– «выполняется».

21. Начальное и конечное состояния потока

• Кроме того, введем для потоков состояния,
которые обозначают:
– существование программного кода для
создания потока;
– завершение исполнения потока.
• Назовем эти состояния соответственно:
– «новый»;
– «завершен».

22. Диаграмма состояний потока

stm Thread state
Завершен
Новый
Run
Create
Готов
Unblock
Exit
Выполняется
Interrupt
Блокирован
Block

23. Диаграмма состояний потока

• Переход потока из состояния в состояние
выполняется посредством некоторой операции,
которая выполняется над потоком.
• На диаграмме состояний эти операции
обозначаются дугами.
• Название каждой операции указано рядом с
дугой.

24. Операции над потоками, которые выполняются самими потоками

• Create – создание нового потока.
– Выполняется потоком, который создает новый поток из
функции.
• Exit – завершение исполнения потока.
– Выполняется самим исполняемым потоком и
завершает его.

25. Операции над потоками, которые выполняются операционной системой

• Run – запускает готовый поток на выполнение, то
есть потоку выделяется процессорное время.
– Выполняется над потоком только в том случае, если
подошла его очередь к процессору на обслуживание.
• Interrupt – прерывает исполнение потока.
– Выполняется над потоком только в том случае, если
истекло процессорное время, выделенное потоку на
исполнение.

26. Операции над потоками, которые выполняются операционной системой

• Block – блокирует исполнение потока.
– Выполняется над потоком в том случае, если он ждет
наступления некоторого события, например,
завершения операции ввода-вывода или
освобождения ресурса.
• Unblock – разблокирует поток.
– Выполняется над потоком в том случае, если событие,
ожидаемое потоком, наступило.

27. 2.3. Процессы

28. Определение процесса

• Процессом или задачей называется
исполняемое на компьютере приложение
вместе со всеми ресурсами, которые
требуются для его исполнения.

29. Контекст процесса

• Все ресурсы, необходимые для исполнения
процесса, называются контекстом
процесса.

30. Необходимые ресурсы процесса

• Процессу обязательно принадлежат
следующие ресурсы:
– адресное пространство процесса;
– потоки, исполняемые в контексте процесса.

31. Адресное пространство процесса

• Адресное пространство – это виртуальная память,
выделенная процессу для запуска программ.
• Адресные пространства разных процессов не
пересекаются.
• Процесс не имеет непосредственного доступа в адресное
пространство другого процесса.
• Это позволяет избежать влияния ошибок, произошедших в
каком-либо процессе, на исполнение других процессов,
что повышает надежность системы в целом.

32. Взаимодействие потоков процесса

• Потоки, исполняемые в контексте одного
процесса, запускаются в адресном пространстве
этого процесса.
• Поэтому потоки одного процесса могут
обращаться к общим адресам памяти, что
упрощает их взаимодействие.
• На языках программирования высокого уровня
это значит, что потоки могут взаимодействовать
через глобальные переменные.

33. Взаимодействие потоков процесса

• В принципе основной причиной, вызвавшей введение в
системное программирование понятия потока, и было
разделении адресных пространств процессов, используя
виртуальную память.
• Дело в том, что взаимодействие между параллельными
процессами, адресные пространства которых не
пересекаются, требует больших затрат на пересылку
данных, так как выполняется посредством вызова функций
ядра ОС.
• А это сильно замедляет работу приложений.

34. 2.4. Потоки в Windows

35. Определение в Windows

• Потоком в Windows называется объект
ядра, которому операционная система
выделяет процессорное время для
выполнения приложения.

36. Идентификация потока в Windows

• С каждым потоком в Windows связаны:
– уникальный дескриптор (HANDLE);
– уникальный идентификатор.
• Дескрипторы используются программами
пользователя для управления потоками.
• Идентификаторы используются служебными
программами, которые позволяют пользователям
системы отслеживать работу потоков.

37. Контекст потока в Windows

• Каждому потоку в Windows принадлежат
следующие ресурсы:
– код исполняемой функции;




набор регистров процессора;
стек для работы приложения;
стек для работы операционной системы;
маркер доступа, который содержит информацию для
системы безопасности.
• Все эти ресурсы образуют контекст потока в
Windows.

38. Типы потоков в Windows

• В Windows различаются потоки двух типов:
– системные потоки;
– пользовательские потоки.
• Системные потоки выполняют различные сервисы
операционной системы и запускаются ядром
операционной системы.
• Пользовательские потоки служат для решения
задач пользователя и запускаются приложением.

39. Типы потоков в приложении

• В приложении различаются потоки двух типов:
– рабочие потоки (working threads);
– потоки интерфейса пользователя (user interface
threads).
• Рабочие потоки выполняют различные задачи в
приложении.
• Потоки интерфейса пользователя выполняют
обработку сообщений к окнам, с которыми они
связаны.

40. Первичный поток приложения

• Каждое приложение имеет, по крайней мере,
один поток, который называется первичным
(primary) или главным (main) потоком.
• В консольных приложениях это поток, который
исполняет функцию main.
• В приложениях с графическим интерфейсом это
поток, который исполняет функцию WinMain.

41. Функции управления потоками в Windows

CreateThread – один поток создает другой поток;
ExitThread – поток завершает свою работу;
GetExitCodeThread – получить код завершения потока;
TerminateThread – один поток завершает работу другого потока;
SuspendThread – один поток приостанавливает исполнение другого
потока;
• ResumeThread – один поток возобновляет исполнение другого потока;
• Sleep – поток приостанавливает свое исполнение на заданный
интервал времени.

42. 2.5. Процессы в Windows

43. Определение процесса в Windows

• В Windows под процессом понимается
объект ядра, которому принадлежат
системные ресурсы, используемые
исполняемым приложением.
• Поэтому можно сказать, что в Windows
процессом является исполняемое
приложение.

44. Идентификация процесса в Windows

• С каждым процессом в Windows связаны:
– уникальный дескриптор (HANDLE);
– уникальный идентификатор.
• Дескрипторы используются программами
пользователя для управления процессами.
• Идентификаторы используются служебными
программами, которые позволяют пользователям
системы отслеживать работу процессов.

45. Ресурсы процесса в Windows

• Каждый процесс в Windows владеет следующими
ресурсами:




виртуальным адресным пространством;
рабочим множеством страниц в реальной памяти;
первичным потоком;
маркером доступа, содержащим информацию для
системы безопасности;
– таблицей для хранения дескрипторов объектов ядра,
которые используются процессом.

46. Начало и завершение процесса в Windows

• Выполнение каждого процесса начинается
с первичного потока.
• В процессе своего исполнения процесс
может создавать другие потоки.
• Исполнение процесса заканчивается при
завершении работы всех его потоков.

47. Функции для управления процессами в Windows

• CreateProcess – один процесс создает
другой процесс;
• ExitProcess – процесс завершает свою
работу;
• GetExitCodeProcess – получить код
завершения процесса;
• TerminateProcess – один процесс завершает
работу другого процесса.

48. Дочерние процессы

• Процесс, который создается функцией
CreateProcess, называется дочерним или
потомком процесса, который его создает.
• В свою очередь процесс, который вызывает
функцию CreateProcess, называется
родительским или предком процесса,
который он создает.

49. 2.6. Наследование дескрипторов объектов в ОС Windows

50. Определение наследуемого объекта в Windows

• Объект называется наследуемым, если дочерний процесс
имеет доступ к этому объекту через дескриптор, который
получен в родительском процессе при создании этого
объекта.
• Для того чтобы сделать объект наследуемым дочерними
процессами, нужно в родительском процессе установить
свойство наследования в дескрипторе этого объекта.
• Причем это свойство должно быть установлено до
создания дочернего процесса, который должен получить
доступ к наследуемому объекту.

51. Установка свойства наследования дескриптора объекта

• В Windows свойство наследования объекта
устанавливается двумя способами:
– функцией Create при создании объекта;
– функцией SetHandleInformation.
• Для того чтобы узнать, является ли дескриптор
наследуемым, нужно использовать:
– функцию GetHandleInformation.

52. Решение проблемы уникального именования объектов

• Использование свойства наследования
дескрипторов объектов позволяет избежать
решения задачи уникального именования
объектов, используемых в родительских и
дочерних процессах.

Как следует из определения, поток
определяет динамическое поведение
программы. Для простоты изложения
предположим, что программа является
однотипной. Тогда поток можно рассматривать
как пару «поток = (процессор, программа)».

Программа может исполняться процессором
только в том случае, если выполняются
следующие условия:

— все системные ресурсы, которые необходимы
для исполнения этой программы, свободны
для использования;

— процессор свободен и готов к исполнению
этой программы.

В этом случае говорят, что программа
готова к исполнению.

Для формального описания этих требований,
вводятся понятия состояние процессора
и состояние программы. При этом полагают,
что процессор и программа могут находиться
в следующих состояниях:

состояния процессора:

— процессор не выделен для исполнения
программы;

— процессор выделен для исполнения
программы;

состояния программы:

— программа не готова к исполнению;

— программа готова к исполнению;

Для краткости записи, введем для этих
состояний следующие названия:

— состояние процессора:

«не выделен»

«выделен»

— состояние программы:

«не готова»;

«готова».

Тогда состояние потока определяется
как пара состояний: «состояние потока
= (состояние процессора, состояние
программы)».

Перечислив различные комбинации
состояний процессора и программы, можно
описать всевозможные состояния потока.

Введем для состояний потока следующие
названия:

— поток блокирован = («не выделен», «не
готова»);

— поток готов к выполнению – («не выделен»,
«готова»);

— поток выполняется = («выделен», «готова»).

Будем кратко эти состояния потока
обозначать словами:

— блокирован

— готов

— выполняется

Будем считать, что состояние («выделен»,
«не готова») является недостижимым для
потока. То есть программе, не готовой к
исполнению, процессор не выделяется.

Кроме того, введем для потоков состояния,
которые обозначают существование
программного кода для потока и завершение
исполнения потока. Назовем эти состояния
соответственно: «новый» и «завершен».

Д

новый

готов


блокирован


выполняется


завершен


Create


Run


Exit


Block

иаграмма состояний потока

Interrupt

Unblock

Переходы потока из состояния в состояние,
которые на диаграмме обозначаются
дугами, описывают некоторые операции
над потоком. Названия этих операций
указаны рядом с дугами.

Описание операций над потоками:

— операция Create выполняется потоком,
который создает новый поток из функции.
Эта операция переводит поток из состояния
«новый» в состояние «готов».

— операция Exit выполняется самим исполняемым
потоком и завершает его. Этта операция
переводит поток из состояния «выполняется»
в состояние «завершен».

Остальные операции выполняются
операционной системой:

— операция Run запускает готовый поток
на выполнение, то есть потоку выделяется
процессорное время. Эта операция
переводит поток из состояния «готов»
в состояние «выполняется». Поток получает
процессорное время в том случае, если
подошла его очередь к процессору на
обслуживание.

— операция Interrupt задерживает исполнение
потока и переводит его из состояния
«выполняется» в состояние «готов». Эта
операция выполняется над потоком в том
случае, если истекло процессорное время,
выделенное потоку на исполнение.

— операция Block блокирует
исполнение потока, то есть переводит
его из состояния «выполняется» в
состояние «блокирован». Эта операция
выполняется над потоком в том случае,
если он ждет наступления некоторого
события, например, завершения операции
ввода-вывода или освобождения ресурса.

— операция Unblock разблокирует поток, то
есть переводит его из состояния
«блокирован» в состояние «готов». Эта
операция выполняется над потоком в том
случае, если событие, ожидаемое потоком,
наступило.

Вопрос№7 2.3. Определение процесса

Процессом или задачей называется
исполняемое на компьютере приложение
вместе со всеми ресурсами, которые
требуются для его исполнения.

Все ресурсы, необходимые для исполнения
процесса, называются контекстом процесса.

Процессу обязательно принадлежат
следующие ресурсы:

— адресное пространство процесса;

— потоки, исполняемые в контексте
процесса.

Адресное пространство – это виртуальная
память, выделенная процессу для запуска
программ. Адресные пространства разных
процессов не пересекаются. Процесс не
имеет непосредственного доступа в
адресное пространство другого процесса.
Это позволяет избежать влияния ошибок,
произошедших в каком-либо процессе, на
исполнение других процессов, что повышает
надежность системы в целом.

Потоки, исполняемые в контексте
процессора, запускаются в адресном
пространстве этого процесса. Поэтому
потоки одного процесса могут обращаться
к общим адресам памяти, что упрощает их
взаимодействие.

В принципе основной причиной, вызвавшей
введение в системное программирование
понятие потока, и было разделение
адресных пространств процессов, используя
виртуальную память. Дело в том, что в
этом случае взаимодействие между
параллельными процессами требует
больших затрат на пересылку данных, что
сильно замедляет работу приложений.

Вопрос№8 2.4. Потоки в Windows.

Потоком в Windows называется объект ядра,
которому ОС выделяет процессорное время
для выполнения приложения. С каждым
потом связаны:

— уникальный дескриптор (HANDLE);

— уникальный идентификатор.

Дескрипторы используются пользовательскими
программами для управления потоками.

Идентификаторы используются служебными
программами, которые позволяют
пользователям сисемы отслеживать работу
потоков.

Каждому потоку в Windows принадлежат
следующие ресурсы:

— код исполняемой функции;

— набор регистров процессора;

— стек для работы приложения;

— стек для работы ОС;

— маркер доступа, который содержит
информацию для системы безопасности.

Все эти ресурсы образуют контекст потока
в Windows.

В Windows различаются потоки двух типов:

— системные потоки;

— пользовательские потоки.

Системные потоки выполняют различные
сервисы ОС и запускаются ядром ОС.

Пользовательские потоки служат для
решения задач пользователя и запускаются
приложением.

В приложении различаются потоки двух
типов:

— рабочие потоки (working threads);

— потоки интерфейса пользователя (user
interface threads)

Рабочие потоки выполняют различные
задачи в приложении. Потоки интерфейса
пользователя выполняют обработку
сообщений к окнам, с которыми они связаны.

Каждое приложение имеет, по крайней
мере, один поток, который называется
первичным (primary) или главным (main) потоком.
В консольных приложениях это поток,
который исполняет функцию main. В приложениях
с графическим интерфейсом это поток,
который исполняет функцию WinMain.

Функции управления потоками в Windows:

— CreateThread – один поток
создает другой потока;

— ExitThread – поток завершает свою работу;

— TerminateThread – один поток завершает работу
другого потока;

— SuspendThread – один поток приостанавливает
исполнение другого потока;

— ResumeThread – один поток возобновляет
исполнение другого потока;

— Sleep – поток приостанавливает свое
исполнение на заданный интервал времени;

Вопрос№9 2.5. Процессы в Windows.

В Windows под процессом
понимается объект ядра, которому
принадлежать системные ресурсы,
используемые исполняемым приложением.
Поэтому можно сказать, что в Windows процессом
является исполняемое приложение.

С каждым процессом в Windows связаны:

— уникальный дескриптор (HANDLE);

— уникальный идентификатор.

Дескрипторы используются пользовательскими
программами для управленяи процессами.

Идентификаторы используются служебными
программами, которые позволяют
пользователям системы отслеживать
работу процессов.

Каждый процесс в Windows владеет следующими
ресурсами:

— первичным потоком;

— рабочим множеством страниц в реальной
памяти;

— маркером доступа, содержащим информацию
для системы безопасности;

— таблицей для хранения дескрипторов
объектов ядра, которые используются
процессом.

Выполнение каждого процесса начинается
с первичного потока. В процессе своего
исполнения процесс может создавать
другие потоки. Исполнение процесса
заканчивается при завершении работы
всех его потоков.

Для управления процессами в Windows
используются следующие функции:

— CreateProcess – один процесс создает другой
процесс;

— ExitProcess – процесс завершает свою работу;

— TerminateProcess – один процесс завершает
работу другого процесса.

Процесс, который создается функцией
CreateProcess, называется дочерним или потомком
процесса, который его создает. В свою
очередь процесс, который вызывает
функцию CreateProcess, называется родительским
или предком процесса, который он создает.

Вопрос№10 2.6. Наследование дескрипторов
объектов в ОС Windows

Объект называется наследуемым, если он
может быть доступен в дочурних процессах
через дескриптор, который получен в
родительском процессе при создани этого
объекта. Для того, чтобы сделать объект
наследуемым дочерними процессами, нужно
в родительском процессе установить
свойство наследования в дескрипторе
этого объекта. Причем это свойство
должно быть установлено до создания
дочернего процесса, который должен
получить доступ к наследуемому объекту.

В Windows свойство наследования объекта
устанавливается двумя способами:

— при создании объекта функцией Create;

— функцией SetHandleInformation.

Для того, чтобы узнать, установлено ли
в дескрипторе свойство наследования
объекта, нужно использовать функцию:

— GetHandleInformation.

Использование свойства наследования
объектов позволяет избежать проблемы
уникального именования объектов, которая
возникает в случае, если с одним объектом
должны работать несколько процессов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

В однозадачной ОС пользователь может запустить одновременно не более одной программы и только после того как она закончит работу можно будет запустить другую. В многозадачной ОС пользователи могут одновременно запускать несколько программ или даже несколько копий одной программы.

В чем разница между программой и процессом? Программа – это статическая последовательность команд, а процесс (process) – это программа и системные ресурсы, необходимые для ее выполнения. Процесс является субъектом владения ресурсами и единицей работы. ОС выделяет каждому процессу порцию системных ресурсов и гарантирует, что программа каждого процесса будет направляться на исполнение в определенном порядке и своевременно.

ОС содержит блок кода, управляющий созданием и удалением процессов, а также отношениями между ними. Этот код называется структурой процессов (process structure) и в Windows NT реализован диспетчером процессов (process manager).

Его основная задача предоставить набор базовых сервисов процесса, которые подсистемы среды могли бы использовать для эмуляции своих собственных уникальных структур процессов.

В разных ОС процессы реализованы по-разному. Они различаются своим представлением (структурами данных), способами именования и защиты, а также отношениями между собой. Базовые процессы Windows NT имеют ряд характеристик, отличающих их от процессов других ОС:

  • процессы реализованы как объекты, и доступ к ним осуществляется посредством объектных сервисов;
  • в адресном пространстве процесса может исполняться несколько потоков;
  • объект-процесс и объект-поток имеют встроенные возможности синхронизации.

Что такое процесс?

Процесс состоит из:

  • исполняемой программы (код и данные);
  • закрытого адресного пространства (address space), т.е. набора адресов виртуальной памяти, который процесс может использовать;
  • системных ресурсов, выделяемых ОС процессу во время выполнения программы (семафоров, файлов и т.д.);
  • по крайней мере, одного потока управления (thread of execution). Поток – это сущность внутри процесса, которую ядро NT направляет на исполнение. Без него программа процесса не может выполняться.

Адресное пространство

С помощью системы виртуальной памяти (virtual memory) программисты (и создаваемые ими процессы) получают логический образ памяти, который не совпадает с ее физической структурой (см. Рис. 1 Виртуальная и физическая память).

При всяком обращении процесса по виртуальному адресу система виртуальной памяти транслирует этот адрес в физический адрес. Она также предотвращает непосредственный доступ процесса к виртуальной памяти, занятой другими процессами или ОС. Для исполнения кода ОС или доступа к памяти ОС поток должен выполняться в режиме ядра (kernel mode). Большинство процессов – это процессы пользовательского режима (user mode).

Поток пользовательского режима получает доступ к ОС, вызывая некоторый системный сервис. Когда поток вызывает сервис, происходит переключение из пользовательского режима в режим ядра. ОС проверяет аргументы, переданные сервису, после чего исполняет сервис. Перед возвратом управления пользовательской программе ОС переключает поток обратно в пользовательский режим.

Системные ресурсы

Кроме закрытого адресного пространства, с каждым процессом связан набор системных ресурсов.

Маркер доступа (Access Token) присоединяет к процессу ОС. Это объект исполнительной системы, который содержит информацию о правах зарегистрированного в системе пользователя, которого представляет данный процесс. Если процессу требуется получить информацию о своем маркере доступа или изменить некоторые атрибуты маркера, он должен открыть описатель своего объекта-маркера. Подсистема защиты определяет, есть ли у объекта такое право.

Ниже маркера доступа расположен набор структур данных, созданный диспетчером виртуальной памяти для отслеживания виртуальных адресов, используемых процессом.

Таблица объектов показана внизу. Процесс открыл описатели потока, файла и секции совместно используемой памяти. Описание виртуального адресного пространства содержит информацию о виртуальных адресах, занятых стеком потока и объектом-секцией.

Объект-процесс

Каждый процесс в Windows NT представлен блоком процесса, создаваемым исполнительной системой (EPROCESS). В блоке EPROCESS содержатся атрибуты процесса и указатели на некоторые структуры данных. Так, у каждого процесса есть один или более потоков, представляемых блоками потоков исполнительной системы (ETHREAD). Блок EPROCESS и связанные с ним структуры данных хранятся в системном пространстве. Исключение составляет только блок переменных окружения процесса (process environment block, PEB), он находится в адресном пространстве процесса (см. Рис. 3 Блоки переменных окружения процесса (PEB) и потока (TEB)).

В исполнительной системе процессы – это объекты исполнительной системы, создаваемые и уничтожаемые диспетчером объектов. Объект-процесс, как и другие объекты, содержит заголовок, создаваемый и инициализируемый диспетчером объектов. В заголовке хранятся стандартные атрибуты объекта, такие как дескриптор защиты объекта, имя и каталог объектов, в котором хранится имя, если оно есть.

Диспетчер процессов определяет атрибуты, хранящиеся в теле объектов-процессов, а также предоставляет системные сервисы для чтения и изменения этих атрибутов. Атрибуты и сервисы для объектов-процессов показаны на Рис. 4 Блоки процесса исполнительной системы (EPROCESS) и ядра (KPROCESS). Объект процесс исполнительной системы включает объект процесс ядра (содержит указатель на объект процесс ядра). Ядро управляет объектом процесс ядра, а исполнительная система управляет объектом исполнительной системы.

Мы рассматриваем основные атрибуты этих объектов по отдельности, для того чтобы лучше понять какие задачи решаются ядром, а какие исполнительной системой. При выполнении лабораторных работ эта детализация не существенна и надо будет использовать Win32 API функции для работы с объектом процесс исполнительной системы.

Рассмотрим основные атрибуты:

  • идентификатор процесса – уникальное значение, идентифицирующее процесс в ОС;
  • базовый приоритет — базовый приоритет потоков процесса;
  • привязка к процессорам (процессорное сродство) – набор процессоров, на которых потоки процесса могут исполняться по умолчанию;
  • размеры квот – максимальный объем резидентной и нерезидентной системной памяти, пространства в файле подкачки и процессорного времени, выделяемый пользовательскому процессу;
  • статус завершения – причина завершения процесса.

Некоторые атрибуты объекта-процесса налагают ограничения на потоки, исполняемые внутри процесса. Например, на многопроцессорном компьютере процессорное сродство может ограничить исполнение потоков процесса только на заданных процессорах. Аналогично, размеры квот регулируют, сколько памяти, пространства в файле подкачки и процессорного времени могут использовать все потоки процесса вместе.

Базовый приоритет процесса помогает ядру NT регулировать приоритет потоков в системе. Приоритеты потоков изменяются, но всегда остаются в диапазоне базовых приоритетов их процессов.

Большинство сервисов объекта-процесса мы будем использовать при выполнении лабораторных работ. Например, сервис завершения процесса останавливает исполнение всех его потоков, закрывает все открытые описатели объектов и уничтожает виртуальное адресное пространство процесса.

Что такое поток?

Поток – это единица исполнения, отдельный счетчик команд или подлежащая планированию сущность внутри процесса.

В то время как процесс – это логическое представление работы, которую должна выполнить ОС, поток отображает одну из, возможно, многих необходимых подзадач. Предположим, что пользователь запустил приложение для работы с базой данных. ОС представляет этот вызов приложения как один процесс. Пусть теперь пользователь запросил генерацию отчета по данным из базы и сохранение этого отчета в файле. Пока идет выполнение этой длительной операции, пользователь ввел новый запрос к базе данных. ОС представляет каждый из запросов – генерацию отчета и новый запрос к базе – как отдельные потоки внутри процесса приложения для работы с базой данных. Эти потоки могут выполняться процессором независимо друг от друга, т.е. обе операции можно выполнять в одно и то же время (параллельно).

Основные составляющие потока в исполнительной системе NT:

  • Уникальный идентификатор, называемый идентификатором клиента
  • Содержимое набора регистров, отражающее состояние процессора
  • Два стека: один используется потоком при работе в пользовательском режиме, а другой — в режиме ядра
  • Собственная область памяти, предназначенная для использования подсистемами, библиотеками периода выполнения и динамически подключаемыми библиотеками (DLL).

Регистры, стек, и собственная область памяти называются контекстом (context) потока. Фактически данные, составляющие контекст потока, определяются типом процессора.

Поток находится в адресном пространстве процесса, используя его для хранения данных во время выполнения. Если в одном процессе существует несколько потоков, то они совместно используют адресное пространство и все ресурсы, включая маркер доступа, базовый приоритет и описатели объектов из таблицы объектов процесса. Ядро NT направляет потоки на исполнение некоторому процессору. Таким образом, каждый процесс NT должен иметь, по меньшей мере, один поток.

Многозадачность и многопроцессорная обработка

ОС вытесняющей многозадачностью должна использовать тот или иной алгоритм, позволяющий ей распределять процессорное время между потоками. Каждые 20 мс Windows просматривает все существующие объекты потоки  и отмечает те из них, которые могут получить процессорное время. Далее она выбирает один из таких объектов и загружает в регистры процессора значение его контекста. Эта операция называется переключением контекста (context switching). Поток выполняет код и манипулирует данными в адресном пространстве своего процесса. Примерно через 20 мс Windows сохранит значения регистров процессора в контексте потока и приостановит его выполнение. Далее система просмотрит остальные объекты потоки, подлежащие выполнению, выберет один из них, загрузит его контекст в регистры процессора, и все повторится. Этот цикл операций – выбор потока, загрузка его контекста, выполнение и сохранение контекста – начинается с момента запуска системы и продолжается до ее выключения (см. Рис. 5 Состояния потоков).

Система планирует выполнение только тех потоков, которые могут получить процессорное время. У некоторых объектов-потоков значение счетчика простоев (suspend count) больше 0, это значит, что соответствующие потоки приостановлены и не получают процессорного времени. Кроме приостановленных, существуют и другие потоки, не участвующие в распределении процессорного времени, — они ожидают каких-либо событий.

Поток получает доступ к процессору на 20 мс, после чего планировщик переключает процессор на выполнение другого потока. Но так происходит, только если у всех потоков один приоритет. На самом деле в системе существуют потоки с разными приоритетами, а это меняет порядок распределения процессорного времени.

Каждому потоку присваивается уровень приоритета – от 0 (самый низкий) до 31 (самый высокий). Решая, какому потоку выделить процессорное время, система сначала рассматривает только потоки с приоритетом 31 и подключает их к процессору по принципу карусели. Если поток с приоритетом 31 не исключен из планирования, он получает квант времени, по истечении которого система проверяет, есть ли еще один такой поток. Если есть, то и он получает свой квант процессорного времени.

Пока в системе имеются планируемые потоки с приоритетом 31, ни один поток с более низким приоритетом процессорного времени не получит. Такая ситуация называется голоданием (starvation). Она наблюдается, когда потоки с более высоким приоритетом так интенсивно используют процессор, что остальным ничего не достается.

Кроме того, потоки с более высоким приоритетом вытесняют потоки с более низким приоритетом. Допустим, процессор исполняет поток с приоритетом 5, и тут система обнаруживает, что поток с более высоким приоритетом готов к выполнению. Тогда система остановит поток с более низким приоритетом – даже если не истек отведенный ему квант процессорного времени – подключит к процессору поток с более высоким приоритетом и выдаст ему полный квант времени.

Процессор может выполнять не более одного потока одновременно. Однако многозадачная (multitasking) ОС дает пользователю возможность исполнять несколько программ, причем создается впечатление, что все они исполняются одновременно. Это достигается следующим образом:

  • поток исполняется до тех пор, пока его исполнение не будет прервано или ему не придется ждать освобождения некоторого ресурса;
  • cохраняется контекст потока;
  • загружается контекст другого потока;

этот цикл повторяется до тех пор, пока есть потоки, ожидающие выполнения.

Переключение процессора с исполнения одного потока на исполнение другого потока называется  переключением контекста (context switching). В Windows NT оно осуществляется ядром.

Многозадачность увеличивает объем работы, выполняемой системой, потому что большинство потоков не могут исполняться непрерывно. Периодически поток прекращает выполнение и ждет пока другой поток, например, освободит ресурс необходимый первому. Благодаря многозадачности, пока один поток ожидает, может выполняться другой поток, и время процессора не расходуется впустую.

Вытесняющая многозадачность (preemptive multitasking) – это разновидность многозадачности, при которой ОС не ждет, пока поток добровольно предоставит процессор другим потокам. Вместо этого ОС прерывает поток, после того как он выполнялся в течение заранее заданного периода времени, так называемого кванта времени (time quantum), или когда готов к выполнению поток с большим приоритетом. Вытеснение предотвращает монополизацию процессора одним потоком и предоставляет другим потокам их долю процессорного времени. Windows NT – это система с вытесняющей многозадачностью. В невытесняющих системах, поток должен был добровольно передавать управление процессором. Плохие программы могут захватить процессор и нарушить работу других приложений или всей системы.

Аннотация: Поток представляет собой набор исполняющихся команд для текущего момента исполнения. С одним или несколькими потоками ассоциирован набор ресурсов, которые объединены в рамках процесса. Для описания процесса в системе поддерживается связанная совокупность структур, главной из которых является структура EPROCESS. В свою очередь, структура ETHREAD и связанные с ней структуры необходимы для реализации потоков. В лекции проанализированы функции CreateProcess и CreateThread и этапы создания процессов и потоков. Важными характеристиками потока являются его контекст и состояние. Наблюдение за состоянием потоков предлагается осуществить при помощи инструментальных средств системы

Понятие процесса и потока

На сегодня общепринятым является взгляд на ОС как на систему, обеспечивающую параллельное (или псевдопараллельное) выполнение набора последовательных процессов или просто процессов. Задача ОС состоит в том, чтобы организовать их поддержку, которая подразумевает, что каждый процесс получит все необходимые ему ресурсы (место в памяти, процессорное время и т.д.). Считается также, что независимые процессы не должны влиять друг на друга, а процессы, которым необходимо обмениваться информацией, должны иметь возможность сделать это путем межпроцессного взаимодействия.

Из курса теории операционных систем известно, что процесс является динамическим объектом, описывающим выполнение программы. Процессу выделяются системные ресурсы: закрытое адресное пространство, семафоры, коммуникационные порты, файлы и т.д. Процесс характеризуется текущим состоянием (выполнение, ожидание, готовность и т.д.).

Для описания столь сложного динамического объекта ОС поддерживает набор структур, главную из которых принято называть блоком управления процессом (PCB, Process control block). В состав PCB обычно включают:

  • состояние, в котором находится процесс;
  • программный счетчик процесса или, другими словами, адрес команды, которая должна быть выполнена для него следующей;
  • содержимое регистров процессора;
  • данные, необходимые для планирования использования процессора и управления памятью (приоритет процесса, размер и расположение адресного пространства и т. д.);
  • учетные данные (идентификационный номер процесса, какой пользователь инициировал его работу, общее время использования процессора данным процессом и т. д.);
  • информацию об устройствах ввода-вывода, связанных с процессом (например, какие устройства закреплены за процессом; таблица открытых файлов).

Блок управления процессом является моделью процесса для операционной системы. Любая операция, производимая операционной системой над процессом, вызывает определенные изменения в PCB. Псевдопараллельное выполнение процессов предполагает периодическую приостановку текущего процесса и его последующее возобновление. Для этого нужно уметь сохранять часть данных из PCB, которые обычно называют контекстом процесса, а операцию по сохранению данных одного процесса и восстановлению данных другого называют переключением контекстов. Переключение контекста не имеет отношения к полезной работе, выполняемой процессами, и время, затраченное на него, сокращает полезное время работы процессора.

Потоки

Классический процесс содержит в своем адресном пространстве одну программу. Однако во многих ситуациях целесообразно поддерживать в едином адресном пространстве процесса несколько выполняющихся программ (потоков команд или просто потоков ), работающих с общими данными и ресурсами.

Процесс с несколькими потоками

Рис.
5.1.
Процесс с несколькими потоками

В этом случае процесс можно рассматривать в качестве контейнера ресурсов, а все проблемы, связанные с динамикой исполнения, решаются на уровне потоков. Обычно каждый процесс начинается с одного потока, а остальные (при необходимости) создаются в ходе выполнения. Теперь уже не процесс, а поток характеризуется состоянием, поток является единицей планирования, процессор переключается между потоками, и необходимо сохранять контекст потока (что существенно проще, чем сохранение контекста процесса). Подобно процессам потоки (нити, threads) в системе описываются структурой данных, которую обычно называют блоком управления потоком (thread control block, TCB).

Реализация процессов

Внутреннее устройство процессов в ОС Windows

В 32-разрядной версии системы у каждого процесса есть 4-гигабайтное адресное пространство, в котором пользовательский код занимает нижние 2 гигабайта (в серверах 3 Гбайта). В своем адресном пространстве, которое представляет собой набор регионов и описывается специальными структурами данных (см. часть III «система управления памятью»), процесс содержит потоки, учетную информацию и ссылки на ресурсы, которые обобществляются всеми потоками процесса.

Блок управления процессом (PCB) реализован в виде набора связанных структур, главная из которых называется блоком процесса EPROCESS. Соответственно, каждый поток также представлен набором структур во главе с блоком потока ETHREAD. Эти наборы данных, за исключением блоков переменных окружения процесса и потока (PEB и TEB), существуют в системном адресном пространстве. Упрощенная схема структур данных процесса показана на
рис.
5.2.

Управляющие структуры данных процесса

Рис.
5.2.
Управляющие структуры данных процесса

Содержимое блока EPROCESS подробно описано в
[
Руссинович
]
. Блок KPROCESS (на рис. справа), блок переменных окружения процесса (PEB) и структура данных, поддерживаемая подсистемой Win32 (блок процесса Win32), содержат дополнительные сведения об объекте «процесс».

Идентификатор процесса кратен четырем и используется в роли байтового индекса в таблицах ядра наравне с другими объектами.

Создание процесса

Обычно процесс создается другим процессом вызовом Win32-функции CreateProcess (а также CreateProcessAsUser и CreateProcessWithLogonW ). Создание процесса осуществляется в несколько этапов.

На первом этапе, выполняемом библиотекой kernel32.dll в режиме пользователя, на диске отыскивается нужный файл-образ, после чего создается объект «раздел» памяти для его проецирования на адресное пространство нового процесса.

На втором этапе выполняется обращение к системному сервису NtCreateProcess для создания объекта «процесс». Формируются блоки EPROCESS, KPROCESS и блок переменных окружения PEB. Менеджер процессов инициализирует в блоке процесса маркер доступа (копируя аналогичный маркер родительского процесса), идентификатор и другие поля.

На третьем этапе в уже полностью проинициализированном объекте «процесс» необходимо создать первичный поток. Это, посредством системного сервиса NtCreateThread, делает библиотека kernel32.dll.

Затем kernel32.dll посылает подсистеме Win32 сообщение, которое содержит информацию, необходимую для выполнения нового процесса. Данные о процессе и потоке помещаются, соответственно, в список процессов и список потоков данного процесса, затем устанавливается приоритет процесса, создается структура, используемая той частью подсистемы Win32, которая работает в режиме ядра, и т.д.

Наконец, запускается первичный поток, для чего формируются его начальный контекст и стек, и выполняется запуск стартовой процедуры потока режима ядра KiThreadStartup. После этого стартовый код из библиотеки C/C++ передает управление функции main() запускаемой программы.

В книге
[
Руссинович
]
этапы создания процесса описаны более подробно.

Функция CreateProcess

Таким образом, если приложение намерено создать новый процесс, один из его потоков должен обратиться к Win32-функции CreateProcess.

BOOL CreateProcess( 
  PCTSTR pszApplicationName, 
  PTSTR pszCommandLine, 
  PSECURITY_ATTRIBUTES psaProcess, 
  PSECURITY_ATTRIBUTES psaThread, 
  BOOL bInheritHandles, 
  DWORD fdwCreate, 
  PVOID pvEnvironment,
  PCTSTR pszCurDir, 
  PSTARTUPINFO psiStartInfo, 
  PPROCESS_INFORMATION ppiProcInfo);

Описание параметров функции можно посмотреть в MSDN.

Формально ОС Windows не поддерживает какой-либо иерархии процессов, например, отношений «родительский-дочерний». Однако, негласная иерархия, заключающаяся в том, кто чьим дескриптором (описателем) владеет, все же существует. Например, владение дескриптором процесса позволяет влиять на его адресное пространство и функционирование. В данном случае описатель дочернего процесса возвращается создающему процессу в составе параметра ppiProcInfo. Хотя он не может быть напрямую передан другому процессу, тем не менее, имеется возможность передать другому процессу его дубликат. Таким путем при необходимости в группе процессов может быть сформирована нужная иерархия.

Процессы и потоки Windows

Внутри каждого процесса могут выполняться одна или несколько потоков, и именно поток является базовой единицей выполнения в Windows. Выполнение потоков планируется системой на основе обычных факторов: наличие таких ресурсов, как CPU и физическая память, приоритеты, равнодоступность ресурсов и так далее. Начиная с версии NT4, в Windows поддерживается симметричная многопроцессорная обработка (Symmetric Multiprocessing, SMP), позволяющая распределять выполнение потоков между отдельными процессорами, установленными в системе.

С точки зрения программиста каждому процессу принадлежат ресурсы, представленные следующими компонентами:

• Одна или несколько потоков.

• Виртуальное адресное пространство, отличное от адресных пространств других процессов, если не считать областей памяти, распределенных явным образом для совместного использования (разделения) несколькими процессами. Заметьте, что разделяемые отображенные файлы совместно используют физическую память, тогда как разделяющие их процессы используют различные виртуальные адресные пространства.

• Один или несколько сегментов кода, включая код DLL.

• Один или несколько сегментов данных, содержащих глобальные переменные.

• Строки, содержащие информацию об окружении, например, информацию о текущем пути доступа к файлам.

• Куча процесса.

• Различного рода ресурсы, например, дескрипторы открытых файлов и другие кучи.

Поток разделяет вместе с процессом код, глобальные переменные, строки окружения и другие ресурсы. Каждый поток планируется независимо от других и располагает следующими элементами:

• Стек, используемый для вызова процедур, прерываний и обработчиков исключений, а также хранения автоматических переменных.

• Локальные области хранения потока (Thread Local Storage, SLT) — массивы указателей, используя которые каждый поток может создавать собственную уникальную информационную среду.

• Аргумент в стеке, получаемый от создающего потока, который обычно является уникальным для каждого потока.

• Структура контекста, поддерживаемая ядром системы и содержащая значения машинных регистров.

На рис. 6.1 показан процесс с несколькими потоками. Рисунок является схематическим, поэтому на нем не указаны фактические адреса памяти и не соблюдены масштабы.

В данной главе показано, как работать с процессами, состоящими из единственного потока. О том, как использовать несколько потоков, рассказывается в главе 7.

Примечание

Рисунок 6.1 является высокоуровневым с точки зрения программиста представлением процесса. В действительности эта картина должна быть дополнена множеством технических деталей и особенностями реализации. Более подробную информацию заинтересованные читатели могут найти в книге Соломона (Solomon) и Руссиновича (Russinovich) Inside Windows 2000. 

Процессы UNIX сопоставимы с процессами Windows, имеющими единственный поток.

Реализации UNIX недавно пополнились потоками POSIX Pthreads, которые в настоящее время используются почти повсеместно. В [40] потоки не обсуждаются; все рассмотрение основано на процессах.

Наверное, можно было бы даже не напоминать о том, что понятие потоков не является новым, и их различные реализации предлагаются поставщиками уже на протяжении целого ряда лет. Однако потоки Pthreads являются самым распространенным стандартом, в то время как коммерческие реализации потоков являются устаревшими.

Рис. 6.1. Процесс и его потоки

Читайте также

Процессы и потоки

Процессы и потоки
В этой главе представлено описание процессов и потоков в QNX/ Neutrino, диспетчеризации, системы приоритетов, и дано понятие о реальном времени. Вы узнаете о состояниях потоков и алгоритмах диспетчеризации, которые применяются в QNX/ Neutrino, а также изучите

Процессы и потоки

Процессы и потоки
Вернемся к нашим рассуждениям о потоках и процессах, но на сей раз с точки зрения перспективы их применения в системах реального времени. Затем мы рассмотрим вызовы функций, которые применяются при работе с потоками и процессами.Мы знаем, что процесс

2. Процессы и потоки

2. Процессы и потоки
При внимательном чтении технической документации [8] и литературы по ОС QNX [1] отчетливо бросается в глаза, что тонкие детали создания и функционирования процессов и потоков описаны крайне поверхностно и на весьма некачественном уровне. Возможно, это

Потоки

Потоки
Последующие расширения[14] POSIX специфицируют широкий спектр механизмов «легких процессов» — потоков (группа API pthread_*()). Техника потоков вводит новую парадигму программирования вместо уже ставших традиционными UNIX-методов. Это обстоятельство часто недооценивается.

Процессы, задачи, задания, группы активизации и потоки

Процессы, задачи, задания, группы активизации и потоки
Как уже упоминалось, первоначально в AS/400 было определено три уровня работы. Самый низкий уровень, под MI, — задача. Процесс «живет» на уровне MI и построен на структуре задач SLIC. Поверх модели процессов MI OS/400 в качестве

10.4 ПОТОКИ

10.4 ПОТОКИ
Схема реализации драйверов устройств, хотя и отвечает заложенным требованиям, страдает некоторыми недостатками, которые с годами стали заметнее. Разные драйверы имеют тенденцию дублировать свои функции, в частности драйверы, которые реализуют сетевые

1.2. Процессы, потоки и общий доступ к информации

1.2. Процессы, потоки и общий доступ к информации
В традиционной модели программирования Unix в системе могут одновременно выполняться несколько процессов, каждому из которых выделяется собственное адресное пространство. Это иллюстрирует рис. 1.1. 

Рис. 1.1. Совместное

Потоки

Потоки
Хотя концепция процессов в системах Unix используется уже очень давно, возможность использовать несколько потоков внутри одного процесса появилась относительно недавно. Стандарт потоков Posix.1, называемый Pthreads, был принят в 1995 году. С точки зрения взаимодействия

38. Потоки

38. Потоки
Язык C++ не обладает средствами для ввода/вывода. Ему это и не нужно; подобные средства легко и элегантно можно создать, применяя сам язык. Стандартная библиотека потокового ввода/вывода дает возможность осуществлять гибкий и эффективный с гарантией типа метод

7.3.1.2. Потоки

7.3.1.2. Потоки
Потоки (streams) сетевого взаимодействия были разработаны Деннисом Ритчи для Unix Version 8 (1985). Их новая реализация называется STREAMS (именно так, в документации все буквы прописные). Впервые она стала доетупной в версии 3.0 System V Unix (1986). Средство STREAMS обеспечивало

7.3.1.2. Потоки

7.3.1.2. Потоки
Потоки (streams) сетевого взаимодействия были разработаны Деннисом Ритчи для Unix Version 8 (1985). Их новая реализация называется STREAMS (именно так, в документации все буквы прописные). Впервые она стала доступной в версии 3.0 System V Unix (1986). Средство STREAMS обеспечивало

2.2.1.1 Потоки

2.2.1.1 Потоки
Архитектуру INFORMIX-OnLine DS называют также многопотоковой. Для каждого клиента создается так называемый поток, или нить (thread). Поток — это подзадача, выполняемая в рамках одного из серверных процессов. В некоторых случаях для обслуживания одного клиентского

8.3 Файлы и Потоки

8.3 Файлы и Потоки
Потоки обычно связаны с файлами. Библиотека потоков содает стандартный поток ввода cin, стандартный поток вывода cout и стандартный поток ошибок cerr. Программист может отрывать другие файлы и создавать для них

ГЛABA 6 Процессы, потоки и задания

ГЛABA 6 Процессы, потоки и задания
B этой главе мы рассмотрим структуры данных и алгоритмы, связанные с процессами, потоками и заданиями в Microsoft Windows. B первом разделе основное внимание уделяется внутренним структурам данных, из которых состоит процесс. Bo втором разделе

Понравилась статья? Поделить с друзьями:
  • Родительский контроль windows 10 без учетной записи майкрософт
  • Рекомендуемая конфигурация компьютера для windows 10
  • Ресурсы интерфейса windows приложений содержатся в отдельных файлах с расширением
  • Ровно 100 гб при установке windows 10
  • Рекомендованный размер файла подкачки в windows 10