<<
>>

Ожидание на объектах диспетчера ядра

Поток синхронизируется с объектом диспетчера ядра, ожидая освобождения его описателя. При этом ядро приостанавливает поток и соответственно меняет состояние диспетчера, как показано на рис.

3-25. Ядро удаляет поток из очереди готовых к выполнению потоков и перестает учитывать его в планировании.

ПРИМЕЧАНИЕ Ha рис. 3-25 показана схема перехода состояний с выделением состояний «готов» (ready), «ожидает» (waiting) и «выполняется» (running) — они относятся к ожиданию на объектах. Прочие состояния описываются в главе 6.

B любой момент синхронизирующий объект находится в одном из двух состояний: свободном (signaled) или занятом (nonsignaled). Для синхронизации с объектом поток вызывает один из системных сервисов ожидания, предоставляемых диспетчером объектов, и передает описатель этого объекта. Поток может ожидать на одном или нескольких объектах, а также указать, что ожидание следует прекратить, если объект (или объекты) не освободился в течение определенного времени. Всякий раз, когда ядро переводит объект в свободное состояние, функция KiWaitTest ядра проверяет, ждут ли этот объект какие-нибудь потоки и не ждут ли они каких-либо других объектов.

Если да, ядро выводит один или более потоков из состояния ожидания, после чего их выполнение может быть продолжено.

Взаимосвязь синхронизации с диспетчеризацией потоков иллюстрирует следующий пример с использованием объекта «событие».

• Поток пользовательского режима ждет на описателе объекта «событие» (т. е. ждет перехода этого объекта в свободное состояние).

• Ядро изменяет состояние потока с «готов» на «ожидает» и добавляет его в список потоков, ждущих объект «событие».

• Другой поток устанавливает объект «событие».

• Ядро просматривает список потоков, ожидающих этот объект. Если условия ожидания какого-либо потока выполнены (см. примечание ниже), ядро переводит его из состояния «ожидает» в состояние «готов». Если это поток с динамическим приоритетом, ядро может повысить его приоритет для выполнения.

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

• Если в данный момент вытеснение невозможно ни на одном из процессоров, диспетчер включает поток в свою очередь потоков, готовых к выполнению.

<< | >>
Источник: М.Руссинович, Д.Соломон. Внутреннее устройство Microsoft Windows (главы 1–4). 2005

Еще по теме Ожидание на объектах диспетчера ядра:

  1. 1. Определение ключевых понятий, основные проявления и анализ ядра характера
  2. ТРЕВОГА ОЖИДАНИЯ
  3. ПОЧЕМУ ДЕЙСТВУЮТ ПОЗИТИВНЫЕ ОЖИДАНИЯ
  4. ЗАКОН ОЖИДАНИЯ
  5. НЕЧУВСТВИТЕЛЬНОСТЬ К ОЖИДАНИЯМ
  6. Статья 298. Незаконное проведение поисковых работ на объекте археологического наследия, уничтожение, разрушение или повреждение объектов культурного наследия
  7. ОЖИДАНИЕ - ЭТО ЛОВУШКА
  8. Ожидание радости
  9. 3. Скрытые, внутренние ожидания
  10. Теория ожидания (В. Врум).
  11. ОЖИДАНИЕ
  12. Ожидания
  13. 2. Сила позитивных ожиданий
  14. БОРЬБА С НЕГАТИВНЫМИ ОЖИДАНИЯМИ
  15. Глава 38 Занижение ожиданий