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

Объект profile используется для определения распределения времени выполнения внутри блока кода.

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

Ниже представлена структура обобщенного дескриптора ресурсов в ВС:

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

состояние ресурса или опись доступных единиц ресурса;

для единичного ресурса – свободен/занят;

для составного ресурса - список доступных для распределения и использования единиц этого ресурса;

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

список процессов, которым выделен в данный момент ресурс;

ссылка на программу распределения ресурса;

прочая информация.

12, 13 ПРОБЛЕМА ВЗАИМНОГО ИСКЛЮЧЕНИЯ. ПОНЯТИЕ КРИТИЧЕСКОЙ СЕКЦИИ, ЕЁ СВОЙСТВА, УСЛОВИЯ РЕАЛИЗАЦИИ.

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

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

Требования к КС:

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

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

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

24

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

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

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

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

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

procedure INIT; common integer N; Begin N: =1; start (P1); start (P2); end; Process P1; common integer N;

Begin while true do begin BEFORE1; while N=2 do; CS1; N: =2; AFTER1; end; end; Process P2; common integer N;

Begin while true do begin BEFORE2; while N=1 do; CS2; N: =1; AFTER2; end; end;

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

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

Procedure INIT; common Boolean C1, C2;

Begin C1:=false; C2:=false; start (P1); start (P2); end; Process P1; common Boolean C1, C2;

Begin while true do begin BEFORE1; while C2 do; C1:=true; CS1; C1:=false; AFTER1; end; end;

Process P2; common Boolean C1, C2;

Begin while true do begin BEFORE2; while C1 do; C2:=true; CS2; C2:=false; AFTER2; end; end;

Если оба процесса одновременно подойдут к проверке значений флажков своих конкурентов перед входом в критическую секцию, они смогут пройти в нее

25

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

3. Алгоритм Деккера Процесс, пытающийся войти в КС, заявляет о своем намерении с помощью флажка. В

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

Procedure INIT; common Boolean C1, C2; common integer N; Begin C1:=false; C2:=false; N: =1; start (P1); start (P2); end; Process P1; common Boolean C1, C2;

Begin while true do begin BEFORE1; C1:=true; while C2 do begin if N=2 then begin C1:=false; while N=2 do; C1:=true; end; end; CS1; C1:=false; N: =2; AFTER1; end; end;

Process P2; common Boolean C1, C2;

Begin while true do begin BEFORE2; C2:=true; while C1 do begin if N=1 then begin C2:=false; while N=1 do; C2:=true; end; end; CS2; C2:=false; N: =1; AFTER2; end; end;

14 ПОНЯТИЕ СЕМАФОРА, СЕМАФОРНЫЕ ПРИМИТИВЫ, БИНАРНЫЕ И СЧИТАЮЩИЕ СЕМАФОРЫ. ПРИМЕРЫ ОБЪЕКТОВ ДИСПЕТЧЕРИЗАЦИИ В MS WINDOWS, КОТОРЫЕ МОГУТ ИСПОЛЬЗОВАТЬСЯ КАК «СЕМАФОРЫ».

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

Семафор - это защищенная переменная, значение которой можно опрашивать и менять только при помощи специальных операций (семафорных примитивов) P и V и операции инициализации.

Двоичные (бинарные) семафоры могут принимать только значения 0 или 1 (true или false), то есть могут находиться в двух состояниях: закрыт и открыт. Считающие семафоры (семафоры со счетчиками) могут принимать целые значения. Считающий семафор открыт, если значение счетчика больше 0.

Если для счетчика допускаются только целые неотрицательные значения, то смысл его значения - счетчик количества некоторого ресурса. Процедура P - процедура запроса единицы этого ресурса, запрос может быть удовлетворен или может заблокировать процесс, выполнивший его, если количество ресурса равно 0. Процедура V - процедура освобождения единицы ресурса.

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

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

