Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект 58 страниц 2002.doc
Скачиваний:
91
Добавлен:
15.06.2014
Размер:
4.07 Mб
Скачать

Integer array желание[1:n], сп[1:n];

Integer чпб, бб, рб, чсеб, I;

for i:=1 step 1 until N do begin

желание[i]:=0;

СП[i]:=0;

end;

ЧПБ:=0; ЧСЕБ:=RB; ББ:=0; РБ:=1;

parbegin

производитель n: begin integer разм_п;

n: производство новой порции и установка её размера;

P(РБ);

if ((ББ=0) and (ЧСЕБ ≥ разм_п)) then

ЧСЕБ:=ЧСЕБ-разм_п

else

begin

ББ:=ББ+1;

желание[n]:=разм_п;

V(РБ);

P(СП[n]);

P(РБ);

end;

добавление порции к буферу;

V(РБ);

V(ЧПБ);

goto n;

end;

потребитель m: begin

Integer разм_п, n, max, nmax;

m: P(ЧПБ);

P(РБ);

взятие порции из буфера и установка разм_п;

ЧСЕБ:=ЧСЕБ+разм_п;

проверка:

if (ББ>0) then

begin

max:=0;

for n:=1 step 1 until N do

if (max<желание[n]) then

begin

max:=желание[n];

nmax:=n;

end

if (max ≤ ЧСЕБ) then

begin

ЧСЕБ:=ЧСЕБ-max;

желание[nmax]:=0;

ББ:=ББ-1;

V(СП[nmax]);

goto проверка;

end;

end;

V(РБ);

обработка взятой порции;

goto m;

end;

Для организации взаимодействия процессов введены следующие переменные состояния:

- для каждого производителя  “желание”, определяющая число единиц буфера, необходимых для размещения порции, которая в текущий момент не может быть добавлена к буферу. Если для процесса-производителя эта переменная равна нулю, то производитель не имеет неудовлетворённого требования на добавление порции;

- для каждого производителя вводится двоичный семафор СП (семафор производителя);

- для буфера вводится двоичный семафор РБ (работа с буфером), предназначенный для взаимного исключения при работе с буфером;

- семафор ЧПБ (число порций в буфере) определяет число порций, действительно занесённых в буфер и ещё не замеченных потребителем;

- целочисленная переменная ББ (блокировка буфера), значение которой равно числу положительных (>0) элементов массива ‘желание’, то есть определяет, сколько производителей имеют желание добавить порцию в буфер.

Как только одна из переменных ‘желание’ станет положительной, никакие добавления к буферу производиться не могут до появления свободного места в буфере и передачи уведомления буфером о том, что это место появилось.

В качестве механизма сигнализации потребителям о появлении новой порции в буфере, применяется общий семафор ЧПБ. Этот семафор определяет число порций, а не единиц информации, так как для потребителя не имеет значения размер порции.

Таким образом, из области взаимодействия мы рассмотрели:

- задачу взаимного исключения (решение с помощью переменных и с помощью семафорных операций: семафорная операция V (инкрементация семафора) и операция Р (декрементация семафора и ожидание его увеличения, если семафор равен нулю));

- задачи «производитель-потребитель» (взаимодействие процессов через буфер обмена).