Активация планировщика

Хотя потоки на уровне ядра по ряду ключевых позиций превосходят потоки на уровне пользователя, они, несомненно, более медлительны. Поэтому исследователи искали способы улучшения ситуации без потери их положительных свойств.
Далее мы опишем один из таких способов, изобретенный Андерсоном (Anderson et al., 1992), который называется активацией планировщика. Родственная работа рассматривается Элдером и Скоттом (Edler et al.,1988; Scott et al., 1990).

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

Эффективность достигается путем уклонения от ненужных переходов между пространствами пользователя и ядра. Если, к примеру, поток блокируется в ожидании каких-либо действий другого потока, то обращаться к ядру не имеет смысла, благодаря чему снижаются издержки на переходах между пространствами ядра и пользователя. Имеющаяся в пространстве пользователя система поддержки исполнения программ может заблокировать синхронизирующийся поток и самостоятельно спланировать работу другого потока.

При использовании активации планировщика ядро назначает каждому процессу определенное количество виртуальных процессоров, а системе поддержки исполняемых программ (в пользовательском пространстве) разрешается распределять потоки по процессорам. Этот механизм также может быть использован на мультипроцессорной системе, где виртуальные процессоры могут быть представлены настоящими центральными процессорами. Изначально процессу назначается только один виртуальный процессор, но процесс может запросить дополнительное количество процессоров, а также вернуть уже не используемые процессоры. Ядро также может забрать назад уже распределенные виртуальные процессоры с целью переназначения их более нуждающимся процессам.

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

Уведомление осуществляется за счет того, что ядро активирует систему поддержки исполнения программ с заранее известного стартового адреса, — примерно так же, как действуют сигналы в UNIX. Этот механизм называется ирса11 (вызов наверх).

Активированная таким образом система поддержки исполнения программ может перепланировать работу своих потоков, как правило, переводя текущий поток в заблокированное состояние, выбирая другой поток из списка готовых к выполнению, устанавливая значения его регистров и возобновляя его выполнение. Чуть позже, когда ядро узнает, что исходный поток может возобновить свою работу (например, заполнился канал, из которого он пытался считать данные, или была извлечена из диска ранее не существовавшая страница), оно выполняет еще один вызов наверх (upcaП) в адрес системы поддержки исполнения программ, чтобы уведомить ее об этом событии. Система поддержки исполнения программ может либо немедленно возобновить выполнение заблокированного потока, либо поместить его в список ожидающих потоков для последующего выполнения.

При возникновении в период выполнения пользовательского потока аппаратного прерывания центральный процессор, в котором произошло прерывание, переключается в режим ядра. Если прерывание вызвано событием, не интересующим прерванный процесс, например завершением операции ввода-вывода, относящейся к другому процессу, то при завершении работы обработчика прерывания прерванный поток возвращается назад, в то состояние, в котором он был до возникновения прерывания.

Если же процесс заинтересован в этом прерывании — например, доставлена страница, необходимая одному из потоков, принадлежащих этому процессу, — выполнение прерванного потока не возобновляется. Вместо этого прерванный поток приостанавливается и на виртуальном процессоре запускается система поддержки исполнения программ, имеющая в стеке состояние прерванного потока. Затем на систему поддержки исполнения программ возлагается решение, выполнение какого именно потока спланировать на этом центральном процессоре: прерванного, последнего ставшего готовым к выполнению или какого-нибудь третьего.

Недостатком активаций планировщика является полная зависимость этой технологии от вызовов наверх (ирса11) — концепции, нарушающей структуру, свойственную любой многоуровневой системе. Как правило, уровень п предоставляет определенные услуги, которые могут быть запрошены уровнем п + 1, но уровень п не может вызывать процедуры, имеющиеся на уровне п + 1. Вызовы наверх (ирса11) этому фундаментальному принципу не следуют.

2.2.8.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Активация планировщика:

  1. АКТИВАЦИЯ
  2. АКТИВАЦИЯ ПСИХОЛОГИЧЕСКАЯ
  3. АКТИВАЦИЯ: УРОВЕНЬ ИНДИВИДУАЛЬНЫЙ
  4. АКТИВАЦИЯ ФИЗИОЛОГИЧЕСКАЯ
  5. 9.7.8. Шаг восьмой:активация
  6. Активация Тела Света
  7. АКТИВАЦИЯ: УРОВЕНЬ ОПТИМАЛЬНЫЙ
  8. СОЗНАНИЕ ЭКСТРАВЕРТИРОВАННОЕ
  9. ПСИХОФИЗИОЛОГИЯ РЕЧИ ВНУТРЕННЕЙ
  10. Э. ТАНЕНБАУМ, А. ВУДХАЛЛ. ОПЕРАЦИОННЫЕ СИСТЕМЫ Разработка и реализация 3-е издание, 2007
  11. АКТИВИРОВАННОСТЬ
  12. БОДРСТВОВАНИЕ