Наверх Системное программирование
Предыдущий раздел Оглавление Следующий раздел

3.3.2. Критические области

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

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

Рис

Рис. 3.10. Взаимное исключение
использования критических областей

1. Два процесса не могут одновременно находиться в своих критических областях.

2. Не должны выстраиваться никакие предположения по поводу скорости или количества центральных процессоров.

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

4. Процессы не должны находиться в вечном ожидании входа в свои критические области.

В абстрактном смысле необходимое поведение показано на рис. 3.10. Процесс А входит в свою критическую область во время T1. Затем, когда наступает время T2, процесс Б пытается войти в свою критическую область, но терпит неудачу, поскольку другой процесс уже находится в своей критической области.

Следовательно, Б временно приостанавливается до наступления времени T3, когда A покинет свою критическую область, позволяя Б тут же войти в свою критическую область. Со временем Б покидает свою критическую область, и происходит возврат в исходную ситуацию, когда ни один из процессов не находится в своей критической области.

Предыдущий раздел Оглавление Следующий раздел