Бригадное планирование.
Множество потоков процесса распределяются для одновременного выполнения на множестве процессоров, по одному потоку на процессор.
Очевидное преимущество разделения пространства заключается в устранении многозадачности, что снижает накладные расходы по переключению контекста. Однако ее недостаток состоит в потерях времени при блокировке центрального процессора.
Поэтому проводились активные поиски алгоритма, пытающегося планировать одновременно в пространстве и времени, особенно для процессов, создающих большое количество потоков, которым, как правило, требуется возможность общения друг с другом.
Чтобы понять, какие возможны проблемы при независимом планировании потоков процесса (или процессов задания), рассмотрим систему с потоками Ао и А1,, принадлежащими процессу А, и потоками Во и В1, принадлежащими процессу В. Потоки Ао и Во работают в режиме разделения времени на центральном процессоре 0, а потоки А1, и В1 - на процессоре 1. Потокам Ао и А1 нужно часто обмениваться информацией. Общение потоков выглядит следующим образом. Поток Ао посылает потоку А1 сообщение, после чего поток А1, отправляет потоку Ао ответ и т. д. Предположим, что потоки Ао и Во, начали выполняться первыми. В интервале времени 0 поток Ао посылает потоку А1 запрос, но поток А1 не получает его до тех пор, пока не будет запущен в интервале времени 1. начинающемся через 100 мс. Он немедленно отправляет ответ, но поток Ао не получает ответа, пока его снова не запустят в момент времени 200 мс. В результате за 200 мс мы получаем всего одну пару запрос-ответ, что не слишком хорошо. Решением данной проблемы является так называемое бригадное планирование, представляющее собой развитие идеи совместного планирования .
Бригадное планирование состоит из трех частей:
Группы связанных потоков планируются как одно целое, бригада.
Все члены бригады запускаются одновременно, на разных центральных процессорах с разделением времени.
Все члены бригады начинают и завершают свои временные интервалы (кванты времени) одновременно.
Бригадное планирование работает благодаря синхронности работы всех центральных процессоров.
Это значит, что время разделяется на дискретные кванты. В начале каждого нового кванта все центральные процессоры перепланируются заново, и на каждом процессоре запускается новый поток. В начале следующего кванта опять принимается решение о планировании. В середине кванта планирование не выполняется. Если какой-либо поток блокируется, его центральный процессор простаивает до конца кванта времени.
Программные модули.
Являются очень важным видом ресурсов.
Однократно-используемые.
Выполняются один раз (портят либо код, либо данные). Являются неделимыми ресурсами.
Системные однократно-используемые модули, как правило, используются только на этапе загрузки ОС.
Многократно (повторно)-используемые
а) Непривилегированные программные модули – обычные программные модули, которые могут быть прерваны во время своей работы.
В общем случае не являются разделяемыми, т.к. если после прерывания процесса запустить его по требованию другого процесса, промежуточные результаты первого процесса м.б. потеряны.
б) Привилегированные программные модули – работают в привилегированном режиме (при отключенной системе прерываний). Являются последовательно используемыми (повторно используемыми) ресурсами. Допускается многократное выполнение действий типа запрос-использование-освобождение.
Структура модуля (рис. 8.1а).
в) Реентерабельные программные модули (reenterable-допускающий повторные обращения) - допускают повторное многократное прерывание своего исполнения и повторный запуск из других вычислительных процессов. Д.б. обеспечено сохранение промежуточных вычислений и возврат к ним, когда процесс возобновляется с прерванной ранее точки.
Рис 8.1а. Привилегированный программный модуль
Это обеспечивается с помощью статических и динамических методов выделения памяти под сохраняемые значения.
статический: резервируется область памяти для фиксированного числа вычислительных процессов( пример: процессы в/в и реентерабельные драйверы для управления параллельно несколькими однотипными устройствами.
динамический: область памяти выделяется динамически для каждого процесса (наиболее часто используемый) (рис. 8.1б).
Рис 8.1б. Динамический реентерабельный программный модуль
г) Повторно входимые программные модули (re-entrance) –допускают многократное параллельное использование, но в отличие от реентерабельных их нельзя прерывать в любой точке.
Структура модуля (рис. 8.1в):
модуль состоит из привилегированных секций и повторное обращение к модулю возможно только после завершения какой-нибудь из этих секций
после завершения секции управление м.б. передано диспетчеру, и он может предоставить возможность выполняться другому процессу,
В повторно входимых программных модулях четко предопределены все допустимые (возможные) точки входа.
Повторно входимые программные модули встречаются гораздо чаще реентерабельных (повторно прерываемых).
Рис. 8.1в. Повторно входимый программный модуль