Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л5_6_7КУТО.doc
Скачиваний:
1
Добавлен:
17.11.2019
Размер:
71.17 Кб
Скачать

Стратегии борьбы за ресурсы в осрв Стратегии выбора процесса

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

Наиболее простой стратегией выбора является циклический (round-robin) ме­тод – процессы выбираются последовательно один за другим в фиксированном порядке и через равные интервалы времени. Основное достоинство метода – про­стота, однако, поскольку процессам с различными требованиями выделяются равные ресурсы процессора, некоторые из них обслуживаются неадекватно своим потребностям.

Более сложный принцип выбора основан на приоритетах (priorities). При каждом переключении планировщик передает управление готовому процессу с наивысшим приоритетом. Приоритет присваивается процессу в момент его создания и остается постоянным в течение всего времени – статический приоритет (static priority). Такой приоритет, как правило, определяется на основе информации, предоставленной пользователем.

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

Взаимные исключения и тупики Защита ресурсов

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

Часть программы, в которой осуществляется доступ к тем или иным образом защищенному ресурсу (protected resource), называется критической секцией (critical section).

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

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

Проблема защиты ресурсов (resource protection) является центральной во всей те­ории мультипрограммирования, В результате длительных исследований были предложены различные стратегии ее решения, которые отличаются механизмом и главным образом по скорости доступа к защищаемому ресурсу.

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

Медленные устройства, которые могут использоваться процессом в течение длительного времени (принтер, накопитель на магнитной ленте), обычно предоставляются запрашивающему процессу исключительно в порядке очереди – кто раньше запросил, тот раньше и получает. Для обслуживания медленных устройств с последовательным доступом иногда применяется механизм спулинга (spooling). Устройство закрепляется монопольно за одним процессом – спулером (spooler). Для остальных процессов операции с устройством имитируются с помощью временных файлов, из которых организуется очередь. Спулер последовательно выводит файлы из очереди на закрепленное за ним устройство.

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

Основное правило защиты ресурсов – процесс никогда не должен изменять со­стояния общего ресурса, пока другой процесс имеет к нему доступ. Или в об­щем виде – процесс не должен получать доступа к ресурсу, который в данное время используется другим процессом, независимо от того, собирается ли он изменить его состояние или нет. Второе ограничение является более сильным, но оно упрощает практическое управление, поскольку необязательно следить затем, какие операции собирается производить с ресурсом каждый процесс.

Первым элементарным методом гарантии защиты ресурсов является исключение прерываний процесса, пока он осуществляет доступ к ресурсу. Для этого ЦП запре­щается реагировать на сигналы прерывания с помощью операции маскирования пре­рываний (interrupt masking). Одновременно блокируется переключение процессов, поскольку оно происходит по прерыванию. Таким образом, гарантируется работа процесса без прерываний, пока он обращается к общему ресурсу. Такое решение, оче­видно, не является лучшим. Прерывания обычно должны быть разрешены постоян­но, чтобы обеспечить быструю реакцию па особые условия, которые требуют немед­ленного внимания. Поэтому запрет прерываний должен использоваться с большой осторожностью и только в случае, когда нет никакого другого решения. В любом случае запрещать прерывания можно только на время выполнения очень короткой последовательности команд процесса.

Корректная защита ресурсов предполагает следующее:

  1. В любой момент времени доступ к защищенному ресурсу имеет только один процесс.

  2. Процессы остаются взаимно независимыми. Остановка одного из процессов не должна препятствовать продолжению других.

Сформулированные требования соответствуют двум характеристикам – безопасности и живучести. Безопасность (safety) означает, что доступ к защищенному ресурсу в любой момент времени возможен только со стороны одного из процессов. Живучесть (liveness) означает, что программа когда-нибудь обязательно будет выполнена, иными словами, что она не остановится и не будет ждать бесконечно. Безопасность – это статическое свойство, а живучесть – динамическое.

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