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


Третий подход к решению проблемы взаимных исключений показан на рис. 2.17. Этот программный фрагмент, как почти все фрагменты, приводимые в этой книге, написан на языке C.
Выбор пал именно на этот язык, поскольку настоящие операционные системы почти всегда пишутся на C (изредка на C++) и практически никогда не пишутся на Java, Pyton или Haskell. Мощность, эффективность и предсказуемость языка С — именно те характеристики, которые крайне необходимы для написания операционных систем. Java, к примеру, не является предсказуемым языком, поскольку в самый неподходящий момент у него может закончиться свободная память и возникнуть потребность в вызове сборщика мусора для очистки памяти. Для C это не свойственно, поскольку в этом языке нет сборщика мусора. Количественное сравнение C, C++, Java и четырех других языков приведено в работе Пречелда (Precheld, 2000).

Изначально целочисленная переменная turn, показанная на рис. 2.17, равна нулю и отслеживает, чья настала очередь входить в критическую область и проверять или обновлять общую память. Сначала процесс 0 проверяет значение turn, определяет, что оно равно нулю, и входит в критическую область. Процесс 1 также определяет, что значение этой переменной равно нулю, из-за чего находится в коротком цикле, постоянно проверяя, когда turn получит значение 1. Постоянная проверка значения переменной, пока она не приобретет какое-нибудь значение, называется активным ожиданием. Как правило, этого ожидания следует избегать, поскольку оно тратит впустую время центрального процессора. Активное ожидание используется только в том случае, если есть основание полагать, что оно будет недолгим. Блокировка, использующая активное ожидание, называется спин-блокировкой.

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

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

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

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

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

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

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

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