- •Определите понятие ресурса. Дайте классификацию ресурсов. Какие проблемы связаны с разделением ресурсов процессами?
- •По возможности повторного использования
- •Дайте понятие критической секции.
- •Сформулируйте свойства критической секции.
- •Каковы общие условие решения задачи взаимного исключения?
- •Опишите и сравните различные программные методы решение проблемы взаимного исключения (использование логических переменных, счетчиков, задержек при выполнении процессов).
- •Дайте понятие семафора.
- •Опишите семафорные примитивы для бинарных семафоров и семафоров со счетчиками.
- •Приведите примеры использования семафоров (для решения задачи взаимного исключения, синхронизации процессов, решения задачи поддержания отношения предшествования)
- •Дайте определение тупика.
- •Сформулируйте задачи, связанные с проблемой тупика, кратко охарактеризуйте подходы к решению.
- •Дайте формальное определение системы с использованием математической (графовой) модели.
- •Дайте формальное определение заблокированного процесса, процесса, находящегося в тупике.
Дайте понятие критической секции.
Критическая секция– это последовательность команд программы, операции которой связаны с обращением к разделяемым данным, причем параллельное выполнение несколькими процессами действий, заданных в критических секциях, может привести к разрушению этих данных. Каждая критическая секция требует реализации взаимного исключения по отношению к одной конкретной разделяемой единице данных (переменной в общей памяти, целому файлу или записи в файле и т.п.), которая выступает в качестве последовательно используемого, требующего монопольного доступа ресурса.
process Pi;
begin
while true do
begin
BEFOREi; {Операторы, предшествующие критической секции }
CSi; {Операторы критической секции }
AFTERi; {Операторы, следующие за критической секцией }
end
end Pi.
Процедура инициализации |
Первый процесс |
Второй процесс |
procedure INIT; common integer N ; begin N := 1 ; start(P1) ; start(P2) end INIT . |
process P1; common integer N ; begin while true do begin BEFORE1 ; while N = 2 do ; CS1 ; N := 2 ; AFTER1 ; end end P1 . |
process P2; common integer N ; begin while true do begin BEFORE2 ; while N = 1 do ; CS2 ; N := 1 ; AFTER2 ; end end P2 |
Сформулируйте свойства критической секции.
На критическую секцию, связанную с доступом к какому-либо разделяемому несколькими процессами информационному ресурсу, налагаются следующие требования:
– в любой момент времени только один процесс может находиться в своей критической секции по данному ресурсу
– ни один процесс не должен ждать бесконечно долго входа в критическую секцию
– ни один процесс не может находиться в своей критической секции бесконечно долго
– никакой процесс, находящийся вне своей критической секции, не должен задерживать выполнение других процессов, ожидающих входа в свои критические секции.
Каковы общие условие решения задачи взаимного исключения?
На критическую секцию, связанную с доступом к какому-либо разделяемому несколькими процессами информационному ресурсу, налагаются следующие требования:
– в любой момент времени только один процесс может находиться в своей критической секции по данному ресурсу (это главное требование – взаимное исключение);
– ни один процесс не должен ждать бесконечно долго входа в критическую секцию (реализация взаимного исключения не должна приводить к ошибкам или невозможности выполнения процессами своих функций – взаимное исключение только устанавливает порядок доступа к общим ресурсам, исключающий их разрушение);
– ни один процесс не может находиться в своей критической секции бесконечно долго (это следствие предыдущего требования – все процессы в течение приемлемого времени должны получить доступ к разделяемым данным для выполнения своих функций);
– никакой процесс, находящийся вне своей критической секции, не должен
задерживать выполнение других процессов, ожидающих входа в свои критические секции.
Процедура инициализации |
Первый процесс |
Второй процесс |
procedure INIT; common integer N ; begin N := 1 ; start(P1) ; start(P2) end INIT . |
process P1; common integer N ; begin while true do begin BEFORE1 ; while N = 2 do ; CS1 ; N := 2 ; AFTER1 ; end end P1 . |
process P2; common integer N ; begin while true do begin BEFORE2 ; while N = 1 do ; CS2 ; N := 1 ; AFTER2 ; end end P2
|