русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Листинг 7.9. Реализация операций Р и V для однопроцессорной системы


Дата добавления: 2014-11-28; просмотров: 541; Нарушение авторских прав


type Semaphore = record

счетчик :integer:

указатель :pointer; продолжение


228________ Глава 7. Организация параллельных взаимодействующих вычислений

Листинг 7.9(продолжение)

end; var S :Semaphore;

procedure P ( var S : Semaphore); begin ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ; Б.счетчик:= Б.счетчик-].: if S.счетчик < 0 then

WAIT(S); { вставить обратившийся процесс в список по S.указатель и передать

на процессор готовый к выполнению процесс } РАЗРЕШИТЬ_ПРЕРЫВАНИЯ end;

procedure V ( var S : Semaphore): begin ЗАПРЕТИТЬ ПРЕРЫВАНИЯ;

З.счетчик::= S.счетчик+1;

if S.счетчик <= 0 then RELEASE (S); { деблокировать первый процесс из списка по S.указатель }

РАЗРЕШИТЬ_ПРЕРЫВАНИЯ end:

procedure InitSem (var S ; Semaphore): begin

5.счетчик:=1;

5.указатель:=nil: end;

Реализация семафоров в мультипроцессорных системах сложнее, чем в однопро­цессорных. Одновременный доступ к семафору S двух процессов, выполняющих­ся на однопроцессорной вычислительной системе, предотвращается запретом пре­рываний. Однако этот механизм не подходит для мультипроцессорных систем, так как он не препятствует двум или более процессам одновременно обращаться к од­ному семафору. В силу того что такой доступ должен реализовываться через кри­тическую секцию, необходимо дополнительное аппаратное взаимное исключение доступа для различных процессоров. Одним из решений является использование уже знакомых нам неделимых команд проверки и установки (TS). Двухкомпонент-ный семафор в этом случае расширяется включением третьего компонента — ло­гического признака взаимоискл (листинг 7.10).

Листинг 7.10.Реализация операций Р и V для мультипроцессорной системы

type Semaphore = record

счетчик : integer;

указатель : pointer;

взаимоискл : boolean: end; var S : Semaphore;

procedure InitSem (var S : Semaphore): begin With S do begin



счетчик:=1; указатель:=nil; взаимоискл:=true: end; end:


Средства синхронизации и связи взаимодействующих процессов_______________ 229

procedure Р ( var S : Semaphore): var разрешено : boolean: begin

ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;

repeat ТS(разрешено, S.взаимоискл) until разрешено:

S.счетчик:=S.счетчик-1:

if S.счетчик < 0 then WAIT(S): { вставить обратившийся процесс в список по S.указатель

и передать на процессор готовый к выполнению процесс }

S.взаимоискл:=true;

РАЗРЕШИТЬ_ПРЕРЫВАНИЯ end:

procedure V ( var S : Semaphore ):

var разрешено : boolean:

begin

ЗАПРЕТИТЬ_ПРЕРЫВАНИЯ;

repeat ТS(разрешено.S.взаимоискл) until разрешено:

5.Счетчик:=5.Счетчик+1;

if S.счетчик <= 0 then RELEASE(S): { деблокировать первый процесс из списка

по S.указатель }

S. взаимоискл:=true:

РАЗРЕШИТЬ__ПРЕРЫВАНИЯ: end:

Обратите внимание, что в данном тексте команда проверки и установки — TS(pa3-решено,S.взаимоискл) — работает не с целочисленными, а с булевыми значениями. Практически это ничего не меняет, ибо текст программы и ее машинная (двоич­ная) реализация — это разные вещи.



<== предыдущая лекция | следующая лекция ==>
Семафорные примитивы Дейкстры | Мьютексы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.785 сек.