Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по ОС рулез.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
630.27 Кб
Скачать

Планирование потоков в системах с симметричной мультипроцессорной системой (smp).

Симметричная – код ОС находится на разных процессорах.

Асимметричная – код ОС находится на одном процессоре.

Чтобы рассмотреть планирование потоков рассмотрим 2 основных термина.

  1. Привязка к процессору. По умолчанию выполняется на любом процессоре. Маска привязки устанавливается с помощью функций

SetProcessAffinityMask(…)

SetThreadAffinityMask(…)

а также при наличии образа маски в заголовке файла.

  1. Идеальный процессор. Это процессор предпочтительный для выполнения данного потока. Идеальный процессор выбирается случайным образом при создании потока на основе значения, записанного в базе данных процесса. Значение из базы данных процесса увеличивается на единицу каждый раз, когда создаётся новый поток. Поэтому создаваемые потоки равномерно распреде-ляются по набору доступных процессоров. Windows не меняет идеальный процессор после создания потока, но изменить идеальный процессор может изменить приложение, вызвав функцию SetThreadIdealProcessor(…). Последний процессор – это процессор, на котором поток работал в прошлый раз.

Выбор процессора для потока, готового к выполнению.

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

Если эти процессоры заняты, то Windows NT, 2000 выбирает первый из простаивающих, используя для этого маску свободных процессоров в порядке их возрастания. Все эти действия Windows выполняет в соответствии с маской привязки к процессорам.

Все процессоры заняты.

Windows просматривает, нельзя ли вытеснить какой-либо поток на одном из процессоров. Сначала рассматривается идеальный процессор, затем последний.

Windows сравнивает приоритеты выполняемого потока и выполняющегося потока, и если приоритет выше, то происходит вытеснение.

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

Рассмотрим ситуацию, в каком случае готовые потоки с наивысшим приоритетом выполняются. Пусть к процессору 0 подключен поток с приоритетом 8, который может работать на любом процессоре. К процессору 1 поток с приоритетом 4. Готов поток с приоритетом 6, который может выполняться только на процессоре 0. В этом случае поток с приоритетом 6 будет поставлен в очередь к процессору 0.

Синхронизация.

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

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

В Windows 2000 появился новый объект – ожидающий таймер.

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

Пример, для оповещения событий. Процесс состоит из двух потоков.

Поток 1 считывает данные с файда, поток 2 выводит на экран. Естественно поток 2 ожидает выполнение потока 1.