Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Реализация примитивов взаимоисключения



Реализация примитивов взаимоисключения при работе многопроцессорных ВС требует аппаратной поддержки. С этой целью в ВС либо определяются специальные типы данных (семафоры) и в систему команд ВС включаются особые семафорные операции (этот вариант используется при создании мощных многопроцессорных ВС, например, МКП “Эльбрус”), либо для программной реализации семафоров используются команды типа TeasAndSet, которые позволяют сделать неделимой операцию по проверке и установке значения по указанному в качестве операнда адресу (этот подход использован, например, разработчиками процессоров Intel, на базе которых могут создаваться многопроцессорные ВС).

Команда TestAndSet(B) считывает значение логической переменной B и возвращает его в качестве результата, а затем устанавливает в B истинное значение независимо от того, какое значение там ранее было записано. С помощью этой команды можно смоделировать семафорные примитивы P и V программно:

P(S) V(S)
while TestAndSet( S ) do; S:= false

Операции пересылки и TestAndSet являются неделимыми, а на время их выполнения процессором в многопроцессорной ВС доступ по адресу операнда в общей памяти для других процессоров блокируется.

В процессорах Intel (начиная с i486) для реализации семафорных примитивов удобно использовать команду CMPXCHG (CoMPare and eXCHanGe) сравнения и обмена, работающую с тремя операндами. Эта команда может не только проверить значение семафора и занять его, но в случае, если семафор занят, получить идентификатор текущего его владельца.

Двоичный семафор может быть также реализован с помощью команд BTR/BTS (проверка и сброс/установка бита). Эти команды сохраняют значение указанного бита в регистре флагов (CF), а затем обнуляют или устанавливают в 1 этот бит. Последующая проверка бита в регистре флагов позволяет организовать ожидание, если семафор, представленный этим битом, оказывается закрытым.

В ВС на базе процессоров этого семейства можно для моделирования семафорных операций использовать также команду XADD (eXchange and ADD).

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

Семафоры как средство синхронизации работы процессов реализованы во многих операционных системах (Unix, Windows NT, OS/2, Novell NetWare).

Кроме семафоров и семафорных примитивов существуют и другие средства синхронизации работы процессов.

Более общая схема взаимодействия процессов может быть построена с помощью механизма блокирования или запирания. Эти средства могут также поддерживаться аппаратно, быть реализованы средствами операционных систем или систем программирования (или СУБД).





Дата публикования: 2014-11-29; Прочитано: 604 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...