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



Аппаратная поддержка взаимоисключений


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

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

Такой подход не будет работать в многопроцессорной системе.

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

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

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

Таким образом, если критический интервал требует более одного обращения к памяти, задача серьезно усложняется.

Операционная проверка и установка реализована на большинстве компьютеров. Команда TS (test and set) является двухадресной.


Начало  Назад  Вперед