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

Проблема взаимного исключения является крайне важной при разработке операционных систем. Взаимное исключение гарантирует то, что в каждый момент времени лишь один процесс имеет доступ к какому-то конкретному ресурсу. Проблема относится к тем ресурсам, доступ к которым нельзя разделять или если это может привести к непредвиденным последствиям. Например, если один процесс читает ячейку памяти в то время, как другой пишет в эту ячейку, то первый процесс может получитьневерные данные. В общем случаи нельзя без ограничений разделять ресурсы, в которые можно записывать.
Процессы можно разделить на:
- Независимые процессы: борются за использование ресурсов, поскольку процессы не знают друг о друге и между ними нет обмена информацией. ОС должна регулировать доступ к ресурсам
- Связанные процессы: работают совместно и общаются между собой посредством идентификатора процесса (ID). Процессы общаются для обмена информацией (внутрипроцессная коммуникация) и для упорядочивания действий (синхронизация).
Ресурс, который хотят использовать несколько процессов является критическим ресурсом, а программный код, из которого поступает запрос на использование, является критической секцией кода. Взаимное исключение обеспечивает, чтобы критические секции разных процессов не запускались одновременно.
Рисунок 2‑7. Взаимное исключение процессов (Источник: Learning Materials for Information Technology Professionals (EUCIP-Mat))
Для разрешения проблемы доступа к разделённым ресурсам применяют семафоры (Seмaphor). Это заведуемые ОС
структуры данных, координирующие доступ к устройствам посредством специального
API.
Когда процесс хочет получить доступ к ресурсу, вызывается функция семафора:
- Если ресурс свободен ("зелёный семафор"), ОС меняет его цвет на запретный ("красный семафор") и предоставляет процессу доступ к ресурсу
- Если ресурс занят, ОС добавит процесс в очередь семафора, а сам процесс установит в состязание ожидания
Когда ресурс освобождается, с помощью функции семафора проверяется нет ли в очереди других процессов:
- Если есть, то статус процесса устанавливается в "готов к исполнению", а состояние семафора остаётся "красным"
- Если очередь пуста, состояние семафора меняется на "зелёный"
Ситуацию, при которой несколько процессов находятся в состоянии бесконечного ожидания ресурсов, занятых самими этими процессами, называется взаимной блокировкой (Deadlock).