7. Монитор Сидельников В.В. vvs_home@list.ru 2005 v.01 1 7. Монитор Хоара 7.1. Общее описание monitor ; end. ::= ::= begin.

Презентация:



Advertisements
Похожие презентации
Реализация списков:динамические структуры ListList clasclas структура одного элемента type LIST = celltype; celltype = record element: eltype; next: LIST.
Advertisements

Рекурсивная обработка списков1 Структуры и алгоритмы обработки данных, 1 Лекция 3 Рекурсивная обработка списков 1.Представление и реализация.
Стек, очередь, дек1 Структуры и алгоритмы обработки данных, 1 Лекция 4 Линейные СД Стек, очередь, дек.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
1 Записи 2 Запись – это тип данных, который может включать в себя несколько полей – элементов разных типов (в том числе и другие структуры). Свойства:
Взаимодействующие параллельные процессы
Взаимодействующие параллельные процессы. Параллельные процессы P1 P2 Q1 Q2 Последовательные процессы Логические параллельные процессы P1 P2 Q1Q2 Физические.
Файловый тип данных Файл – это область памяти на внешнем носителе, в которой хранится некоторая информация. В языке Паскаль файл представляет собой последовательность.
Множества значений или переменных с одним общим именем называются структурированными типами. По способу организации и типу компонентов выделяют: 1. Массивы.
Сущность семафорных механизмов Дейкстры Р(S) - операция (P – от голландского Proberen – проверить) V(S) – операция (V – от голландского Verhogen – увеличить)
Учебный курс Основы операционных систем Лекция 7 кандидат физико-математических наук, доцент Карпов Владимир Ефимович.
Математическая модель задачи о читателях и писателях Хусаинов А.А.
Оператор ветвления. Для реализации ветвления в программе используют условный оператор (оператор ветвления). Условный оператор в полной форме записывается.
6. Средства синхронизации и взаимодействия процессов 6.1. Проблема синхронизации Процессам Процессам часто нужно взаимодействовать друг с другом, например,
Работа с файлами.. Процедура Assign(var f; name : String); Связывает внешний файл с именем name и переменную файлового типа f. Все дальнейшие операции.
Основы операционных систем. Тема 6. Механизмы синхронизации.
ПРОГРАММИРОВАНИЕ ПОВТОРЕНИЙ. НАЧАЛО AB A, B, C A = A + C F = B + C F КОНЕЦ B = B + C F = A + B B < C A = A + B F = A + C нет да A = 1, B = 1, C = 4 F=?
Алгоритмические структуры 1.Линейный 2.Ветвление 3.Цикл.
Множества. Внутреннее представление.. Механизм внутреннего представления Каждое значение базового типа представляется одним битом. В память заносится.
Файловый тип данных Turbo Pascal Операции для работы с файлами 11 класс.
Транксрипт:

7. Монитор Сидельников В.В v Монитор Хоара 7.1. Общее описание monitor ; end. ::= ::= begin

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

7. Монитор Сидельников В.В v.01 3 Обеспечивается взаимное исключение доступа к ресурсам, описанным в мониторе ( Буфер.Записать(D) и Буфер.Прочитать()- не могут выполняться одновременно) Управление ОчередьДоступа (например, FIFO) обеспечивает очередность доступа процессов к монитороу 7.3. Процедура доступа Поставщик Буфер ОчередьДоступа procedure Записать function Прочитать Потребитель Записать(D) D:=Прочитать

7. Монитор Сидельников В.В v Процедура доступа monitor Буфер;... procedure Записать(d: Данное); begin... end; function Прочитать(): Данное; begin... end; begin СчетчикЗаписей:= 0; end Буфер. Поставщик: loop D:= Производство(); Буфер.Записать(D); endloop. Потребитель: loop D:= Буфер.Прочитать(); Обработка(D); endloop.

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

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

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

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

7. Монитор Сидельников В.В v Почему сигналы? Допустим, сигналов нет. Тогда просматриваются только два способа ожидания возможности доступа к монитору 1.Процесс «сам анилизирует» возможность доступа и «стучится» в монитор до тех пор, пока туда не попадет

7. Монитор Сидельников В.В v Почему сигналы? Процесс I Монитор ОчередьДоступа function Действие: boolean;... if(действиеВыполнено) return true; else return false; While(!Действие) Процесс J While(!Действие) Плохо – приложение берет на себя функции платформы по распределению ресурса между процессами; приложения пишут разные люди, у которых разные интересы

7. Монитор Сидельников В.В v Почему сигналы? 2.Процесс «сам анилизирует» возможность доступа и «засыпает» на некоторое время (платформа предоставляет возможность «заснуть» на время t - sleep(t): while(!Действие){ sleep(t); } Еще хуже a - Увеличивается latency b - Можно «потерять» момент освобождения монитора t Latency (a) Разрешение доступа Запрос от другого процесса (b)

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

7. Монитор Сидельников В.В v Схема реализации monitor ЧП; var МожноЧитать, МожноПисать: Сигнал; КтоТоПишет: boolean; Читатели: 0..M; procedure НачалоЧтения; procedure КонецЧтения; procedure НачалоЗаписи; procedure КонецЗаписи; begin КтоТоПишет:= false; Читатели:= 0; end ЧП. Читатель: loop ЧП.НачалоЧтения(); РаботаСФондомЧ(); ЧП.КонецЧтения(); РазноеЧ; endloop. Писатель: loop ЧП.НачалоЗаписи(); РаботаСФондомП(); ЧП.КонецЗаписи(); РазноеП; endloop.

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

7. Монитор Сидельников В.В v Конец чтения procedure КонецЧтения(); begin Читатели:= Читатели - 1; if(Читатели = 0) then send(МожноПисать) endif end;

7. Монитор Сидельников В.В v Начало записи procedure НачалоЗаписи(); begin if(Читатели > 0)or(КтоТоПишет) then wait(МожноПисать) endif; КтоТоПишет:= true; end;

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

7. Монитор Сидельников В.В v Пример 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. Монитор Сидельников В.В v Задача Ri: loop... Семафор.Р(); КритическаяСекция_i Семафор.V();... endloop. Parbegin R1; R2;... Rn Parend Пример 2 - реализация механизма семафоров через монитор