Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы ОС.docx
Скачиваний:
44
Добавлен:
22.09.2019
Размер:
3.18 Mб
Скачать

11. Сценарии планирования потоков в Windows. (Лекция 3)

П оток (thread) – сущность внутри процесса, получающая процессорное время для выполнения. Поток: набор команд ЦПУ (центрального процессорного устройства), стек, состояние и уникальный идентификатор. Поток – исполняемые команды: счетчики команд; регистры ЦПУ; стек; состояние потока.

Основной принцип – планирование ведется исходя из приоритетов потоков, без учета принадлежности процессам и ядру. Алгоритм основан на многоуровневых очередях.

«Самостоятельное переключение» - поток ожидает на объекте синхронизации (выполнил блокирующий вызов). Приоритет: не меняется Учет квантов: приоритет 14 и более – квант сбрасывается, менее 14 – уменьшается на 1 (треть интервала).

«Вытеснение» - поток вытесняется потоком с более высоким приоритетом. Обычно это поток, завершившие ожидание. Приоритет: не меняется Учет квантов: значение сохраняется.

«Завершение кванта» - поток израсходовал свой квант. Выбор нового потока производится среди очередей «готов» с учетом приоритета. Приоритет: может быть понижен Учет квантов: в момент помещения в очередь «готов» квант устанавливается заново. Если система считает, что выбор надо делать в очереди с тем же приоритетом, но готовых потоков нет – продляется квант текущего потока

База данных диспетчера ядра

Для принятия решений при планировании потоков ядро поддерживает набор структур данных (БД диспетчера ядра (dispatcher database)). Эта БД позволяет отслеживать потоки, ждущие выполнения, и потоки, выполняемые на тех или иных процессорах. Очереди готовых потоков (ready queues) диспетчера ядра включают потоки в состоянии Ready, ожидающие выделения им процессорного времени. Для каждого из 32 уровней приоритета существует по одной очереди. Для ускорения выбора потока, подлежащего выполнению или вытеснению, Windows поддерживает 32-битную маску (сводка готовности (ready summary)). Каждый установленный в ней бит указывает на присутствие 1 или более потоков в очереди готовых потоков для данного уровня приоритета (бит 0 соответствует приоритету 0, бит 1 - приоритету 1).

12. Динамическое управление приоритетом потоков в Windows. (Лекция 3)

Поток (thread) – сущность внутри процесса, получающая процессорное время для выполнения. Поток: набор команд ЦПУ (центрального процессорного устройства), стек, состояние и уникальный идентификатор. Поток – исполняемые команды: счетчики команд; регистры ЦПУ; стек; состояние потока.

Повышение текущего приоритета потока происходит в одном из случаев:

- после завершения ввода-вывода (для разных классов устройств на разную величину); Windows временно повышает приоритет потоков по окончании определенных операций i/o, поэтому у потоков, ожидавших завершения таких операций, больше шансов немедленно возобновить выполнение и обработать полученные данные.

- по окончанию ожиданий семафоров (специальный объект, позволяющий блокировать или активировать процесс, обратившийся к нему) и событий ожидания для потока с динамически увеличенным квантом (интервал процессорного времени, отведенный потоку для исполнения) или имеющего графическое окно (интерактивные приложения); Когда ожидание потока на событии исполнительной системы или объекте «семафор» успешно завершается, его приоритет повышается на 1 уровень.

- поток постоянно не получает процессорное время. Раз в секунду диспетчер настройки баланса (balance set manager), системный поток, предназначенный главным образом для выполнения функций управления памятью, сканирует 16 записей в очереди готовых потоков и ищет потоки, которые находятся в состоянии Ready в течение примерно 4 секунд. Обнаружив такой поток, диспетчер настройки баланса повышает его приоритет до 15. Текущий приоритет не может превышать значения 15.

- По окончании операции ожидания потоками активного процесса. Всякий раз, когда поток в активном процессе завершает ожидание на объекте ядра, функция ядра KiUnwaitThread динамически повышает его текущий (не базовый) приоритет на величину текущего значения PsPrioritySeparation.

- При пробуждении GUI-потоков. Приоритет потоков, владеющих окнами, дополнительно повышается на 2 уровня после их пробуждения из-за активности подсистемы управления окнами, например, при получении оконных сообщений. Подсистема управления окнами (Win32k.sys) повышает приоритет, вызывая KeSetEvent для установки события, пробуждающего GUI-поток. Приоритет повышается для создания преимуществ интерактивным приложениям.