Лекции по предмету Операционные системы
Категория реферата: Рефераты по информатике, программированию
Теги реферата: менеджмент, бесплатные доклады скачать
Добавил(а) на сайт: Собчак.
Предыдущая страница реферата | 1 2 3 4 5 6 7 | Следующая страница реферата
2. включить дескриптор нового процесса в очередь готовых процессов;
3. загрузить кодовый сегмент процесса в оперативную память или в область свопинга.
Алгоритмы планирования процессов
Планирование процессов включает в себя решение следующих задач:
1. определение момента времени для смены выполняемого процесса;
2. выбор процесса на выполнение из очереди готовых процессов;
3. переключение контекстов "старого" и "нового" процессов.
Первые две задачи решаются программными средствами, а последняя в
значительной степени аппаратно (см. раздел 2.3. "Средства аппаратной
поддержки управления памятью и многозадачной среды в микропроцессорах Intel
80386, 80486 и Pentium").
Существует множество различных алгоритмов планирования процессов, по
разному решающих вышеперечисленные задачи, преследующих различные цели и
обеспечивающих различное качество мультипрограммирования. Среди этого
множества алгоритмов рассмотрим подробнее две группы наиболее часто
встречающихся алгоритмов: алгоритмы, основанные на квантовании, и
алгоритмы, основанные на приоритетах.
В соответствии с алгоритмами, основанными на квантовании, смена активного
процесса происходит, если:
. процесс завершился и покинул систему,
. произошла ошибка,
. процесс перешел в состояние ОЖИДАНИЕ,
. исчерпан квант процессорного времени, отведенный данному процессу.
Процесс, который исчерпал свой квант, переводится в состояние ГОТОВНОСТЬ и
ожидает, когда ему будет предоставлен новый квант процессорного времени, а
на выполнение в соответствии с определенным правилом выбирается новый
процесс из очереди готовых. Таким образом, ни один процесс не занимает
процессор надолго, поэтому квантование широко используется в системах
разделения времени. Граф состояний процесса, изображенный на рисунке 2.1, соответствует алгоритму планирования, основанному на квантовании.
Кванты, выделяемые процессам, могут быть одинаковыми для всех процессов или
различными. Кванты, выделяемые одному процессу, могут быть фиксированной
величины или изменяться в разные периоды жизни процесса. Процессы, которые
не полностью использовали выделенный им квант (например, из-за ухода на
выполнение операций ввода-вывода), могут получить или не получить
компенсацию в виде привилегий при последующем обслуживании. По разному
может быть организована очередь готовых процессов: циклически, по правилу
"первый пришел - первый обслужился" (FIFO) или по правилу "последний пришел
- первый обслужился" (LIFO).
Другая группа алгоритмов использует понятие "приоритет" процесса. Приоритет
- это число, характеризующее степень привилегированности процесса при
использовании ресурсов вычислительной машины, в частности, процессорного
времени: чем выше приоритет, тем выше привилегии.
Приоритет может выражаться целыми или дробными, положительным или
отрицательным значением.Чем выше привилегии процесса, тем меньше времени он
будет проводить в очередях. Приоритет может назначаться директивно
администратором системы в зависимости от важности работы или внесенной
платы, либо вычисляться самой ОС по определенным правилам, он может
оставаться фиксированным на протяжении всей жизни процесса либо изменяться
во времени в соответствии с некоторым законом. В последнем случае
приоритеты называются динамическими.
Существует две разновидности приоритетных алгоритмов: алгоритмы, использующие относительные приоритеты, и алгоритмы, использующие абсолютные
приоритеты.
В обоих случаях выбор процесса на выполнение из очереди готовых
осуществляется одинаково: выбирается процесс, имеющий наивысший приоритет.
По разному решается проблема определения момента смены активного процесса.
В системах с относительными приоритетами активный процесс выполняется до
тех пор, пока он сам не покинет процессор, перейдя в состояние ОЖИДАНИЕ
(или же произойдет ошибка, или процесс завершится). В системах с
абсолютными приоритетами выполнение активного процесса прерывается еще при
одном условии: если в очереди готовых процессов появился процесс, приоритет
которого выше приоритета активного процесса. В этом случае прерванный
процесс переходит в состояние готовности. На рисунке 2.2 показаны графы
состояний процесса для алгоритмов с относительными (а) и абсолютными (б)
приоритетами.
Во многих операционных системах алгоритмы планирования построены с
использованием как квантования, так и приоритетов. Например, в основе
планирования лежит квантование, но величина кванта и/или порядок выбора
процесса из очереди готовых определяется приоритетами процессов.
[pic]
Рис. 2.2. Графы состояний процессов в системах
(а) с относительными приоритетами; (б)с абсолютными приоритетами
Вытесняющие и невытесняющие алгоритмы планирования
Существует два основных типа процедур планирования процессов - вытесняющие
(preemptive) и невытесняющие (non-preemptive).
Non-preemptive multitasking - невытесняющая многозадачность - это способ
планирования процессов, при котором активный процесс выполняется до тех
пор, пока он сам, по собственной инициативе, не отдаст управление
планировщику операционной системы для того, чтобы тот выбрал из очереди
другой, готовый к выполнению процесс.
Preemptive multitasking - вытесняющая многозадачность - это такой способ, при котором решение о переключении процессора с выполнения одного процесса
на выполнение другого процесса принимается планировщиком операционной
системы, а не самой активной задачей.
Понятия preemptive и non-preemptive иногда отождествляются с понятиями
приоритетных и бесприоритетных дисциплин, что совершенно неверно, а также с
понятиями абсолютных и относительных приоритетов, что неверно отчасти.
Вытесняющая и невытесняющая многозадачность - это более широкие понятия, чем типы приоритетности. Приоритеты задач могут как использоваться, так и
не использоваться и при вытесняющих, и при невытесняющих способах
планирования. Так в случае использования приоритетов дисциплина
относительных приоритетов может быть отнесена к классу систем с
невытесняющей многозадачностью, а дисциплина абсолютных приоритетов - к
классу систем с вытесняющей многозадачностью. А бесприоритетная дисциплина
планирования, основанная на выделении равных квантов времени для всех
задач, относится к вытесняющим алгоритмам.
Основным различием между preemptive и non-preemptive вариантами
многозадачности является степень централизации механизма планирования
задач. При вытесняющей многозадачности механизм планирования задач целиком
сосредоточен в операционной системе, и программист пишет свое приложение, не заботясь о том, что оно будет выполняться параллельно с другими
задачами. При этом операционная система выполняет следующие функции:
определяет момент снятия с выполнения активной задачи, запоминает ее
контекст, выбирает из очереди готовых задач следующую и запускает ее на
выполнение, загружая ее контекст.
При невытесняющей многозадачности механизм планирования распределен между
системой и прикладными программами. Прикладная программа, получив
управление от операционной системы, сама определяет момент завершения своей
очередной итерации и передает управление ОС с помощью какого-либо
системного вызова, а ОС формирует очереди задач и выбирает в соответствии с
некоторым алгоритмом (например, с учетом приоритетов) следующую задачу на
выполнение. Такой механизм создает проблемы как для пользователей, так и
для разработчиков.
Для пользователей это означает, что управление системой теряется на
произвольный период времени, который определяется приложением (а не
пользователем). Если приложение тратит слишком много времени на выполнение
какой-либо работы, например, на форматирование диска, пользователь не может
переключиться с этой задачи на другую задачу, например, на текстовый
редактор, в то время как форматирование продолжалось бы в фоновом режиме.
Эта ситуация нежелательна, так как пользователи обычно не хотят долго
ждать, когда машина завершит свою задачу.
Поэтому разработчики приложений для non-preemptive операционной среды, возлагая на себя функции планировщика, должны создавать приложения так, чтобы они выполняли свои задачи небольшими частями. Например, программа
форматирования может отформатировать одну дорожку дискеты и вернуть
управление системе. После выполнения других задач система возвратит
управление программе форматирования, чтобы та отформатировала следующую
дорожку. Подобный метод разделения времени между задачами работает, но он
существенно затрудняет разработку программ и предъявляет повышенные
требования к квалификации программиста. Программист должен обеспечить
"дружественное" отношение своей программы к другим выполняемым одновременно
с ней программам, достаточно часто отдавая им управление. Крайним
проявлением "недружественности" приложения является его зависание, которое
приводит к общему краху системы. В системах с вытесняющей многозадачностью
такие ситуации, как правило, исключены, так как центральный планирующий
механизм снимет зависшую задачу с выполнения.
Однако распределение функций планировщика между системой и приложениями не
всегда является недостатком, а при определенных условиях может быть и
преимуществом, потому что дает возможность разработчику приложений самому
проектировать алгоритм планирования, наиболее подходящий для данного
фиксированного набора задач. Так как разработчик сам определяет в программе
момент времени отдачи управления, то при этом исключаются нерациональные
прерывания программ в "неудобные" для них моменты времени. Кроме того, легко разрешаются проблемы совместного использования данных: задача во
время каждой итерации использует их монопольно и уверена, что на протяжении
этого периода никто другой не изменит эти данные. Существенным
преимуществом non-preemptive систем является более высокая скорость
переключения с задачи на задачу.
Примером эффективного использования невытесняющей многозадачности является
файл-сервер NetWare, в котором, в значительной степени благодаря этому, достигнута высокая скорость выполнения файловых операций. Менее удачным
оказалось использование невытесняющей многозадачности в операционной среде
Windows 3.х.
Однако почти во всех современных операционных системах, ориентированных на
высокопроизводительное выполнение приложений (UNIX, Windows NT, OS/2,
VAX/VMS), реализована вытесняющая многозадачность. В последнее время дошла
очередь и до ОС класса настольных систем, например, OS/2 Warp и Windows 95.
Возможно в связи с этим вытесняющую многозадачность часто называют истинной
многозадачностью.
Средства синхронизации и взаимодействия процессов
Проблема синхронизации
Процессам часто нужно взаимодействовать друг с другом, например, один
процесс может передавать данные другому процессу, или несколько процессов
могут обрабатывать данные из общего файла. Во всех этих случаях возникает
проблема синхронизации процессов, которая может решаться приостановкой и
активизацией процессов, организацией очередей, блокированием и
освобождением ресурсов.
[pic]
Рис. 2.3. Пример необходимости синхронизации
Пренебрежение вопросами синхронизации процессов, выполняющихся в режиме
мультипрограммирования, может привести к их неправильной работе или даже к
краху системы. Рассмотрим, например (рисунок 2.3), программу печати файлов
(принт-сервер). Эта программа печатает по очереди все файлы, имена которых
последовательно в порядке поступления записывают в специальный
общедоступный файл "заказов" другие программы. Особая переменная NEXT, также доступная всем процессам-клиентам, содержит номер первой свободной
для записи имени файла позиции файла "заказов". Процессы-клиенты читают эту
переменную, записывают в соответствующую позицию файла "заказов" имя своего
файла и наращивают значение NEXT на единицу. Предположим, что в некоторый
момент процесс R решил распечатать свой файл, для этого он прочитал
значение переменной NEXT, значение которой для определенности предположим
равным 4. Процесс запомнил это значение, но поместить имя файла не успел, так как его выполнение было прервано (например, в следствие исчерпания
кванта). Очередной процесс S, желающий распечатать файл, прочитал то же
самое значение переменной NEXT, поместил в четвертую позицию имя своего
файла и нарастил значение переменной на единицу. Когда в очередной раз
управление будет передано процессу R, то он, продолжая свое выполнение, в
полном соответствии со значением текущей свободной позиции, полученным во
время предыдущей итерации, запишет имя файла также в позицию 4, поверх
имени файла процесса S.
Таким образом, процесс S никогда не увидит свой файл распечатанным.
Сложность проблемы синхронизации состоит в нерегулярности возникающих
ситуаций: в предыдущем примере можно представить и другое развитие событий:
были потеряны файлы нескольких процессов или, напротив, не был потерян ни
один файл. В данном случае все определяется взаимными скоростями процессов
и моментами их прерывания. Поэтому отладка взаимодействующих процессов
является сложной задачей. Ситуации подобные той, когда два или более
процессов обрабатывают разделяемые данные, и конечный результат зависит от
соотношения скоростей процессов, называются гонками.
Критическая секция
Важным понятием синхронизации процессов является понятие "критическая
секция" программы. Критическая секция - это часть программы, в которой
осуществляется доступ к разделяемым данным. Чтобы исключить эффект гонок по
отношению к некоторому ресурсу, необходимо обеспечить, чтобы в каждый
момент в критической секции, связанной с этим ресурсом, находился максимум
один процесс. Этот прием называют взаимным исключением.
Простейший способ обеспечить взаимное исключение - позволить процессу, находящемуся в критической секции, запрещать все прерывания. Однако этот
способ непригоден, так как опасно доверять управление системой
пользовательскому процессу; он может надолго занять процессор, а при крахе
процесса в критической области крах потерпит вся система, потому что
прерывания никогда не будут разрешены.
Другим способом является использование блокирующих переменных. С каждым
разделяемым ресурсом связывается двоичная переменная, которая принимает
значение 1, если ресурс свободен (то есть ни один процесс не находится в
данный момент в критической секции, связанной с данным процессом), и
значение 0, если ресурс занят. На рисунке 2.4 показан фрагмент алгоритма
процесса, использующего для реализации взаимного исключения доступа к
разделяемому ресурсу D блокирующую переменную F(D). Перед входом в
критическую секцию процесс проверяет, свободен ли ресурс D. Если он занят, то проверка циклически повторяется, если свободен, то значение переменной
F(D) устанавливается в 0, и процесс входит в критическую секцию. После
того, как процесс выполнит все действия с разделяемым ресурсом D, значение
переменной F(D) снова устанавливается равным 1.
[pic]
Рис. 2.4. Реализация критических секций с использованием блокирующих переменных
Если все процессы написаны с использованием вышеописанных соглашений, то
взаимное исключение гарантируется. Следует заметить, что операция проверки
и установки блокирующей переменной должна быть неделимой. Поясним это.
Пусть в результате проверки переменной процесс определил, что ресурс
свободен, но сразу после этого, не успев установить переменную в 0, был
прерван. За время его приостановки другой процесс занял ресурс, вошел в
свою критическую секцию, но также был прерван, не завершив работы с
разделяемым ресурсом. Когда управление было возвращено первому процессу, он, считая ресурс свободным, установил признак занятости и начал выполнять
свою критическую секцию. Таким образом был нарушен принцип взаимного
исключения, что потенциально может привести к нежелаемым последствиям. Во
избежание таких ситуаций в системе команд машины желательно иметь единую
команду "проверка-установка", или же реализовывать системными средствами
соответствующие программные примитивы, которые бы запрещали прерывания на
протяжении всей операции проверки и установки.
Реализация критических секций с использованием блокирующих переменных имеет
существенный недостаток: в течение времени, когда один процесс находится в
критической секции, другой процесс, которому требуется тот же ресурс, будет
выполнять рутинные действия по опросу блокирующей переменной, бесполезно
тратя процессорное время. Для устранения таких ситуаций может быть
использован так называемый аппарат событий. С помощью этого средства могут
решаться не только проблемы взаимного исключения, но и более общие задачи
синхронизации процессов. В разных операционных системах аппарат событий
реализуется по своему, но в любом случае используются системные функции
аналогичного назначения, которые условно назовем WAIT(x) и POST(x), где x -
идентификатор некоторого события. На рисунке 2.5 показан фрагмент алгоритма
процесса, использующего эти функции. Если ресурс занят, то процесс не
выполняет циклический опрос, а вызывает системную функцию WAIT(D), здесь D
обозначает событие, заключающееся в освобождении ресурса D. Функция WAIT(D)
переводит активный процесс в состояние ОЖИДАНИЕ и делает отметку в его
дескрипторе о том, что процесс ожидает события D. Процесс, который в это
время использует ресурс D, после выхода из критической секции выполняет
системную функцию POST(D), в результате чего операционная система
просматривает очередь ожидающих процессов и переводит процесс, ожидающий
события D, в состояние ГОТОВНОСТЬ.
Обобщающее средство синхронизации процессов предложил Дейкстра, который
ввел два новых примитива. В абстрактной форме эти примитивы, обозначаемые P
и V, оперируют над целыми неотрицательными переменными, называемыми
семафорами. Пусть S такой семафор. Операции определяются следующим образом:
V(S) : переменная S увеличивается на 1 одним неделимым действием; выборка, инкремент и запоминание не могут быть прерваны, и к S нет доступа другим
процессам во время выполнения этой операции.
P(S) : уменьшение S на 1, если это возможно. Если S=0, то невозможно
уменьшить S и остаться в области целых неотрицательных значений, в этом
случае процесс, вызывающий P-операцию, ждет, пока это уменьшение станет
возможным. Успешная проверка и уменьшение также является неделимой
операцией.
[pic]
Рис. 2.5. Реализация критической секции с использованием системных
Рекомендуем скачать другие рефераты по теме: новейшие рефераты, изложение по русскому 9 класс.
Предыдущая страница реферата | 1 2 3 4 5 6 7 | Следующая страница реферата