Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SPPO_shpora_final_ver_1.pdf
Скачиваний:
49
Добавлен:
30.03.2015
Размер:
1.19 Mб
Скачать

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

16 ОБЩИЕ СЕМАФОРЫ, РЕШЕНИЕ ЗАДАЧИ «ПИСАТЕЛЕЙ И ЧИТАТЕЛЕЙ» ПРИ РАБОТЕ С ЦИКЛИЧЕСКИМ БУФЕРОМ.

Решение задачи писателя-читателя.

Есть писатель, который записывает n записей начиная с 1-ой в циклический буфер. И есть читатель, который считывает то, что записал писатель. При этом писатель, доходя до конца буфера, переписывает 1 строку в нем. Он не может переписать не прочитанную строку. Читатель же не должен читать дважды одну и ту же запись и читать еще не заполненную запись. Для решения задачи требуется 2 семафора, считающие ресурсы читателя и писателя, и 1 бинарный семафор для защиты буфера.

Для процесса P1 ресурсом являются незаполненные записи в буфере, для их учета можно использовать считающий семафор E, а для процесса P2 необходимым для работы ресурсом являются сформированные процессом P1 записи, для учета их числа можно также использовать считающий семафор F. Кроме того, выполнение операций с буфером, который является разделяемым ресурсом, требует обычно взаимного исключения (последовательность операций над данными в буфере - критическая секция), для реализации которого можно использовать бинарный семафор.

Описание процедуры инициализации и программ, соответствующих процессам P1 и P2, приведено ниже.

Процедура инициализации

Процесс-производитель

Процесс-потребитель

 

 

 

procedure INIT;

process P1;

process P2;

binary semaphore B ;

binary semaphore B ;

binary semaphore B ;

integer semaphore E, F;

integer semaphore E, F;

integer semaphore E, F;

begin

begin

begin

B := 1 ; {Буфер открыт}

while true do

while true do

E := N ; {Все записи}

begin

begin

{в буфере пусты}

...

...

F := 0 ; {В буфере нет}

produce_next_record ;

P(F) ;

{ни одной записи}

P(E) ;

P(B) ;

start(P1) ;

P(B) ;

read_record_from_buffer;

start(P2)

write_record_to_buffer ;

V(B);

end INIT .

V(B);

V(E);

 

V(F);

process_new_record ;

 

...

...

 

end

end

 

end P1 .

end P2 .

 

 

 

Процесс-производитель ресурса может получить доступ к буферу только в том

29

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

17 ПРОБЛЕМА ТУПИКА И ЗАДАЧИ, СВЯЗАННЫЕ С РЕШЕНИЕМ ПРОБЛЕМЫ ТУПИКА: ФОРМУЛИРОВКИ ЗАДАЧ И ПОДХОДЫ К РЕШЕНИЮ.

Тупик - состояние, в котором ожидается какое-то событие, которое не может произойти без внешнего вмешательства (вмешательство оператора, пользователя).

!один процесс в тупике не бывает.

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

Операции, которые могут привести систему в тупиковое состояние:

Существуют три операции, которые с точки зрения проблемы тупика влияют на состояние системы.

1.операция запроса на ресурс - Request (R,k), где R- то, какой ресурс, k-кол-во единиц этого ресурса.

2.Операция выделения ресурса по запросу процесса (выполняется системой). Если выделить не сможет никогда, то процесс в тупике.

3.Освобождение ресурса - Release (R, k).

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

Особенно большое значение решение проблемы тупика приобретает в системах реального времени, в вычислительных сетях.

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

предотвращение тупиков;

обход тупиков;

распознавание тупиков;

вывод системы из тупика и восстановление ее работоспособности.

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

Задача обхода тупика решается в системах, где возможность возникновения тупика не исключается. Цель решения этой задачи - обход состояний, где вероятность возникновения тупика велика.

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

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

30

Если оказалось, что система все-таки попала в тупик, то необходимо уметь распознать эту ситуацию. Цель задачи распознавания тупика - установить сам факт возникновения тупиковой ситуации и определить объекты системы (процессы и ресурсы), вовлеченные в нее, то есть определить причины, приведшие к тупику.

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

18 ЗАДАЧА ПРЕДОТВРАЩЕНИЯ ТУПИКА, ПОДХОДЫ К РЕШЕНИЮ

Тупики могут возникнуть только в системах, где выполняются четыре необходимых условия их появления:

условие взаимоисключения (процессы требуют предоставления им права монопольного использования ресурсов, которые им выделяются);

условие ожидания ресурсов (процессы, запросившие ресурс, ожидают его выделения, не отказываясь от своих запросов);

условие неперераспределяемости ресурсов (ресурсы, выделенные процессам, не могут быть перераспределены, пока процессы не используют их до конца и не выполнят сами операцию освобождения, даже если процессы, удерживающие ресурсы, находятся в заблокированном состоянии);

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

Нарушение какого-либо из этих условий создает возможность предотвращения тупиков в системе.

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

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

Первый метод (самый простой для реализации) состоит в том, что все ресурсы в системе отдаются в распоряжение одного процесса. Фактически это означает организацию однопрограммного режима работы ВС, что означает неэффективное ее функционирование.

