Операционные системы. Теория и практика. Замятин А.В. - 70 стр.

UptoLike

Составители: 

70
Во избежание подобных ситуаций в системе команд многих ком-
пьютеров предусмотрена единая, неделимая команда анализа и присвое-
ния значения логической переменной (например, команды ВТС, BTR и
ВТ5 процессора Pentium). При отсутствии такой команды в процессоре
соответствующие действия должны реализовываться специальными си-
стемными примитивами базовыми функциями ОС, которые бы запре-
щали прерывания на протяжении всей операции проверки и установки.
Реализация взаимного исключения с использованием глобальных
блокирующих переменных имеет существенный недостаток: в течение
времени, когда один поток находится в критической секции, другой по-
ток, которому требуется тот же ресурс, получив доступ к процессору,
будет непрерывно опрашивать блокирующую переменную, бесполезно
растрачивая выделяемое ему процессорное время, которое могло бы
быть использовано для выполнения какого-нибудь другого потока. Для
устранения этого недостатка во многих ОС предусматриваются специ-
альные системные вызовы (аппарат событий) для работы с критически-
ми секциями.
Семафоры. В разных ОС аппарат событий реализуется по своему,
но в любом случае используются системные функции аналогичного
назначения, которые условно именуют WAIT(x) и POST(x), где x иден-
тификатор некоторого события. На рис. 19 показан фрагмент алгоритма
процесса, использующего эти функции.
Если ресурс занят, то процесс не выполняет циклический опрос, а
вызывает системную функцию WAIT(D), здесь D обозначает событие,
заключающееся в освобождении ресурса D. Функция WAIT(D) перево-
дит активный процесс в состояние ожидание и делает отметку в его де-
скрипторе о том, что процесс ожидает события D. Процесс, который в
это время использует ресурс D, после выхода из критической секции
выполняет системную функцию POST(D), ОС просматривает очередь
ожидающих процессов и переводит процесс, ожидающий события D, в
состояние готовность.
Обобщающее средство синхронизации процессов с использованием
изложенных выше принципов, названное семафор, предложил
Э.В. Дейкстра (Edsger Wybe Dijkstra) выдающийся нидерландский
учѐный, идеи которого оказали огромное влияние на развитие компью-
терной индустрии. Семафор объект, позволяющий войти в заданный
участок кода не более чем n потокам. Осуществляется это путем исполь-
зования специальной защищенной переменной S, значения которой
можно опрашивать и менять только при помощи специальных операций
P(S) и V(S) и операции инициализации. Семафор может принимать це-
лое неотрицательное значение. При выполнении потоком операции P
над семафором S значение семафора уменьшается на 1 при S > 0, или