Структура процессов


 

На рис. 4.16 приводится общее сравнение структуры процессов в традици­онной операционной системе UNIX со структурой процессов в операционной сис­теме Solaris. В типичных реализациях UNIX в структуру процесса входят такие составляющие: идентификатор процесса, идентификаторы пользователя, таблица диспетчеризации сигналов; дескрипторы файлов, схема распределения памяти, структура состояния процессора. В операционной системе Solaris эта базовая структура остается, но в ней блок состояния процессора заменен списком струк­тур, в котором для каждого облегченного процесса имеется свой блок данных.

 

 

В структуру данных облегченного процесса входят такие элементы:

• идентификатор облегченного процесса;

• приоритет данного облегченного процесса (и, следовательно, потока ядра, который его поддерживает);

• маска сигналов, предоставляющая ядру информацию о том, какие сигналы могут быть восприняты процессом;

• сохраненные значения регистров пользовательского уровня (когда облегчен­ный процесс не выполняется);

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

• данные по использованию ресурсов и профилированию;

• указатель на соответствующий поток ядра;

• указатель на структуру процесса.

Выполнение потоков

 

На рис. 4.17 показана облегченная схема состояний выполнения потоков на пользовательском уровне и облегченных процессов. Выполнением потоков на пользовательском уровне управляет библиотека потоков. Рассмотрим сначала не­связанные состояния, т.е. состояния, которые совместно используют несколько облегченных процессов. Несвязанный поток может находиться в одном из четы­рех состояний: работоспособный, активный, ожидания или остановленный. Если поток на пользовательском уровне находится в активном состоянии, он закреп­ляется за облегченным процессом и выполняется до тех пор, пока выполняется лежащий в его основе поток ядра. Поток на пользовательском уровне может выйти из активного состояния по нескольким причинам. Рассмотрим активный поток Т1 на пользовательском уровне. Возможны такие события.

• Синхронизация. Чтобы скоординировать свои действия с другими потока­ми, поток Т1 вызывает один из примитивов, которые обсуждаются в гла­ве 5, "Параллельные вычисления: взаимоисключения и многозадачность", а сам переходит в состояние ожидания. После выполнения условия синхронизации поток Т1 переходит в работоспособное состояние.

• Приостановка. Любой из потоков (включая поток Т1) может стать причи­ной приостановки потока Т1 и его перехода в состояние остановки. ПотокТ1 остается в этом состоянии, пока другой поток не сгенерирует запрос на продолжение его выполнения, который и переводит остановленный поток в работоспособное состояние.

• Вытеснение. Активный поток (Т1 или какой-то другой) выполняет некоторое действие, благодаря которому становится работоспособным другой поток (Т2) с более высоким приоритетом. Если Т1 является активным потоком с наиболее низким приоритетом, он вытесняется и переходит в состояние готовности, а поток Т2 закрепляется за освободившимся облегченным процессом.

• Уступка. Если поток Т1 выполняет библиотечную команду thr_yield(), планировщик потоков этой библиотеки проверяет, есть ли другой работе способный поток (Т2) с тем же приоритетом. Если такой поток есть, Т1 пе­реходит в работоспособное состояние, а поток Т2 закрепляется за освобо­дившимся облегченным процессом. В противном случае продолжает выпол­няться поток Т1.

Во всех перечисленных выше случаях при выходе потока Т1 из активного состояния библиотека потоков выбирает другой несвязанный поток в работоспо­собном состоянии и запускает его на освободившемся облегченном процессе.

На рис. 4.17 показана также диаграмма состояний облегченных процессов. Эту диаграмму можно рассматривать как детализацию активного состояния потока на пользовательском уровне, так как несвязанному потоку облегченный процесс назначается только тогда, когда он находится в активном состоянии. Диаграмма состояний облегченного процесса почти не требует пояснений. Активный поток выполняет­ся лишь тогда, когда его облегченный процесс находится в состоянии выполнения. Если активный поток делает блокирующий системный вызов, его облегченный про­цесс переходит в состояние блокировки. Однако на пользовательском уровне этот по­ток остается связанным с данным облегченным процессом до тех пор, пока библио­тека потоков оставляет его в активном состоянии.

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



Дата добавления: 2016-06-05; просмотров: 2027;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.01 сек.