Второй подход состоит в том, чтоб определить все потребности процессов в

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

Третий подход к решению задачи предотвращения тупиков состоит в реализации

стратегии упорядочения ресурсов.

Все ресурсы делятся на классы

K1, K2, ... , Kk так, что ресурс из класса Ki может быть выделен процессу только тогда, когда этому процессу не распределены уже ресурсы из классов

31

Ki, Ki+1, ... , Kk

(при k=1 получается описанный выше вариант).

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

В операционной системе, в которой реализовано предотвращение тупиков, ресурсы могут быть классифицированы, например, следующим образом:

K1 - файлы, открываемые процессом, K2 - оперативная память ВС, запрашиваемая динамически, K3 - устройства ввода/вывода.

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

19 МАТЕМАТИЧЕСКАЯ МОДЕЛЬ ДЛЯ ФОРМАЛЬНОГО ОПРЕДЕЛЕНИЯ ТУПИКА. СОСТОЯНИЕ СИСТЕМЫ И ОПЕРАЦИИ, ВЛИЯЮЩИЕ НА СОСТОЯНИЕ СИСТЕМЫ. ОПРЕДЕЛЕНИЕ ЗАБЛОКИРОВАННЫХ ПРОЦЕССОВ, ПРОЦЕССОВ, НАХОДЯЩИХСЯ В ТУПИКЕ. ОПРЕДЕЛЕНИЕ СОСТОЯНИЯ ТУПИКА. ПОНЯТИЕ ВЫГОДНОГО СОСТОЯНИЯ. ПОНЯТИЕ БЕЗОПАСНОГО СОСТОЯНИЯ

Мат модель системы, используемой для определения тупика.

Определим систему как пару

Σ = { σ , π },

где σ = {S1 , S2 , ...} - множество состояний системы, π = { p1 , p2 , ...} - множество процессов, протекающих в системе.

В системе, которая определяется таким образом, процесс pi π представляет собой частичную функцию, отображающую состояния системы в непустые подмножества ее же состояний:

pi : σ → { σ }.

Процесс pi может быть определен не для всех состояний.

Если pi определен на состоянии Sl, то pi(Sl) - область его значений, то есть процесс pi

может изменить состояние системы из Sl в состояние Sk pi(Sl ). Для перевода системы из состояния Sl в состояние Sk процесс должен выполнить некоторую операцию. Для

обозначения перевода процессом pi системы Σ из состояния Sl в состояние Sk введем обозначение

pi

Sl Sk.

Состояние системы может измениться только при выполнении процессом одной из следующих операций:

запрос на ресурс; приобретение ресурса; освобождение ресурса.

Введем еще одно обозначение: нотация

*

означает

 

 

 

(a)

Sl = Sn

или

 

 

 

 

pi

 

 

(b)

pi : Sl Sn

или

 

 

 

 

pi

*

Sl Sn

(c)Sk & pi : (Sl Sk) & (Sk Sn).

То есть система может быть переведена из состояния Sl в состояние Sn посредством

32

h операций (h 0), которые могут быть выполнены m различными процессами (m 0). Используя введенные обозначения, определим состояние тупика.

Процесс pi заблокирован в состоянии Sl, если не существует ни одного такого состояния Sk , что

pi

Sl Sk .

То есть заблокированный процесс не может выполнить никакой операции по изменению состояния системы.

Процесс pi находится в тупике в состоянии Sl, если для любого состояния Sk, такого

что

*

Sl Sk

процесс pi будет заблокирован в этом состоянии. То есть процесс находится в тупике в состоянии Sl, если он заблокирован в этом состоянии и останется заблокированным в любом другом состоянии Sk, в которое система может перейти из этого состояния Sl при выполнении любых операций любыми другими процессами (процесс останется заблокированным, как бы ни изменялось состояние системы в будущем).

Состояние Sl называется тупиковым, если существует процесс pi, находящийся в тупике в этом состоянии.

Состояние Sl называется безопасным, если любое состояние Sk, такое что

*

Sl Sk,

не будет состоянием тупика.

Определение. Система, находящаяся в выгодном состоянии, если все процессы, имеющие запросы в этом состоянии, заблокированы.

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

Рассмотрим пример системы, в которой есть как тупиковое, так и безопасное

состояние. Пусть σ = {S1, S2, S3, S4, S5} - множество состояний системы, π = {p1, p2} - множество выполняющихся в ней процессов (рис.2.9).

 

p2

p1

 

S3 p1

p2

 

S1

S2

p1

S4

p1 S5

Рис.3.9. Пример системы с тупиковым и безопасным состоянием

Состояние S1 является состоянием тупика. Состояния S4 и S5 являются безопасными состояниями. Состояния S2 и S3 не являются безопасными состояниями, но не являются и тупиковыми.

p1, p2, R1, R2-единичной емкости

Process P1:… while true do begin… Request (R1)… request (R2)… Release (R1) … Release (R2)…end; {1->2; 2->1} process P2: ..While true do begin… Request (R2); … Request (R1); …Release (R2) …Release (R1)…end;

33

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]