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

30 Алгоритмы планирования, основанные на квантовании.

В основе многих вытесняющих алгоритмов планирования лежит концепция квантования. В соответствии с этой концепцией каждому потоку поочередно для выполнения предоставляется ограниченный непрерывный период процессорного времени —квант. Смена активного потока происходит, если:

  • поток завершился и покинул систему;

  • произошла ошибка;

  • поток перешел в состояние ожидания;

  • исчерпан квант процессорного времени, отведенный данному потоку.

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

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

Если квант короткий, то суммарное время, которое проводит поток в ожидании процессора, прямо пропорционально времени, требуемому для его выполнения (то есть времени, которое потребовалось бы для выполнения этого потока при монопольном использовании вычислительной системы).

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

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

В алгоритмах, основанных на квантовании, какую бы цель они не преследовали (предпочтение коротких или длинных задач, компенсация недоиспользованного кванта или минимизация накладных расходов, связанных с переключениями), не используется никакой предварительной информации о задачах. При поступлении задачи на обработку ОС не имеет никаких сведении о том, является ли она короткой или длинной, насколько интенсивными будут ее запросы к устройствам ввода-вывода, насколько важно ее быстрое выполнение и т. д. Дифференциация обслуживания при квантовании базируется на «истории существования» потока в системе.

31 Принципы работы с потоками вWindows. Распределение процессорного времени между потоками

Для Windowsмеханизм распределения процессорного времени между потоками примерно следующий. Поток выполняет код и манипулирует данными в адресном пространстве своего процесса примерно 20 мкс. Далее Windows сохраняет значения регистров процессора в контексте потока и приостанавливает его выполнение. Система просматривает остальные объекты ядра «поток», подлежащие выполнению и выбирает один из них, загружает его контекст в регистры процессора, и все повторяется. Этот цикл операций – выбор потока, загрузка его контекста, выполнение и сохранение контекста – начинается с момента запуска системы и продолжается до её выключения. Windows потому и называется системой с вытесняющей многозадачностью, что в любой момент может приостановить любой поток и вместо него запустить другой. Однако этим механизмом можно управлять, хотя и очень ограниченно.

Функция потока.В первичном потоке функцией потока являетсяmain, wmain, WinMain илиwWinMain. Если создать вторичный поток, в нем тоже будет входная функция примерно следующего вида:

DWORD WINAPI ThreadFunc(PVOID pvParam)

{

DWORD rtwResult = 0;

….

return(dwResult);

}

Функция потока может выполнять любые задачи. Рано или поздно она закончит свою работу и вернет управление. В этот момент поток остановится и память, отведенная под его стек, будет освобождена, а счетчик пользователей его объекта ядра «поток» уменьшится на 1. Когда счетчик обнулится, этот объект ядра будет разрушен. Но, как и объект ядра «процесс», он может жить гораздо дольше, чем сопоставленный с ним поток.

Создание потока.При вызове функцииCreateProcess появляется на свет первичный поток процесса. Для создания дополнительных потоков, нужно вызывать из первичного потока функциюCreateThread:

HANDLE CreateThread(

PSECURITY_ATTRIBUTES psa,

DWORD cbStack,

PTHREAD_START_ROUTINE pfnStartAddr,

PVOID pvParam,

DWORD tdwCreate,

PDWORD pdwThreadID);

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

Система выделяет память под стек потока из адресного пространства процесса. Новый поток выполняется в контексте того же процесса, что и родительский поток. Поэтому он получает доступ ко всем описателям объектов ядра, всей памяти и стекам всех потоков в процессе. За счет этого потоки в рамках одного процесса могут легко взаимодействовать друг с другом.

Параметр psa. Параметрpsa является указателем на структуруSECURITY_ATTRIBUTES. Если необходимо, чтобы объекту ядра «поток» были присвоены атрибуты защиты по умолчанию, в этом параметре передаётсяNULL.Aчтобы дочерние процессы смогли наследовать описатель этого объекта, необходимо определить структуруSECURITY_ATTRIBUTESи инициализировать ее элементhInheritHandle значениемTRUE.

Параметр cbStack. Этот параметр определяет, какую часть адресного пространства поток сможет использовать под свой стек. Каждому потоку выделяется отдельный стек ФункцияCreateProcess, запуская приложение, вызываетCreateThread, и та инициализирует первичный поток процесса. При этомCreateProcess заносит в параметрcbStack значение, хранящееся в самом исполняемом файле.

Параметры pfnStartAddr и pvParam. ПараметрpfnStartAddr определяет адрес функции потока, с которой должен будет начять работу создаваемый поток, а параметрpvParam идентичен параметру рvРаrат функции потока.CreateTbread лишь передает этот параметр по эстафете той функ ции, с которой начинается выполнение создаваемого потока. Таким образом, данный параметр позволяет передавать функции потока какое-либо инициализирующее зна чение. Оно может быть или просто числовым значением, или указателем на39труктур у данных с дополнительной информацией.

Параметр fdwCreate. Этот параметр определяет дополнительные флаги, управляющие созданием потока. Он принимает одно из двух значений. 0 (исполнение потока начинается немедленно) илиCREATE_SUSPENDED. В последнем случае система создает поток, инициализирует его и приостанавливает до последующих указаний. ФлагCREATE_SUSPENDEDпозволяет программе изменить какие-либо свойства потока перед тем, как он начнет выполнять код.

Параметр pdwThreadID. Последний параметр функцииэто адрес переменной типаDWORD, в которой функция возвращает идентификатор, приписанный системой новому потоку.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]