- •ОПЕРАЦИОННЫЕ СИСТЕМЫ
- •Синхронизация на верхнем уровне
- •Почтовые ящики
- •Односторонняя связь
- •Двусторонняя связь
- •Многовходовые почтовые ящики
- •Порты
- •Монитор Хоара
- •Монитор двоичный семафор
- •Монитор распределитель ресурсов
- •Монитор читатели - писатели
- •Монитор читатели - писатели
- •Использование монитора
- •Тупики (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