У меня сегодня довольно сумбурный вопрос, господа.
Нахожусь в процессе чтения Таненбаума "Современные ОС", в разделе "Взаимодействие процессов" автор рассуждает о метода достижениях взаимного исключения процессов (
запрет прерываний, блокирующие переменные, строгое чередование). Если с идеей запрета прерываний все более менее понятно, то с использование переменных начинается путаница.
Выдержка из книги:
В качестве второй попытки рассмотрим программное решение, в котором используется
одна общая (блокирующая) переменная, исходное значение которой равно нулю. Когда
процессу требуется войти в свою критическую область, сначала он проверяет значение
блокирующей переменной. Если оно равно 0, процесс устанавливает его в 1 и входит
в критическую область. Если значение уже равно 1, процесс просто ждет, пока оно не
станет равно нулю. Таким образом, нулевое значение показывает, что ни один из про-
цессов не находится в своей критической области, а единица — что какой-то процесс
находится в своей критической области.
Поправьте, пожалуйста, мою цепочку рассуждений. Если представить два процесса, которые загружены в оперативную память и между ними есть некая критическая область.
Как пишет автор: Если процесс 1 хочет работать в критической секции, то он считывает значение переменной X на предмет 0 или 1. И на основании этого входит в свою критическую область, допустим X=0, тогда процесс 1 устанавливает X=1 и начинает свою работу.
А как процессу 2, считать значение переменной X первого процесса? Откуда он её должен считывать? Если я правильно понимаю, ОС защищает память процесса от вторжения других процессов. Получается процесс 2 не может считать чужое адресное пространство процесса 1.
Заранее благодарю, коллеги