Основы операционных систем


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


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

Здесь критический участок для каждого процесса – от операции "Обнаруживает, что хлеба нет" до операции "Возвращается в комнату" включительно. В результате отсутствия взаимоисключения мы из ситуации "Нет хлеба" попадаем в ситуацию "Слишком много хлеба". Если бы этот критический участок выполнялся как атомарная операция – "Достает два батона хлеба", то проблема образования излишков была бы снята.

Таблица 5.1.

ВремяСтудент 1Студент 2Студент 3
17-05Приходит в комнату
17-07Обнаруживает,что хлеба нет
17-09Уходит в магазин
17-11Приходит в комнату
17-13Обнаруживает, что хлеба нет
17-15Уходит в магазин
17-17Приходит в комнату
17-19Обнаруживает,что хлеба нет
17-21Уходит в магазин
17-23Приходит в магазин
17-25Покупает 2 батона на всех
17-27Уходит из магазина
17-29Приходит в магазин
17-31Покупает 2 батона на всех
17-33Уходит из магазина
17-35Приходит в магазин
17-37Покупает 2 батона на всех
17-39Уходит из магазина
17-41Возвращается в комнату
17-43
17-45
17-47Возвращается в комнату
17-49
17-51
17-53Возвращается в комнату




Начало  Назад  Вперед