Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ZH ос 20 вопр 36 стр.doc
Скачиваний:
11
Добавлен:
20.09.2019
Размер:
435.71 Кб
Скачать

Сценарий планирования.

  1. Самостоятельное переключение потока

  2. Вытеснение потоков

  3. Завершение кванта времени

  4. Завершение потока

  1. Самостоятельное переключение потока. Поток может самостоятельно освободить процессор, перейдя в состояние ожидания.

WaitForSingleObject(…)

WaitForMultipleObject(…)

Подключается любой поток очереди. После завершения ожидания происходит следующее.

а) если этот поток находится в динамическом диапазоне (от 0 до 15), то квант потока уменьшается на одну квантовую единицу, что эквивалентно 1/3 таймера.

б) если это не Windows 2000 и если это поток из диапазона RealTime (16 – 31), то потоку передаётся полный квант времени.

  1. Вытеснение. Поток с более низким приоритетом вытесняется потоком с более высоким приоритетом. Такая ситуация возможна в двух случаях:

а) Завершилось ожидание потока с более высоким приоритетом, то есть произошло событие, которое он ждал.

б) Приоритет потока увеличился или уменьшился.

Потоки пользовательского режима могут вытеснять потоки ядра. Когда поток вытесняется, он помещается в начало очереди потока. Если это Windows 2000 и поток динамического диапазона, то ему будет представлен не полный квант, а остаток кванта.

  1. Завершение кванта времени. Когда поток израсходует свой квант Windows снижает его динамический приоритет. Windows ставит его в конец очереди с соответствующим уровнем приоритета.

  2. Завершение потока. При завершении потока ОС просматривает значение счётчика ссылок равеных 0. Регионы адресного пространства освобождаются.

Поток простоя.

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

9. Динамическое повышение приоритета потока.

Windows может динамически повышать значение текущего приоритета потока в следующих случаях.

  1. После завершения операций ввода/вывода.

  2. По окончанию ожидания какого-либо события.

  3. При пробуждении GUI потоков при выполнении операций с окнами.

  4. Если поток готов к выполнению, но не хватает времени процессора.

Динамическое повышение приоритета потока предназначено для оптимизации общей пропуск-ной способности и повышения производительности системы. ОС Windows никогда динамически не повышает приоритет потоков диапазона RealTime (то есть от 16 до 31).

  1. Динамическое изменение приоритета после завершения операций ввода/вывода. Величина динамического приращения определяется драйверами.

Устройство

Приращение приоритета

HDD, CD-ROM, принтер, видеокарта

1

Сеть, почтовый ящик, именованный канал, устройства на COM

2

Клавиатура, мышь

6

Звуковая плата

8

Приоритет потока всегда повышается относительно базового уровня.

приоритет

квант

Снижение приоритета по

истечению кванта

п овышение

приоритета

по окончании

ожидания

выполнение приоритет снижается

до базового

вытеснение

базовый

уровень выполнение ожидание

выполнение

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

  1. По окончанию ожидания какого-либо события. Действует аналогично пункту 1.

  2. Динамическое повышение приоритета GUI потоков. Приоритет потоков, владеющих окнами динамически повышается на 2 уровня после их пробуждения. Приоритет повышается для создания преимуществ интерактивным приложениям.

  3. Дин. Повыш. Приор. при нехватке процесс-го времени. Рассмотрим следующую ситуацию. Поток с приоритетом 7 постоянно вытесняет поток с приоритетом 4, не давая ему использовать процессор. Поток с приоритетом 11 ожидает какой-либо ресурс, заблок-ый потоком с приоритетом 4. Windows выполняет следующее.

Раз в секунду Windows сканирует очередь готовых потоков и ищет потоки, которые находятся в состоянии готовности более 300 тактов системного таймера, то есть 3-4 секунды. Обнаружив такой поток, Windows повышает его приоритет до 15, а Windows 2000 предоставляет ещё двойной квант времени. По истечению предоставленного кванта приоритет потока уменьшается до исходного уровня. Такая система имеет следующие ограничения.

  • Windows сканирует только 16 готовых потоков. Если потоков, готовых к выполнению больше 16, то Windows запоминает тот поток, перед которым остановилась и в следующий раз продолжает сканирование именно с него.

  • Windows повышает приоритет до 15 не более, чем у 10 потоков за один проход. Если обнаружится 10 таких потоков, то остальные 6 не сканируются.

10. Синхронизация процессов и потоков. Объекты синхронизации.

Впервые появилась в W32. Синхронизация – это средство, позволяющее реализовать вытесняющую многозадачность, то есть реализовать переключение программ в любой момент времени. Синхронизация может выполняться в пользовательском режиме: критические секции и функции Interlocked.

В режиме ядра для синхронизации используются следующие объекты: события, семафоры, мьютексы. В Windows 2000 появился новый объект – ожидающ. таймер.

Cинхронизация может выполняться с помощью таких объектов ядра, как процессы, потоки, задания, файлы. Оповещение об изменениях файловой системы, CON ввод/вывод. Синхронизация используется для единоличного доступа к ресурсам и для оповещения о каких-либо событиях, например, когда необходима синхронизация – это работа с базой данных. В тот момент, когда происходит запись, то другие операции должны быть заблокированы.

Проги Win32 должны быть готовы к тому, что процессор перекл. на другую прогу в самый неподходящий момент. Кроме того, прав-но созданная прога не должна тратить время проца, вращаясь в цикле опроса и ожидая некотор. Соб-е. Win32 им. 4 осн-ых объекта синхр-ии: событие, семафор, взаимоискл. (mutex), крит. секция.

Объект mutex. CreateMutex(…). Объект ядра мьютекс хранит идентификатор потока, занявшего этот объект, поэтому освободить объект мьютекс может только тот поток, который его занял. Объекты мьютекс допускают рекурсивный вход.

Объект семафор. CreateSemaphore(…). Имеют счётчик числа ресурсов – это максимально возможное число этого ресурса, и текущий счётчик. Доступ к ресурсам возможен до тех пор, пока текущий счётчик меньше максимального. Функции WaitForSingleObject(…), WaitForMultipleObject(…) увеличивают на 1 единицу текущий счётчик ресурса. Функция ReleaseSemaphore(…) уменьшает на 1 единицу счётчик.

Объект событие. Используется для оповещения об окончании какой-либо операции. Существуют два типа событий: события со сбросом вручную и с автоматическим сбросом. Сброс – это перевод события в занятое состояние, то есть в состояние non-signaled. CreateEvent(…). В качестве параметров указываются имя события, тип и начальное состояние.

Критические секции используются для синхронизации потоков одного процесса. Создаются критические секции обычно в области глобальных переменных, доступные всем потокам процесса. При создании, критическая секция представляет структуру данных: Critical_Section cs1; Обычно сост. из след-их полей: счётч. Блок-ок, счётч. рекурсий, идент-ра потока, кот. владеет критич. секцией в дан. мом-т t.

С этими полями обычно работает ОС, пользователю там нечего делать. Для работы критической секции необходимо выполнить инициализацию:

InitializeCriticalSection(&cs1);

Delete CriticalSection(&cs1) – удаление критической секции.

EnterCriticalSection(&cs1) – вход в критическую секцию.// обработка данных\\

LeaveCriticalSection(&cs1) – выход из критической секции.

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