Строгое чередование
Третий подход к решению проблемы взаимных исключений показан на рис. 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 будет занят чем-нибудь другим.
Фактически это решение требует, чтобы, к примеру, при помещении файлов в каталог спулера два процесса входили в свои критические области, строго чередуясь друг с другом. Ни одному из них не разрешено поместить файл в спулер два раза подряд. Хотя этот алгоритм позволяет предотвращать любые состязательные ситуации, его нельзя рассматривать в качестве серьезного кандидата на решение проблемы, поскольку он нарушает третье условие.
Еще по теме Строгое чередование:
- Влияние чередования аспектов
- ИЗОЛЯЦИЯ СТРОГАЯ
- Хаос вопросов со строгой логикой построения
- 3. Исправительная колония строгого режима
- Сатурн, Строгий Учитель
- 4. Не разграничивайте строго жизнь своей семьи и свои
- § 3 Сущность и идея брака. – Нравственное его значение. – Таин- ство в браке. – Историческое развитие идеи брака. – Много- женство, многомужие и одноженство. – Идея, семейное, обще- ственное и религиозное значение брака в Древнем мире. – Религиозный обряд брака у древних. – Строгая форма брака. – Освящение брака в христианстве. – Церковное понятие о браке на Западе и Востоке. – Секуляризация брака и подчинение его гражданскому закону и суду после реформации и революции. – Брачный закон и суд в Р
- АКЦЕНТУАЦИЯ ЦИКЛОИДНАЯ
- ХАРАКТЕР ЦИКЛОИДНЫЙ
- РИТМ
- Второй этап
- АКТИВНОСТЬ ПСИХИЧЕСКАЯ: БИОРИТМ
- САДОМАЗОХИЗМ
- ВКУС
- 9. Работа с мандолой через нумерологические транзиты
- Ретроградный Марс в VI поле
- Космический план