Разделы презентаций


Монитор

Содержание

7. Монитор 2002 v.0.2Монитор (2)monitor Буфер; сonstant ДлинаБуфера = 100; var СамБуфер: array[1..ДлинаБуфера] of Данное; var СчетчикЗаписей: integer; procedure Записать(d: Данное); begin ...

Слайды и текст этой презентации

Слайд 17. Монитор 2002 v.0.2
7. Монитор
Конструкция «монитор»:

::=

функций>
::= begin

7. Монитор		2002 v.0.27. МониторКонструкция «монитор»:::= ::= begin

Слайд 27. Монитор 2002 v.0.2
Монитор (2)
monitor Буфер;
сonstant ДлинаБуфера = 100;

var СамБуфер: array[1..ДлинаБуфера] of Данное;
var СчетчикЗаписей: integer;

procedure Записать(d: Данное);
begin
...
end;
function Прочитать(): Данное;
begin
...
end;
begin
СчетчикЗаписей:= 0;
end Буфер.

Пример:

7. Монитор		2002 v.0.2Монитор (2)monitor Буфер;  сonstant ДлинаБуфера = 100;  var СамБуфер: array[1..ДлинаБуфера] of Данное;

Слайд 37. Монитор 2002 v.0.2



Процедура доступа
monitor Буфер;
. . .
procedure Записать(d:

Данное);
begin
...
end;


function Прочитать(): Данное;
begin
...
end;
begin
СчетчикЗаписей:= 0;
end Буфер.

Поставщик:

loop
D:= Производство();
Буфер.Записать(D);
endloop.

Потребитель:

loop
D:= Буфер.Прочитать();
Обработка(D);
endloop.

7. Монитор		2002 v.0.2Процедура доступа monitor Буфер; . . .procedure Записать(d: Данное);   begin   ...

Слайд 47. Монитор 2002 v.0.2
Обеспечивается взаимное исключение доступа к ресурсам, описанным в

мониторе (Буфер.Записать(D) и Буфер.Прочитать()- не могут выполняться одновременно)
Управление ОчередьДоступа (например,

FIFO) обеспечивает очередность доступа процессов к монитороу

Процедура доступа (2)

Поставщик

Буфер

procedure Записать

function Прочитать

Потребитель

Записать(D)

D:=Прочитать

