Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Готовые билеты по СППО к .doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
622.59 Кб
Скачать

Вопрос 12. Общие семафоры, решение задачи «писателей и читателей» при работе с циклическим буфером.

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

  • Пусть процесс P1 является “производителем”, который вырабатывает информацию и помещает новые записи в буфер. Параллельно с этим процессом в ВС существует процесс-“потребитель” информации P2, считывающий информацию из буфера. Процесс-“писатель” не должен вносить информацию в переполненный буфер и затирать еще не прочитанные “читателем” записи, а процесс-“читатель” не может читать информацию из пустого буфера или повторять чтение уже прочитанных записей.

  • Пусть емкость буфера составляет N записей.

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

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

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

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

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

procedure INIT;

binary semaphore B ;

integer semaphore E, F;

begin

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

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

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

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

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

start(P1) ;

start(P2)

end INIT .

process P1;

binary semaphore B ;

integer semaphore E, F;

begin

while true do

begin

...

produce_next_record ;

P(E) ;

P(B) ;

write_record_to_buffer ;

V(B);

V(F);

...

end

end P1 .

process P2;

binary semaphore B ;

integer semaphore E, F;

begin

while true do

begin

...

P(F) ;

P(B) ;

read_record_from_buffer;

V(B);

V(E);

process_new_record ;

...

end

end P2 .

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

Вопрос 13. Проблема тупика и задачи, связанные с решение проблемы тупика. Примеры.

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

Говорят, что процесс находится в состоянии тупика , если он ожидает некоторого события, которое не может произойти без вмешательства извне, то есть если не будут приняты “чрезвычайные меры” : процесс оказывается заблокированным в результате таких запросов на ресурсы, которые не могут быть удовлетворены, если не перераспределить принудительно ресурсы, “отобрав” их у других процессов, или не снять с выполнения эти процессы до нормального их завершения, процесс может быть также заблокирован в результате ожидания сигнала, который не может быть ему передан другим процессом.

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

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

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

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

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

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

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

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

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

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

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