 
        
        - •ОПЕРАЦИОННЫЕ СИСТЕМЫ
- •Синхронизация на верхнем уровне
- •Почтовые ящики
- •Односторонняя связь
- •Двусторонняя связь
- •Многовходовые почтовые ящики
- •Порты
- •Монитор Хоара
- •Монитор двоичный семафор
- •Монитор распределитель ресурсов
- •Монитор читатели - писатели
- •Монитор читатели - писатели
- •Использование монитора
- •Тупики (deadlock, clench)
- •Условия наличия тупика
- •Четыре направления по проблеме тупиков
- •Предотвращение тупиков
- •Обход тупиков
- •Обнаружение тупиков
- •Восстановление после тупиков
- •Алгоритмы предотвращения тупиков
- •Метод Габермана
- •Правило Габермана гласит
- •Пусть P1 запрашивает A
- •Пусть P2 запрашивает A
- •Пусть P3 запрашивает B
- •Пусть P4 запрашивает D
- •Алгоритм банкира
- •Пусть P1 запрашивает 2 устройства
- •Пусть P2 запрашивает 2 устройства
- •Тупики как критический фактор для
 
ОПЕРАЦИОННЫЕ СИСТЕМЫ
Вощинская Гильда
| 
 | 
 | 
 | 
| Эдгаровна | 1 | |
 
Синхронизация на верхнем уровне
Приёмы синхронизации, использующие как аппаратные, так и программные средства, относятся к верхнему уровню синхронизации. По сравнению с синхронизацией нижнего уровня они обладают большей гибкостью.
Рассмотрим три способа:
•почтовые ящики
•порты
•мониторы
2
 
Почтовые ящики
Почтовый ящик – это информационная структура, для которой определяются правила и методы работы с ней.
| Описание почтового | Головной элемент | 
| 
 | |
| ящика | 
 | 
| сообщения | гнёзд | 
| 
 | |
| 
 | а | 
3
 
Односторонняя связь
Если процесс P1 хочет общаться с процессом P2, то он
обращается к системе для образования почтового ящика, который свяжет эти процессы так, чтобы они могли передавать друг другу сообщения.
Для того, чтобы отправить сообщение P1 обращается к системе, передавая имя почтового ящика и само сообщение. Процесс P2 обязательно получит сообщение, если обратится за ним к
системе.
P1 может получать сообщения до тех пор, пока есть свободные гнёзда.
P2 может получать сообщения, пока есть занятые гнёзда.
4
 
Двусторонняя связь
Чтобы P1 мог получать подтверждение отправленных сообщений, нужно разрешить передавать сообщения в обоих направлениях. А чтобы для ответа всегда было место, можно потребовать, чтобы ответы помещались в те же самые гнёзда, что и вызвавшие их сообщения.
5
 
Многовходовые почтовые ящики
Если многим процессам нужно общаться с одним, который представляет собой важную обслуживающую программу, то возникает ситуация, называемая проблемой деятеля.
| 
 | 
 | 
 | Описание почтового ящика | 
 | 
 | |
| процесс1 | 
 | вход 1 | Сообщения пр1 | 
 | 
 | |
| 
 | 
 | 
 | ||||
| процесс2 | 
 | 
 | вход 2 | Сообщения пр2 | 
 | процесс | 
| 
 | 
 | 
 | ||||
| 
 | 
 | |||||
| процесс3 | 
 | 
 | вход 3 | Сообщения пр3 | 
 | 
 | 
| 
 | 
 | 
 | 
 | 
 | 
 | |
| 
 | 
 | 
 | 
 | 
 | 
 | |
6
 
Порты
Для отправки сообщения в почтовый ящик, процесс должен знать имя этого почтового ящика. Чтобы освободить процесс от необходимости знать имена почтовых ящиков, можно организовать общение процессов посредством портов.
Порт – связующее звено между процессом и почтовыми ящиками. Процесс передаёт сообщения порту, а порт рассылает их по почтовым ящикам.
7
 
Монитор Хоара
Чарльз Энтони Ричард Хоар (Hoare C.A.R. – Великобритания) –выдающийся учёный, лауреат премии Тьюринга, известный системный программист и теоретик информатики.
Монитор – набор процедур и информационных структур, которыми процессы пользуются в режиме разделения, т.е. в каждый момент его может использовать только один процесс.
Для того, чтобы задержать обратившийся к нему процесс, а потом запустить его вновь, монитор использует специальные команды Wait и Signal. С помощью монитора можно реализовать
| операции P и V над семафорами. | 8 | 
| 
 | 
 
Монитор двоичный семафор
| monitor Bin_Semaph; | // Взаимное исключение | ||||
| var | // критических участков при | ||||
| integer S; | // помощи монитора | ||||
| 
 | condition Semaphore_Positive; | parbegin | 
 | 
 | |
| procedure P; | P1:while true do | ||||
| begin | 
 | 
 | |||
| begin | 
 | 
 | |||
| ........... | 
 | 
 | |||
| if S<1 then | Bin_Semaph.P; | ||||
| 
 | |||||
| 
 | Semaphore_Positive.Wait; | участок 1 | //критический | ||
| 
 | S:=S-1; | Bin_Semaph.V; | |||
| end; | 
 | ||||
| procedure V; | end; | .............. | 
 | ||
| begin | 
 | 
 | |||
| P2:while true do | |||||
| 
 | S:=S+1; | ||||
| 
 | begin | 
 | 
 | ||
| 
 | if S=1 then | 
 | 
 | ||
| 
 | ........... | 
 | |||
| 
 | Semaphore_Positive.Signal; | 
 | Bin_Semaph.P; | ||
| end; | участок 2 | //критический | |||
| begin | Bin_Semaph.V; | ||||
| S:=1; | 
 | ||||
| 
 | 
 | 
 | .............. | 
 | |
| end. | end; | 9 | 
 | ||
| 
 | 
 | parend | 
 | 
 | |
 
Монитор распределитель ресурсов
| //Предположим, что нескольким | // вернуть ресурс | |
| // процессам необходим доступ | procedure Return; | |
| // к | определённому ресурсу | begin | 
| monitor Distrib_Res; | Res_taken:=false; | |
| var | Res_free.Signal; | |
| Res_taken:boolean;// ресурс занят | end; | |
| Res_free:condition;// ресурс свободен | begin | |
| 
 | 
 | |
| // захватить ресурс | Res_taken:=false; | |
| procedure Take; | end. | |
| begin | 
 | |
| if Res_taken then Res_free.Wait; | 
 | |
| 
 | Res_taken:=true; | 
 | 
| end; | 
 | |
10
