Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VSOS_2014.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.9 Mб
Скачать
    1. Взаимное исключение и критические участки

Несмотря на то, что физические и логические ресурсы можно использовать совместно, они обычно в каждый момент времени доступны только одному процессу. Ресурс, который допускает единовременное обслуживание только одного процесса, называется критическим ресурсом. Если несколько процессов хотят пользоваться совместно некоторым ресурсом, то им следует синхронизировать свои действия таким образом, чтобы этот ресурс всегда находился в распоряжении не более одного из них (один процесс пользуется ресурсом, остальные ожидают его освобождения). В этом случае говорят, что процессы используют ресурс в режиме взаимного исключения (mutual exclusion).

Внутри каждого процесса можно выделить места, в которых происходит обращение к критическим ресурсам – критические участки, интервалы или секции (critical sections). Во всех процессах, работающих с критическими ресурсами, должна быть определена критическая секция. Заметим, что в разных потоках критическая секция состоит в общем случае из разных последовательностей команд.

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

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

  1. В любой момент времени только один процесс может находиться внутри критического по отношению к данному ресурсу участка (mutual exclusion).

  2. Если нет процессов, находящихся в критическом участке, и есть процессы, ожидающие входа в критический участок, то при выборе процесса, который должен выполняться следующим, учитываются только эти процессы, и этот выбор не должен откладываться бесконечно (progress).

  3. Должно существовать ограничение на интервал времени, прошедший от запроса на вход в критический участок до фактического разрешения входа (bounded waiting).

Критические участки могут вкладываться друг в друга, когда требуется одновременный доступ к нескольким ресурсам.

    1. Синхронизация с помощью элементарных приемов нижнего уровня

16Запрещение прерываний

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]