Процедура V отрывает семафор или увеличивает значение счетчика на 1. Таким образом, вызов этой процедуры может активизировать некоторый ожидающий открытия семафора процесс.

Средства синхронизации WinNT.

26

1.Ожидание завершения задачи или процесса. Иногда требуется организовать ожидание окончания работы процесса или потока. WaitForSingleObject - организовывает ожидание завершения одной задачи или одного процесса. В результате выполнения этой функции вызвавший ее поток приостанавливает работу, пока указанный объект (процесс или поток) не завершит свою работу. Результат функции WAIT_OBJECT_0 – задача завершилась «естественным образом»; WAIT_TIMEOUT – завершилось время ожидания; WAIT_ABANDONED – ожидание было отменено (для объектов синхронизации типа

Mutex).

2.Синхронизация с помощью событий. Схема использования событий достаточно проста. Один из потоков процесса создает объект-событие с помощью функции CreateEvent, присваивая ему имя, которое будет доступно всем потокам активных процессов. При создании событие переводится в заданное начальное состояние. Другие потоки того же самого или других процессов могут получить описатель объекта по его имени, вызвав функцию OpenEvent. Изменить состояние объекта-события можно с помощью функций SetEvent, ResetEvent или PulseEvent. Организовать ожидание момента, когда событие перейдет в отмеченное (сигнализированное) состояние, можно с помощью функций WaitForSingleObject или WaitForMultipleObject. Если объект становится ненужным его можно закрыть с помощью функции CloseObject.

3.Объект синхронизации Mutex. Этот объект можно использовать для синхронизации задач, выполняющихся в рамках различных процессов. Как и объект-событие, мутекс может находиться в двух состояниях – отмеченном и неотмеченном. С помощью полученного описателя можно получить доступ к мутексу. Для захвата объекта используются функции WaitForSingleObject или WaitForMultipleObjects.

4.Синхронизация с помощью семафоров. Объекты-семафоры позволяют установить счетчик при организации доступа к ресурсу: возможность параллельной работы с ресурсом обеспечивается для заранее определенного ограниченного числа задач (потоков). Потоки, пытающиеся получить доступ к ресурсам сверх установленного лимита, будут переведены в состояние ожидания, пока какой-либо поток, получивший доступ к ресурсу раньше, не освободит его. Значение счетчика семафора уменьшается с помощью функций, которые позволяют захватить ресурс или организовать его ожидание.

15 ПРИМЕНЕНИЕ БИНАРНЫХ СЕМАФОРОВ ДЛЯ РЕАЛИЗАЦИИ ВЗАИМНОГО ИСКЛЮЧЕНИЯ И СИНХРОНИЗАЦИИ ПРОЦЕССОВ.

Использование семафоров значительно упрощает решение проблемы взаимного исключения. Пример синхронизации процессов с помощью семафоров:

27

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

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

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

procedure INIT;

process P1;

process P2;

binary semaphore B ;

binary semaphore B ;

binary semaphore B ;

begin

begin

begin

B := 1 ; {Открыт}

while true do

while true do

start(P1) ;

begin

begin

start(P2)

BEFORE1 ;

BEFORE2 ;

end INIT .

P(B) ;

P(B) ;

 

CS1 ;

CS2 ;

 

V(B) ;

V(B) ;

 

AFTER1 ;

AFTER2 ;

 

end

end

 

end P1 .

end P2 .

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

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

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

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

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

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

 

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

procedure INIT;

process P1;

 

process P2;

binary semaphore B ;

binary semaphore B ;

 

binary semaphore B ;

begin

begin

 

begin

B := 0 ; {Закрыт}

...

 

...

start(P1) ;

BEFORE ;

 

P(B) ; {Ожидание от P1}

start(P2)

V(B); {Разрешение для P2

}

{разрешения на выполнение}

end INIT .

{выполнить AFTER}

AFTER ;

 

...

 

...

 

end P1 .

 

end P2 .

 

28

 

 

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