2.2.2 Взаимное исключение

iDevice ikoon 2.2.2 Взаимное исключение

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


Процессы можно разделить на:

  • Независимые процессы: борются за использование ресурсов, поскольку процессы не знают друг о друге и между ними нет обмена информацией. ОС должна регулировать доступ к ресурсам
  • Связанные процессы: работают совместно и общаются между собой посредством идентификатора процесса (ID). Процессы общаются для обмена информацией (внутрипроцессная коммуникация) и для упорядочивания действий (синхронизация).

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

Рисунок 2‑7. Взаимное исключение процессов (Источник: Learning Materials for Information Technology Professionals (EUCIP-Mat))


Для разрешения проблемы доступа к разделённым ресурсам применяют семафоры (Seмaphor). Это заведуемые ОС структуры данных, координирующие доступ к устройствам посредством специального API.

Когда процесс хочет получить доступ к ресурсу, вызывается функция семафора:

  • Если ресурс свободен ("зелёный семафор"), ОС меняет его цвет на запретный ("красный семафор") и предоставляет процессу доступ к ресурсу
  • Если ресурс занят, ОС добавит процесс в очередь семафора, а сам процесс установит в состязание ожидания

Когда ресурс освобождается, с помощью функции семафора проверяется нет ли в очереди других процессов:

  • Если есть, то статус процесса устанавливается в "готов к исполнению", а состояние семафора остаётся "красным"
  • Если очередь пуста, состояние семафора меняется на "зелёный"

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