Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты СППО.doc
Скачиваний:
19
Добавлен:
07.06.2015
Размер:
463.36 Кб
Скачать
  1. Понятие параллельных процессов. Синхронизация и взаимодействие параллельных процессов. Взаимоисключение. Критические участки. Блокирующие переменные.

Асинхронный параллельный процесс – это такой процесс, состояние которого не зависит от состояния другого параллельного процесса (ПП).

Синхронный ПП – это такой процесс, состояние которого зависит от состояния взаимодействующих с ним ПП.

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

“взаимного исключения”;синхронизации через сигналы; обмена информацией (сообщениями).

Взаимное исключение предполагает запрет доступа к общим ресурсам для всех ПП, кроме времени его работы с этими ресурсами.

Синхронизация подразумевает обмен сигналами между двумя или несколькими процессами по установленному протоколу.

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

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

________________________________________________________________________________________

  1. Примеры реализации взаимоисключения.

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

N –н ачальное значение этой переменной должно быть установлено при инициализации системы (до запуска процессов P1 и P2). Предположим, что первым в критическую секцию должен быть допущен процесс P1.

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

Первый процесс

Второй процесс

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 .

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

Минус: процесс имеющий право на вход в свою критическую секцию, но пока не вошедший в нее блокирует вход в критические секции другим процессам, которые могут быть готовы к обработке общих данных, но не могут получить к ним доступ