
- •Определите понятие ресурса. Дайте классификацию ресурсов. Какие проблемы связаны с разделением ресурсов процессами?
- •По возможности повторного использования
- •Дайте понятие критической секции.
- •Сформулируйте свойства критической секции.
- •Каковы общие условие решения задачи взаимного исключения?
- •Опишите и сравните различные программные методы решение проблемы взаимного исключения (использование логических переменных, счетчиков, задержек при выполнении процессов).
- •Дайте понятие семафора.
- •Опишите семафорные примитивы для бинарных семафоров и семафоров со счетчиками.
- •Приведите примеры использования семафоров (для решения задачи взаимного исключения, синхронизации процессов, решения задачи поддержания отношения предшествования)
- •Дайте определение тупика.
- •Сформулируйте задачи, связанные с проблемой тупика, кратко охарактеризуйте подходы к решению.
- •Дайте формальное определение системы с использованием математической (графовой) модели.
- •Дайте формальное определение заблокированного процесса, процесса, находящегося в тупике.
Дайте понятие семафора.
Семафор – это защищенная переменная, значение которой можно опрашивать и менять только при помощи специальных операций (семафорных примитивов) P и V и операции инициализации.
Двоичные (бинарные) семафоры могут принимать только значения 0 или 1 (true или false), то есть могут находиться в двух состояниях: закрыт и открыт. Считающие семафоры (семафоры со счетчиками) могут принимать целые значения. Считающий семафор открыт, если значение счетчика больше 0.
Операции P и V – это семафорные примитивы (неделимые операции), во время выполнения которых процессом к переменной-семафору нет доступа для других процессов. Если одновременно несколько процессов запрашивают выполнение операций P и/или V над одним и тем же семафором, то эти операции будут выполняться последовательно, в произвольном порядке.
Примитив P – процедура, сбрасывающая или уменьшающая значение семафора на 1, эта процедура заключает в себе потенциальное ожидание вызывающих процессов в том случае, если к моменту выполнения этой процедуры процессом соответствующий семафор закрыт.
Процедура V отрывает семафор или увеличивает значение счетчика на 1. Таким образом, вызов этой процедуры может активизировать некоторый ожидающий открытия семафора процесс.
Процедура инициализации |
Первый процесс |
Второй процесс |
procedure INIT; binary semaphore B ; begin B := 1 ; {Открыт} start(P1) ; start(P2) end INIT . |
process P1; binary semaphore B ; begin while true do begin BEFORE1 ; P(B) ; CS1 ; V(B) ; AFTER1 ; end end P1 . |
process P2; binary semaphore B ; begin while true do begin BEFORE2 ; P(B) ; CS2 ; V(B) ; AFTER2 ; end end P2 . |
Опишите семафорные примитивы для бинарных семафоров и семафоров со счетчиками.
Операции P и V – это семафорные примитивы (неделимые операции), во время выполнения которых процессом к переменной-семафору нет доступа для других процессов. Если одновременно несколько процессов запрашивают выполнение операций P и/или V над одним и тем же семафором, то эти операции будут выполняться последовательно, в произвольном порядке.
Примитив P – процедура, сбрасывающая или уменьшающая значение семафора на 1, эта процедура заключает в себе потенциальное ожидание вызывающих процессов в том случае, если к моменту выполнения этой процедуры процессом соответствующий семафор закрыт.
Процедура V отрывает семафор или увеличивает значение счетчика на 1. Таким образом, вызов этой процедуры может активизировать некоторый ожидающий открытия семафора процесс.
В зависимости от ограничений, установленных для значения счетчика считающего семафора, изменяется смысл семафорной переменной и алгоритм выполнения семафорных примитивов.
Если для счетчика допускаются только целые неотрицательные значения, то смысл его значения – счетчик количества некоторого ресурса. Процедура P – процедура запроса единицы этого ресурса, запрос может быть удовлетворен или может заблокировать процесс, выполнивший его, если количество ресурса равно 0. Процедура V – процедура освобождения единицы ресурса.
Если счетчик может принимать и отрицательные целые значения, то отрицательное значение семафора означает длину очереди процессов, попытавшихся пройти через семафор.
Операции выборки значения семафорной переменной S, ее изменения и сохранения не могут быть прерваны. Во время выполнения последовательности этих операций в процедурах P и V, вызванных одним процессом, над каким-либо семафором он недоступен для других процессов. Операция hold(S) означает перевод процесса в состояние ожидания на семафоре S и выход из P. Это ожидание не должно быть “занятым”. Для устранения занятого ожидания с каждым семафором связывается список блокирования (список процессов, ожидающих открытия семафора). Процесс, который не может продолжиться после выполнения P(S), будет заблокирован с сохранением его состояния в соответствующем S списке блокирования. Операция release(S) – выполняет проверку списка блокирования, связанного с семафором S, если этот список не пуст, то активизируется некоторый процесс из этого списка, пропускается через семафор, а значение семафора изменяется при этом соответствующим образом (бинарный семафор снова закрывается, а для семафора со счетчиком возвращенная процессом, выполнившем операцию V(S), единица ресурса передается очередному процессу из списка).
S |
Бинарный семафор |
Считающий семафор с неотрицательными значениями счетчика |
Общий считающий семафор |
P(S) |
if S = 0 then Hold(S) else S := 0 |
if S = 0 then Hold(S) else S := S – 1 |
S := S – 1; if S < 0 then Hold(S) |
V(S) |
if not Empty(S) then Release (S) else S := 1 ; |
if not Empty(S) then Release (S) else S := S + 1 ; |
S := S + 1 ; if S<= 0 then Release (S) |