Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vovk.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
456.19 Кб
Скачать

11. Концепция потоков и процессов

Часто в системах, особенно реального времени, бывает необходимо выполнять некоторые действия паралельно. Как правило это позволяет приложению максимально использовать ресурсы процессора для быстрейшего получения результатов работы. Для этого служит механизм процессов и потоков. Так в микроядре Neutrino2 параллелизм работы достигается за счет выполнения модели потоков по стандарту POSIX (Portable Operating System Interface for Unix), который определяет процесс как контейнер, что содержит в себе один или более потоков.

Процесс всегда содержит хотя бы один поток, поскольку мы ведь говорим об исполняемом, развивающемся во времени коде. Для процессов, исходный код которых подготовлен на языке C, функцией главного потока процесса является поток, в котором исполняется функция main(). Код и данные процесса размещаются в оперативной памяти в адресном пространстве процесса. Любой процесс может содержать произвольное количество потоков, но не меньше чем один, и не больше чем 32767 (для QNX версии 6.2).

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

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

• PPID (Parent Process ID) – PID процесса, породившего данный процесс. Таким образом все процессы в системе включены в единую древовидную иерархию. • TTY – терминальная линия: терминал или псевдотерминал, ассоциированный с процессом. Если процесс становится процессом демоном, от он отсоединяется от своей терминальной линии, и не имеет ассоциированной терминальной линии (запуск процесса как фонового – знак “&” в конце командной строки – не является достаточным основанием для отсоединения процесса от терминальной линии). • RID и EUID – реальный и эффективный идентификаторы пользователя. Эффективный идентификатор служит для определения прав доступа процесса к системным ресурсам (в первую очередь - к файловым системам).

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

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

  • tid – каждый поток идентифицируется целочисленным значением, которое начинается с 1 и уникально в пределах процесса.

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

  • стек – каждый поток выполняется в своем собственном стеке, который хранится в пределах адресного пространства его процесса.;

  • маска сигнала – каждый поток имеет собственную маску сигнала.

Поток имеет определенную системную область данных - «thread local storage» (TLS). TLS используется, чтобы сберечь информацию о потоке (например tid, вказівник стеку). TLS непосредственно не доступен приложению. Функции для работы с потоками реализованы в библиотеке pthread и обеспечивают механизм для связи глобальной переменной процесса с данными потока.

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