<<
>>

Критическая секция

Важным понятием при изучении способов синхронизации процессов является понятие критической секции (critical section) программы. Критическая секция — это часть программы, исполнение которой может привести к возникновению race condition для определенного набора программ.
Чтобы исключить эффект гонок по отношению к некоторому ресурсу, необходимо организовать работу так, чтобы в каждый момент времени только один процесс мог находиться в своей критической секции, связанной с этим ресурсом. Иными словами, необходимо обеспечить реализацию взаимоисключения для критических секций программ. Реализация взаимоисключения для критических секций программ с практической точки зрения означает, что по отношению к другим процессам, участвующим во взаимодействии, критическая секция начинает выполняться как атомарная операция. Давайте рассмотрим следующий пример, в котором псевдо- параллельные взаимодействующие процессы представлены действиями различных студентов (таблица 5.1).

Здесь критический участок для каждого процесса — от операции «Обнаруживает, что хлеба нет» до операции «Возвращается в комнату» включительно.

В результате отсутствия взаимоисключения мы из ситуации «Нет хлеба» попадаем в ситуацию «Слишком много хлеба». Если бы этот критический участок выполнялся как атомарная операция — «Достает два батона хлеба», то проблема образования излишков была бы снята.

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

Таблица 5.1

один студент добывает хлеб, все остальные находятся в состоянии ожидания под дверью (таблица 5.2).

Таблица 5.2

Итак, для решения задачи необходимо, чтобы в том случае, когда процесс находится в своем критическом участке, другие процессы не могли войти в свои критические участки.

Мы видим, что критический участок должен сопровождаться прологом (entry section) — «закрыть дверь изнутри на засов» — и эпилогом (exit section) — «отодвинуть засов», которые не имеют отношения к активности одиночного процесса. Во время выполнения пролога процесс должен, в частности, получить разрешение на вход в критический участок, а во время выполнения эпилога — сообщить другим процессам о том, что он покинул критическую секцию.

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

while (some condition) { entry section

critical section exit section

remainder section

}

Здесь под remainder section понимаются все атомарные операции, не входящие в критическую секцию.

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

<< | >>
Источник: В.Е. Карпов К.А. Коньков. Основы операционных систем. 2005

Еще по теме Критическая секция:

  1. Критические градусы
  2. ПСИХОЛОГИЯ КРИТИЧЕСКАЯ
  3. 5. Критическая теория и рабочий класс.
  4. Традиционная и критическая теория
  5. Правило критического возвратак исходной точке.
  6. Правило критического возврата к исходной точке.
  7. Критические социальные исследования
  8. 3. Способность к суждению, критическое мышление и открытость новому
  9. Анти-Козлов, или Критическое бурчание
  10. "КРИТИЧЕСКИЕ ДНИ".
  11. Критическое мышление
  12. Критическое мышление
  13. Критическое мышление
  14. Критическое мышление
  15. Критическое мышление