- •НИУ ВШЭ – Пермь
- •Понятие информационной системы
- •Понятие корпоративной информационной системы
- •Эволюция информационных систем и технологий
- •Понятие процесса
- •Понятие ресурса
- •Развитие процессов в ИС
- •Развитие процессов в ИС
- •Развитие процессов в ИС
- •Развитие процессов в ИС
- •Развитие процессов в ИС
- •Проблема взаимного исключения: пример
- •Проблема взаимного исключения: пример
- •Проблема взаимного исключения: пример
- •Проблема взаимного исключения: пример
- •Проблема взаимного исключения: пример
- •Проблема взаимного исключения: пример
- •Проблема взаимного исключения: пример
- •Проблема взаимного исключения: пример
- •Понятие критической секции
- •Свойства критической секции
- •Свойства критической секции
- •Свойства критической секции
- •Свойства критической секции
- •Свойства критической секции
- •Условия реализации критической секции
- •Условия реализации критической секции
- •Простейший пример критической секции
- •Простейший пример критической секции
- •Простейший пример критической секции
- •Программные методы решения: вариант 1
- •Программные методы решения: вариант 1
- •Программные методы решения: вариант 1
- •Программные методы решения: вариант 2
- •Программные методы решения: вариант 2
- •Программные методы решения: вариант 2
- •Программные методы решения: вариант 2
- •Программные методы решения: вариант 2
- •Программные методы решения: вариант 2
- •Программные методы решения: вариант 2
- •Программные методы решения: вариант 2
- •Программные методы решения: вариант 2
- •Программные методы решения: вариант 3
- •Программные методы решения: вариант 3
- •Программные методы решения: вариант 3
- •Программные методы решения: вариант 3
- •Программные методы решения: вариант 3
- •Программные методы решения: вариант 3
- •Программные методы решения: вариант 3
- •Программные методы решения:
- •Программные методы решения: вариант 5 – алгоритм Деккера
- •Программные методы решения: вариант 5 – алгоритм Деккера
- •Программные методы решения: вариант 5 – алгоритм Деккера
- •Программные методы решения: вариант 5 – алгоритм Деккера
- •Программные методы решения: вариант 5 – алгоритм Деккера
- •Программные методы решения: вариант 5 – алгоритм Деккера
- •Программные методы решения: вариант 5 – алгоритм Деккера
- •Программные методы решения: вариант 5 – алгоритм Деккера
- •Программные методы решения: вариант 5 – алгоритм Деккера
- •Программные методы решения: вариант 5 – алгоритм Деккера
- •Программные методы решения: вариант 5 – алгоритм Деккера
- •Недостатки программных методов
- •Современные методы решения проблемы взаимного исключения
- •Современные методы решения проблемы взаимного исключения
- •Блокирующие функции
- •Блокирующие функции
- •Блокирующие функции
- •Аппаратная поддержка выполнения блокирующих функций
- •Блокирование файлов при создании или открытии
- •Современные методы решения проблемы взаимного исключения
- •Современные методы решения проблемы взаимного исключения
- •Понятие семафора
- •Семафорные примитивы
- •Семафорные примитивы
- •Семафорные примитивы
- •Решение проблемы взаимного исключения с помощью семафоров
- •Реализация отношения предшествования с помощью семафоров
- •Реализация отношения предшествования с помощью семафоров
- •Реализация отношения предшествования с помощью семафоров
- •Объекты диспетчеризации и синхронизация процессов
- •Использованные источники:
Современные методы решения проблемы взаимного исключения
1.Блокирующие функции, Транзакция – это последовательность операции блокирования. операций, которая либо выполняется от
2. |
Семафоры различных |
начала до конца, либо (при |
|
невозможности завершить все операции |
|||
|
типов. |
||
|
последовательности) выполняется |
||
|
Транзакции. |
||
3. |
откат (roll back) на начало этой |
||
|
|
транзакции. |
|
|
|
Таким образом, вся последовательность |
|
|
|
выполняется как одна неделимая |
|
|
|
операция: |
|
|
|
begin transaction |
|
|
|
Последовательность |
|
|
|
операций |
|
71 |
|
end transaction |
|
|
|
Понятие семафора
Семафор – это защищённая переменная, значение которой можно
опрашивать и менять только при помощи специальных операций P и V (семафорных примитивов) и операции инициализации.
Семафоры могут находиться в двух состояниях:
закрыт и открыт.
Состояния определяются значениями:
•Двоичные (бинарные) семафоры могут принимать только значения 0 (закрыт) или 1 (открыт).
•Считающие семафоры (семафоры со счётчиками) могут принимать целые значения. Считающий семафор открыт, если значение счётчика больше 0, и закрыт в противном случае.
72
Семафорные примитивы
Операции P и V – это семафорные примитивы (неделимые операции), во время выполнения которых процессом к
переменной-семафору нет доступа для других процессов.
Примитив P – процедура, сбрасывающая в 0 или уменьшающая
значение семафора на 1, если семафор открыт; эта процедура заключает в себе потенциальное ожидание вызывающих
процессов в том случае, если соответствующий семафор закрыт к моменту выполнения этой процедуры процессом.
Процедура V отрывает семафор или увеличивает значение
счётчика на 1. Таким образом, вызов этой процедуры может активизировать некоторый процесс, ожидающий открытия
семафора.
73
Семафорные примитивы
SБинарный семафор
P(S) |
if S = 0 |
|
then Hold(S) |
|
else S := 0 |
V(S) |
if not Empty(S) |
|
then Release (S) |
|
else S := 1 ; |
Считающий семафор с неотрицательными значениями счётчика
if S = 0
then Hold(S) else S := S – 1
if not Empty(S) then Release (S) else S := S + 1 ;
Общий
считающий
семафор
S := S – 1; if S < 0
then Hold(S)
S := S + 1 ; if S<= 0
then Release (S)
Процедура Hold – задержка на семафоре (перевод процесса в состояние ожидания).
Функция Empty – функция проверки очереди процессов, ожидающих на 74 семафоре.Процедура Release – освобождение (активация) первого процесса в очереди.
Семафорные примитивы
SБинарный семафор
P(S) |
if S = 0 then |
|
hold(S); |
|
S := 0 |
V(S) |
S := 1 ; |
|
release (S) |
Считающий семафор с неотрицательными значениями счётчика
if S = 0 then hold(S);
S := S – 1
S := S + 1 ; release (S)
|
Будет ли этот вариант «примитивов» |
|
верным? |
|
Чем он отличается от описанного |
75 |
выше? |
|
Общий
считающий
семафор
S := S – 1; if S < 0 then
hold(S)
S := S + 1 ; release (S)
Решение проблемы взаимного исключения с помощью семафоров
Процедура
инициализации
procedure INIT; binary semaphore B ; begin
B := 1 ; {Открыт} start(P1) ;
start(P2) end INIT .
Первый процесс |
Второй процесс |
process P1; |
process P2; |
binary semaphore B ; |
binary semaphore B ; |
begin |
begin |
while true do |
while true do |
begin |
begin |
BEFORE1 ; |
BEFORE2 ; |
P(B) ; {вход в КС} |
P(B) ; {вход в КС} |
CS1 ; |
CS2 ; |
V(B) ; {выход из КС} |
V(B) ; {выход из КС} |
AFTER1 ; |
AFTER2 ; |
end |
end |
end P1 . |
end P2 . |
76
Реализация отношения предшествования с помощью семафоров
Отношение предшествования реализуется, если есть функциональная зависимость между процессами.
Первая задача: задача «писателя и читателя» (единичная запись).
Процедура
инициализации
procedure INIT; binary semaphore B ; begin
B := 0 ; {Закрыт: }
{ запрет читателю |
} |
{ на чтение и |
} |
{обработку данных }
{ до их подготовки |
} |
{ писателем |
} |
|
start(P1) ; |
|
start(P2) |
77 |
end INIT . |
|
Первый процесс |
Второй процесс |
|
(писатель) |
(читатель) |
|
process P1; |
process P2; |
|
binary semaphore B ; |
binary semaphore B ; |
|
begin |
begin |
|
... |
... |
|
BEFORE; {подготовка и запись} |
P(B) ; {Ожидание от P1 |
} |
{подготовленных данных} |
{разрешения на выполнение} |
|
V(B); {Разрешение для P2 } |
AFTER ; {чтение и обработка} |
|
{выполнить AFTER } |
{прочитанных данных} |
|
... |
... |
|
end P1 . |
end P . |
|
|
2 |
|
Реализация отношения предшествования с помощью семафоров
Вторая задача: задача «писателя и читателя» при работе с циклическим буфером
Процедура
инициализации
procedure INIT; binary semaphore B ;
integer semaphore E, F; begin
B := 1 ; {Буфер открыт} E := N ; {Все записи}
{в буфере пусты} F := 0 ; {В буфере нет}
{ни одной записи} start(P1) ;
start(P2) end INIT .
78
Первый процесс
(писатель) 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 .
Реализация отношения предшествования с помощью семафоров
Вторая задача: задача «писателя и читателя» при работе с циклическим буфером
Процедура |
|
Первый процесс |
|
Второй процесс |
|
инициализации |
|
(писатель) |
|
(читатель) |
|
procedure INIT; |
|
process P1; |
process P2; |
||
binary semaphore B |
; |
binary semaphore B ; |
binary semaphore B ; |
||
integer semaphore E, F; |
integer semaphore E, F; |
integer semaphore E, F; |
|||
begin |
|
|
|
do |
|
B := 1 ; {Буфер |
Будет ли это решение эффективным? |
||||
E := N ; {Все |
|
||||
{в буфере |
Как его можно усовершенствовать? |
|
|||
F := 0 ; {В буфере |
|
|
|
|
|
{ни одной |
|
|
|
|
|
start(P1) ; |
|
|
write_record_to_buffer ; |
V(B); |
record_from_buffer; |
start(P2) |
|
|
|||
end INIT . |
|
V(B); |
V(E); |
|
|
|
|
|
V(F); |
process_new_record ; |
|
|
|
|
... |
... |
|
|
|
|
end |
end |
|
79 |
|
|
end P1 . |
end P2 . |
|
|
|
|
|
|
|
Объекты диспетчеризации и синхронизация процессов
Объекты диспетчеризации – это объекты, влияющие на распределение времени процессора. Основной объект диспетчеризации – поток (thread object): время процессора в современных системах выделяется не программе (процессу) в целом, а отдельным задачам (потокам), которые в нём выполняются параллельно. Первичный поток порождается
автоматически. В системах имеется несколько типов объектов, реализующих семафоры: mutex object, event object, semaphore object, mutant
object. На каждом из этих объектов можно организовать ожидание.
Для организации ожидания (входа в критическую секцию, получения доступа к ресурсам…) используются функции
WaitForSingleObject и WaitForMultipleObject,
С помощью их параметров можно задать режим ожидания, ограничить его время. Результат, возвращаемый функциями, позволяет проверить, было ли ожидание «успешным» или завершилось по timeout. Это позволяет
80 предотвратить «смертельную блокировку», обработать ситуацию.
