Операционные системы. Курс лекций



Критическая секция программы


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

Любая возможность обеспечения поддержки взаимодействия исключений должна соответствовать следующим требования:

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

2)    процесс, завершивший работу вне критического раздела не должен влиять на другие процессы.

3)    не должна возникать ситуация бесконечного ожидания доступа к критическому разделу.

4)    когда в критическом разделе нет ни одного процесса, любой процесс, запросивший возможность входа в него, должен немедленно его получить.

5)    не делается никаких предположений о количестве процессов или их относительной скорости работы.

6)    процессы остаются в критической секции только в течение ограниченного времени.

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

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

Еще один подход заключается в предоставлении определенного уровня поддержки со стороны ОС или языка программирования.




Содержание  Назад  Вперед