Главным фактором является наличие одной аппаратной команды, которая осуществляет чтение переменной, запись ее значения в область сохранения и установку нужного конкретного значения этой переменной. Подобная команда, обычно называемая TestAndSet, после запуска выполняет все эти действия до конца без прерываний. Неделимая команда TestAndSet(a,b) читает значение логической переменной b, копирует его в а, а затем устанавливает для b значение “истина”.
Program примерtestandset;
Var активный : логический;
Procedure процессодин;
Var первомувходитьнельзя : логической;
Begin
While истина do
Begin
Первомувходитьнельзя:=истина;
While первомувходитьнельзя do
Testandset(первомувходитьнельзя, активный);
Критическийучастокодин;
Активный:=ложь;
Прочиеоператоры1;
End;
End;
Procedure процессдва;
Var второмувходитьнельзя : логической;
Begin
While истина do
Begin
Второмувходитьнельзя:=истина;
While второмувходитьнельзя do
Testandset(второмувходитьнельзя, активный);
Критическийучастокдва;
Активный:=ложь;
Прочиеоператоры2;
End;
End;
Begin
Активный:=ложь;
Parbegin
Процессодин;
Процессдва;
Parebd
End.
Семафор – защищенная переменная, значение которой можно опрашивать и менять только при помощи специальных операций P и V. Операция P(S) выполняется следующим образом S:=S-1. V(S) – S:=S+1. Если одновременно несколько процессов попытаются выполнить операцию P(S), это будет разрешено только одному из них, а остальным придется ждать. Семафоры и операции над ними могут быть реализованы как программно, так и аппаратно. Как правило, они реализуются в ядре операционной системы.
Процесс находится в состоянии тупика, если он ожидает события, которое никогда не произойдет. “Зависание” системы – ситуация, когда один или более процессов находятся в состоянии тупика.
Операционная система выполняет по преимуществу функции администратора ресурсов. Она отвечает за распределение обширных наборов ресурсов различных типов. Рассмотрим ресурсы, которые являются “оперативно-перераспределяемыми” такие как центральный процессор и основная память. В вычислительной машине самым динамическим ресурсом является центральный процессор. ЦП должен работать в режиме быстрого переключения, обслуживая большое число конкурирующих процессов, чтобы все они могли двигаться в приемлемой скоростью. Если конкретный процесс достигает точки, когда он не может эффективно использовать ЦП, то право управления центральным процессором отбирается у этого процесса и предоставляется другому. Таким образом, организация динамического переключения ресурсов является исключительно важным фактором для обеспечения работы мультипрограммных вычислительных машин.