Sunday, Feb 05th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Службы ядра Состояние процесса

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

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

процесса и PID его родительского процесса.

 

Схема состояния процесса в FreeBSD 5.2 была полностью реорганизована. Целью этого являлась поддержка множества потоков, разделяющих общее адресное пространство и другие ресурсы. На других системах потоки назывались также облегченными процессами. Поток является единицей выполнения процесса; ему требуются адресное пространство и другие ресурсы, но он может разделять многие из этих ресурсов с другими потоками. Потоки, разделяющие адресное пространство и другие ресурсы, планируются независимо, они все могут одновременно осуществлять системные вызовы. Реорганизация состояния процессов в FreeBSD 5.2 была спроектирована для поддержки потоков, способных выбирать набор разделяемых ресурсов, которые известны как процессы с переменным весом [Aral et al., 1989].
Разработчики осуществили реорганизацию, переместив многие компоненты состояния процесса из структур процесса и пользователя в отдельные подструктуры для каждого типа информации о состоянии, как показано на рис. Структура процесса прямо или косвенно ссылается на все подструктуры. Структура пользователя остается главным образом в виде исторического артефакта ради пользы отладчиков. Структура потока содержит только сведения, необходимые для работы в ядре: информацию о планировании, стек для использования в режиме ядра, блок управления потоком (thread control block - ТСВ) и другое машинно-зависимое состояние. ТСВ определяется машинной архитектурой; он включает регистры общего назначения, указатели стека, счетчик команд, слово состояния процессора и регистры управления памятью.

В своей наиболее облегченной форме потоки FreeBSD разделяют все ресурсы процесса, включая PID. Когда необходимо дополнительное параллельное вычисление, новый поток создается с использованием системного вызова kse_create. Все планирование и управление потоками обрабатывается планировщиком уровня пользователя, который уведомляется о смене потоков через обратные вызовы из ядра. Менеджер потоков уровня пользователя должен также отслеживать пользовательские стеки, используемые каждым потоком, поскольку совместно используется все адресное пространство, включая области, обычно используемые для стека. Поскольку все потоки разделяют общую структуру процесса, у них единый PID и соответственно они отображаются в списке ps в виде одного элемента.

Многие приложения не хотят использовать совместно все ресурсы процесса. Системный вызов rfork создает элемент процесса, который разделяет выбранный набор ресурсов своего родителя. Обычно действия сигналов, статистика и части адресного пространства со стеком и данными совместно не используются. В отличие от облегченных потоков, созданных с помощью ksecreate, системный вызов rfork связывает с каждым потоком PID, который отображается в списке ps и которым можно управлять тем же способом, как для любого другого процесса в системе. Процессы, созданные с помощью fork, vfork или rfork, имеют единственную связанную с ними структуру потока.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 23 гостей онлайн