<<
>>

Строгое чередование

Третий метод реализации взаимного исключения иллюстрирует листинг. 2.1. Этот фрагмент программного кода, как и многие другие в данной книге, написан на С. Язык С был выбран, поскольку практически все существующие операционные системы написаны на С (или C++), а не на языках, подобных Java.
Язык С обладает всеми необходимыми свойствами для написания операционных систем, это — мощный, эффективный и предсказуемый язык программирования. А язык Java, например, не является предсказуемым, поскольку у программы, написанной на нем, может в критический момент закончиться свободная память, и она вызовет «сборщик мусора» в исключительно неподходящее время. В случае С это невозможно, поскольку в С процедура сборки мусора в принципе отсутствует.

Сравнительный анализ С, C++, Java и четырех других языков программирования представлен в [97].

Листинг 2.1. Предлагаемое решение проблемы критической секции (для обоих процессов необходимо удостовериться в наличии точки с запятой после цикла while)

/* Процесс 1 */ while(TRUE) {

while(turn!=0) /* ожидание */;

critical_region();

turn=l;

noncritical_region();

}

/* Процесс 2 */ while(TRUE) {

while(turnI=1) /* ожидание */;

critical_region(); turn=0;

noncritical_region();

}

В листинге 2.1 целая переменная turn, изначально равная 0, фиксирует, чья очередь входить в критическую секцию.

Вначале процесс 0 проверяет значение turn, считывает 0 и входит в критическую секцию. Процесс 1 также проверяет значение turn, считывает 0 и после этого в цикле непрерывно проверяет, когда же значение turn будет равно 1. Постоянная проверка значения переменной в ожидании некоторого значения называется активным ожиданием. Однако подобного подхода следует избегать, поскольку он является причиной бесцельного расходования ресурсов процессора. Активное ожидание может быть приемлемым только в случае, когда есть уверенность в коротком времени ожидания.

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

Неожиданно процесс 0 завершает работу вне критической секции и возвращается к началу цикла. Но на большее он не способен, поскольку значение turn равно 1, и процесс 1 находится вне критической секции. Процесс 0 «зависает» в своем цикле while, ожидая, пока процесс 1 изменит значение turn на 0. Получается, что метод поочередного доступа к критической секции не слишком удачен, если один процесс существенно медленнее другого.

Эта ситуация нарушает третье из сформулированных нами условий: один процесс блокируется другим, не находящимся в критической секции. Возвратимся к примеру с каталогом спулера: если заменить критическую секцию процедурой считывания из каталога и записи в каталог, процесс 0 не сможет послать файл на печать, поскольку процесс 1 занят чем-то другим.

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

<< | >>
Источник: Э. ТАНЕНБАУМ, А. ВУДХАЛЛ. ОПЕРАЦИОННЫЕ СИСТЕМЫ Разработка и реализация 3-е издание. 2007

Еще по теме Строгое чередование:

  1. Влияние чередования аспектов
  2. ИЗОЛЯЦИЯ СТРОГАЯ
  3. Хаос вопросов со строгой логикой построения
  4. 3. Исправительная колония строгого режима
  5. Сатурн, Строгий Учитель
  6. 4. Не разграничивайте строго жизнь своей семьи и свои
  7. § 3 Сущность и идея брака. – Нравственное его значение. – Таин- ство в браке. – Историческое развитие идеи брака. – Много- женство, многомужие и одноженство. – Идея, семейное, обще- ственное и религиозное значение брака в Древнем мире. – Религиозный обряд брака у древних. – Строгая форма брака. – Освящение брака в христианстве. – Церковное понятие о браке на Западе и Востоке. – Секуляризация брака и подчинение его гражданскому закону и суду после реформации и революции. – Брачный закон и суд в Р
  8. АКЦЕНТУАЦИЯ ЦИКЛОИДНАЯ
  9. ХАРАКТЕР ЦИКЛОИДНЫЙ
  10. РИТМ
  11. Второй этап
  12. АКТИВНОСТЬ ПСИХИЧЕСКАЯ: БИОРИТМ
  13. САДОМАЗОХИЗМ
  14. ВКУС