Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

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



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

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

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

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

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

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

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

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





Дата публикования: 2014-11-04; Прочитано: 250 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...