7. Монитор		2002 v.0.2Обеспечивается взаимное исключение доступа к ресурсам, описанным в мониторе (Буфер.Записать(D) и Буфер.Прочитать()- не могут выполняться

Слайд 57. Монитор 2002 v.0.2


Механизм синхронизации - сигналы
type Сигнал;
Операции над сигналами:
var

S: Сигнал;
wait(S):
поставить активный процесс в очередь, связанную с сигналом

S
send(S):
первый процесс из очереди S ставится в очередь готовых;
check(S):
возвращает кол-во процессов, ждущих
в очереди S
7. Монитор		2002 v.0.2Механизм синхронизации - сигналыtype Сигнал; Операции над сигналами:var S: Сигнал;wait(S): поставить активный процесс в очередь,

Слайд 67. Монитор 2002 v.0.2
Использование сигналов в мониторе
var Полон, Пуст: Сигнал;

procedure Записать(d:

Данное);
begin
if(СчетчикЗаписей => ДлинаБуфера) then

wait(Полон)
endif
ЗаписатьДанноеВБуфер(d);
СчетчикЗаписей:= СчетчикЗаписей + 1;
send(Пуст)
end;
7. Монитор		2002 v.0.2Использование сигналов в монитореvar Полон, Пуст: Сигнал;procedure Записать(d: Данное); begin  if(СчетчикЗаписей => ДлинаБуфера) then

Слайд 77. Монитор 2002 v.0.2
Использование сигналов в мониторе (2)

function Прочитать(): Данное
begin

if(СчетчикЗаписей = 0) then
wait(Пуст)

endif
Прочитать:= ЧтениеЗаписиИзБуфера();
СчетчикЗаписей:= СчетчикЗаписей - 1;
send(Полон)
end;
7. Монитор		2002 v.0.2Использование сигналов в мониторе (2)function Прочитать(): Данное begin  if(СчетчикЗаписей = 0) then

Слайд 87. Монитор 2002 v.0.2
Поставщик
Буфер
var Полон,
Пуст: Сигнал;

procedure Записать

function Прочитать
Потребитель
Записать(D)

D:=Прочитать
Очереди, связанные

с монитором

7. Монитор		2002 v.0.2ПоставщикБуферvar Полон,  Пуст: Сигнал;procedure Записатьfunction ПрочитатьПотребительЗаписать(D)D:=ПрочитатьОчереди, связанные с монитором

Слайд 97. Монитор 2002 v.0.2
Задача «Читатели-Писатели»
Информационный
фонд
П1
П2
ПN
Ч1
Ч2
ЧM
M Читателей и N Писателей получают доступ

к Информационному Фонду
Реализовать механизм, позволяющий обеспечить следующее условие:

в каждый момент времени могут работать не более
одного Писателя или не более M Читателей
7. Монитор		2002 v.0.2Задача «Читатели-Писатели»ИнформационныйфондП1П2ПNЧ1Ч2ЧMM Читателей и N Писателей получают доступ к Информационному Фонду Реализовать механизм, позволяющий обеспечить

Слайд 107. Монитор 2002 v.0.2
Схема реализации



monitor ЧП;
var МожноЧитать,
МожноПисать: Сигнал;

КтоТоПишет: boolean;
Читатели: 0..M;

procedure НачалоЧтения;
procedure КонецЧтения;
procedure НачалоЗаписи;
procedure КонецЗаписи;

begin
КтоТоПишет:=

false;
Читатели:= 0;
end ЧП.

Читатель:
loop
ЧП.НачалоЧтения();
РаботаСФондомЧ();
ЧП.КонецЧтения();
РазноеЧ;
endloop.

Писатель:
loop
ЧП.НачалоЗаписи();
РаботаСФондомП();
ЧП.КонецЗаписи();
РазноеП;
endloop.

7. Монитор		2002 v.0.2Схема реализацииmonitor ЧП;var МожноЧитать,  МожноПисать: Сигнал;  КтоТоПишет: boolean;  Читатели: 0..M;procedure НачалоЧтения;procedure КонецЧтения;procedure

Слайд 117. Монитор 2002 v.0.2
Начало чтения

procedure НачалоЧтения();
begin
if(КтоТоПишет)or(check(МожноПисать)>0) then

wait(МожноЧитать)
endif
Читатели:= Читатели + 1;

send(МожноЧитать)
end;
7. Монитор		2002 v.0.2Начало чтенияprocedure НачалоЧтения(); begin  if(КтоТоПишет)or(check(МожноПисать)>0) then    wait(МожноЧитать)  endif  Читатели:=

Слайд 127. Монитор 2002 v.0.2
Конец чтения

procedure КонецЧтения();
begin
Читатели:= Читатели -

1;
if(Читатели = 0) then
send(МожноПисать)

endif
end;
7. Монитор		2002 v.0.2Конец чтенияprocedure КонецЧтения(); begin  Читатели:= Читатели - 1;  if(Читатели = 0) then

Слайд 137. Монитор 2002 v.0.2
Начало записи

procedure НачалоЗаписи();
begin
if(Читатели > 0)or(КтоТоПишет)

then
wait(МожноПисать)
endif;
КтоТоПишет:= true;

end;
7. Монитор		2002 v.0.2Начало записиprocedure НачалоЗаписи(); begin  if(Читатели > 0)or(КтоТоПишет) then    wait(МожноПисать)  endif;

Слайд 147. Монитор 2002 v.0.2
Конец записи

procedure КонецЗаписи();
begin
КтоТоПишет:= false;

if(check(МожноЧитать) > 0) then
send(МожноЧитать)
else

send(МожноПисать)
endif;
end;
7. Монитор		2002 v.0.2Конец записиprocedure КонецЗаписи(); begin  КтоТоПишет:= false;  if(check(МожноЧитать) > 0) then

Слайд 157. Монитор 2002 v.0.2
Реализация механизма семафоров через монитор
monitor Семафор;
var Счетчик: 0..1;

S: Сигнал;

procedure P;
begin
if(Счетчик = 0) then
wait(S)

endif;
Счетчик = 0;
end;

procedure V;
begin
Счетчик:= 1;
send(S);
end;

begin
Счетчик:= 1;
end Семафор.

7. Монитор		2002 v.0.2Реализация механизма семафоров через мониторmonitor Семафор;var Счетчик: 0..1;  S: Сигнал;procedure P;begin if(Счетчик = 0)

Слайд 167. Монитор 2002 v.0.2
Реализация механизма семафоров через монитор (2)
Задача Ri:

loop

. . .
Семафор.Р();
КритическаяСекция_i
Семафор.V();

. . .
endloop.

Parbegin

R1;
R2;
. . .
Rn

Parend.

7. Монитор		2002 v.0.2Реализация механизма семафоров через монитор (2)Задача Ri:loop   . . .  Семафор.Р();

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика