Мониторы. Своим возникновением и развитием мониторы обязаны понятию класса

 

Своим возникновением и развитием мониторы обязаны понятию класса. Основной идеей является то, что все осмысленные операции над данными (включая их инициализацию) должны быть собраны вместе с описанием структуры и типа самих данных; активизация этих операций должна происходить при вызове процедуры всякий раз, когда этого требуют процессы, совместно использующие данные. Важной характеристикой монитора является то, что одновременно может быть активным только одно из его процедурных тел; даже когда два процесса одновременно делают вызов процедуры (одной и той же или двух различных), один из вызовов («ждет») откладывается до завершения другого. Таким образом, тела процедур ведут себя как критические участки, защищенные одним и тем же семафором.

Приведем пример очень простого монитора, ведущего себя как счетчиковая переменная. В обозначениях языка PASCAL он имеет вид

Пример 3.31.

1monitor счет;

2vаr n: integer

3рrocedure* вверх;begin n := n + 1еnd;

4рrocedure*вниз;when > 0dо begin n := n - 1еnd;

5function*приземл. Вооlеаn;begin приземл := (n = 0)еnd;

6begin n := 0;

7 ...;

8ifn ≠ 1 then рrint(n)

9еnd

Строка 1 описывает монитор с именем счет.

Строка 2 описывает локальную для монитора общую переменную n. Она доступна только внутри самого монитора.

Строки 3 - 5 описывают три процедуры и их тела. Звездочки обеспечивают вызов этих процедур из программы, использующей монитор.

Строка 6 здесь начинается исполнение монитора.

Строка 7 три жирные точки обозначают внутреннее предложение, соответствующее блоку, который будет использовать монитор.

Строка 8 при выходе из использующего блока печатается конечное значение n (если оно ненулевое).

Новый экземпляр монитора может быть описан локальным для блока Р:

instanсе ракетa: счет; Р.

Внутри блока Р можно вызывать помеченные звездочками процедуры, используя команды:

ракета.вверх;... ракета.вниз;. ..;, ifракета.приземлthen...

Непомеченная же процедура или такая переменная, как n, недостижимы из Р. Свойственное мониторам взаимное исключение позволяет вызывать процедуру монитора любому числу процессов внутри Р без взаимного влияния при изменении n. Заметим, что попытка вызватьракета.вниз при n = 0 будет отложена до тех пор, пока некоторый другой процесс внутри Р не вызовет ракета.вверх. Это гарантирует, что значение n никогда не станет отрицательным.

Неэффективность повторяющейся проверки входных условий привела к появлению мониторов с более сложной схемой явного ожидания и явной подачей сигнала о возобновлении ожидающего процесса. Эти схемы даже позволяют приостанавливаться процедурному вызову в процессе его исполнения под воздействием автоматически возникающего исключения до того момента, когда некоторый последующий вызов процедуры другим процессом подаст сигнал о возобновлении приостановленного процесса. Таким путем можно эффективно реализовать множество оригинальных способов планирования, которые реализуются программой-планировщиком.

Так как в мониторе ожидающих процессов может быть несколько, простой порядок обслуживания очереди состоящий в том, что освобождается процесс, ожидающий дольше всех, гарантирует, что ни один из обратившихся процессов не будет задержан на неопределенное время.

 








Дата добавления: 2015-07-18; просмотров: 618;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.