Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Мониторы



Монитор – набор управляющих структур и процедуры доступа к ним. Эти процедуры неделимы для прикладных процессов и реализованы в ядре/супервизоре.

Монитор позволяет организовать сложные ожидания и взаимодействия процессов.

Ожидания:

· 1 из ресурсов из списка

· 1 из событий из списка

· ограничения ожидания по времени

Монитор, основанный на таблице синхронизации.

Таблица синхронизации

Проц Обл. сохр Готовн Тай Ресур Соб1 Соб2 СобN
P1 Обл1 Не гот   Спис1        
P2 Обл2 Готов            
P3 Обл3 Не гот   Спис3        
               
PM ОблM Готов            

PM – системный процесс

Процедуры работы с ТС:

1) TP(указатель на список ресурсов, указатель на список событий, таймаут) – запрос всего

2) TV(ресурс) – возврат ресурсов

3) TWAIT(указатель на список событий, таймаут) – запрос событий

4) TPOST(событие) – извещение о наступлении события

Процесс CLOCK

TP (указатель на список ресурсов, указатель на список событий, таймаут)

begin <задержать текущий процесс>

for i=1 to <число семафоров в процессе> do

if семафор(i)>0 then

<взять ресурс из списка ресурсов>

<передать семафор и экземпляр ресурса в область сохранения процесса>

<активизировать задержанный процесс>

end

end

табл[текущий, готовность]="не готов"

табл[текущий, таймер]=Tout

табл[текущий, ресурсы]=указатель на список ресурсов

<отметить в столбцах заказанные события>

<активизировать наиболее приоритетный процесс>

end

TV (семафор, ресурс)

begin <задержать текущий процесс>

for i=1 to <число строк в таблице> do

if <список ожидающих ресурсов содержит возвращаемый ресурс> then

<передать в область сохранения Pi адрес семафора и адрес ресурса>

for j=3 to <количество столбцов в таблице> do

табл[i, j]=0

end

табл[i, готов]=да

if i<текущий then

<активизировать Pi>

else

<активизировать текущий>

end

end

end

<возвратить ресурс в систему>

<активизировать текущий процесс>

end

TWAIT (указатель на список событий, Tout)

begin <задержать текущий процесс>

табл[текущий, готовность]= не готов

табл[текущий, таймер] = Tout

<отметить в таблице события, указанные в запросе>

<активизировать наиболее приоритетный процесс>

end

TPOST (событие)

begin <задержать текущий процесс>

for i = 1 to <количество строк в таблице> do

if табл[i, событие] <> 0 then

for j = 3 to <количество столбцов в таблице> do

табл[i, j] = 0

end

<отметить в области сохранения Pi наступление события>

табл[i, готовность] = готов

if i < текущий then

<активизировать Pi>

else

<активизировать текущий процесс>

end

end

end

<активизировать текущий процесс>

end

Процесс CLOCK

begin

do while (true)

<запустить на один цикл работы таймера текущий процесс>

for i = 1 to <количество строк в таблице> do

if табл[i, таймер] then

табл[i, таймер]--

if табл[i, таймер] = 0 then

for i = 3 to <количество столбцов в таблице> do

табл[i, j] = 0

end

табл[i, готов] = да

end

end

текущий = <самый приоритетный готовый процесс>

end

end





Дата публикования: 2015-10-09; Прочитано: 208 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...