Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
На рис. 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!