- •НИУ ВШЭ – Пермь
- •Понятие информационной системы
- •Понятие корпоративной информационной системы
- •Эволюция информационных систем и технологий
- •Понятие процесса
- •Понятие ресурса
- •Развитие процессов в ИС
- •Развитие процессов в ИС
- •Развитие процессов в ИС
- •Развитие процессов в ИС
- •Развитие процессов в ИС
- •Проблема взаимного исключения: пример
- •Проблема взаимного исключения: пример
- •Проблема взаимного исключения: пример
- •Проблема взаимного исключения: пример
- •Проблема взаимного исключения: пример
- •Проблема взаимного исключения: пример
- •Проблема взаимного исключения: пример
- •Проблема взаимного исключения: пример
- •Понятие критической секции
- •Свойства критической секции
- •Свойства критической секции
- •Свойства критической секции
- •Свойства критической секции
- •Свойства критической секции
- •Условия реализации критической секции
- •Условия реализации критической секции
- •Простейший пример критической секции
- •Простейший пример критической секции
- •Простейший пример критической секции
- •Программные методы решения: вариант 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 – алгоритм Деккера
- •Недостатки программных методов
- •Современные методы решения проблемы взаимного исключения
- •Современные методы решения проблемы взаимного исключения
- •Блокирующие функции
- •Блокирующие функции
- •Блокирующие функции
- •Аппаратная поддержка выполнения блокирующих функций
- •Блокирование файлов при создании или открытии
- •Современные методы решения проблемы взаимного исключения
- •Современные методы решения проблемы взаимного исключения
- •Понятие семафора
- •Семафорные примитивы
- •Семафорные примитивы
- •Семафорные примитивы
- •Решение проблемы взаимного исключения с помощью семафоров
- •Реализация отношения предшествования с помощью семафоров
- •Реализация отношения предшествования с помощью семафоров
- •Реализация отношения предшествования с помощью семафоров
- •Объекты диспетчеризации и синхронизация процессов
- •Использованные источники:
Программные методы решения: вариант 5 – алгоритм Деккера
Процедура инициализации
procedure INIT; common boolean C1,C2 ; common integer N ; begin
C1 := false ;
C2 := false ;
N := 1 ; start(P1) ;
Устанавливается порядок входа в критическую секцию при возникновении конфликтной ситуации, когда оба процесса параллельно заявляют о попытке войти в свои критические секции
61
Первый процесс |
Второй процесс |
process P1; |
process P2; |
common boolean C1,C2 ; |
common boolean C1,C2 ; |
begin |
begin |
while true do |
while true do |
begin BEFORE1 ; |
begin BEFORE2 ; |
C1 := true ; |
C2 := true ; |
while C2 do |
while C1 do |
begin |
begin |
if N = 2 then |
if N = 1 then |
begin |
begin |
C1 := false ; |
C2 := false ; |
while N=2 do ; |
while N=1 do ; |
C1 := true ; |
C2 := true ; |
end |
end |
end ; |
end ; |
CS1 ; |
CS2 ; |
C1 := false; N := 2; |
C2 := false; N:=1; |
AFTER1 ; |
AFTER2 ; |
|
end |
end P1 . |
end P2 . |
Недостатки программных методов
1.Занятое ожидание – неэффективное использование времени процессора.
2.Сложная реализация для большего числа процессов (рассмотрите пример алгоритма Деккера для 3 и более процессов).
Основные причины ошибок:
1.Невозможность обеспечить неделимость операций проверки и модификации значений переменных.
Это приводит к нарушению требований к критической секции: не реализуется взаимное исключение или возникает тупик.
Менее серьёзные ошибки – задержки и опережающие блокировки.
62
Современные методы решения проблемы взаимного исключения
1.Блокирующие функции, операции блокирования.
2.Семафоры различных типов.
3.Транзакции.
63
Современные методы решения проблемы взаимного исключения
1.Блокирующие функции, операции блокирования.
2.Семафоры различных типов.
3.Транзакции.
64
На время выполнения операций выполняется блокирование баз
данных, отдельных таблиц, записей, файлов, блоков в файлах, … с помощью специальных команд блокирования или процедур (например, открытие файла в режиме монополизации и т.п.).
Блокирующие функции могут использоваться и для выполнения арифметических операций (inc, dec) на основе аппаратной поддержки.
Блокирующие функции
В программном интерфейсе (API) операционных систем Microsoft Windows предусмотрено несколько функций, которые просты в использовании и могут оказаться полезными для синхронизации доступа к разделяемым (общим) переменным, когда для работы с ними требуется взаимное исключение.
Функции выполняют увеличение и уменьшение на единицу значения переменной типа LONG, адрес которой передаётся им в качестве единственного параметра:
LONG InterlockedIncrement(LPLONG lpAddend); LONG InterlockedDecrement(LPLONG lpAddend);
Если одна задача (поток процесса) приступила с их помощью к изменению значения переменной, то другая задача не сможет выполнить изменение этой же переменной до тех пор, пока первая задача не завершит такое изменение. В результате при использовании этих функций можно быть
65 уверенным, что изменение переменной будет выполнено правильно.
Блокирующие функции
Значение, возвращаемое функциями
InterlockedIncrement и InterlockedDecrement,
равно нулю, если в результате изменений значение переменной стало равно нулю; если в результате увеличения или уменьшения значение переменной стало больше или меньше нуля, то эти функции возвращают, соответственно, значение, большее или меньшее нуля.
Полученное значение можно использовать только для сравнения, так как абсолютная величина возвращённого значения может быть не равна новому значению изменяемой переменной.
66
Блокирующие функции
Операция присваивания глобальной переменной нового значения, если она выполняется несколькими задачами одновременно, таит в себе ту же опасность.
Чтобы избежать такой опасности, в API Microsoft Windows предусмотрена функция InterlockedExchange:
LONG InterlockedExchange(
LPLONG lpTarget, // адрес изменяемой переменной
LONG lNewValue ); // новое значение для переменной
Эта функция записывает значение lNewValue по адресу lpTarget. При этом гарантируется, что операция не будет прервана другой задачей, выполняющейся в рамках того же процесса. Функция InterlockedExchange
67 возвращает старое значение изменяемой переменной.
Аппаратная поддержка выполнения блокирующих функций
Форматы команд процессоров Intel (и совместимых с ними) предусматривают возможность использования различных префиксов, в частности перед командой может быть записан префикс блокирования шины на время выполнения операции:
lock Inc A ; увеличение значения A на 1 в режиме блокирования шины lock Dec A ; уменьшение значения A на 1 в режиме блокирования шины
В многопроцессорной системе префикс lock гарантирует, что в то время, пока процессор, выполняющий команду, считывает значение переменной из памяти, вычисляет новое значение и записывает его назад в память, другие процессоры не смогут обратиться к памяти, т.к. шина в это время будет заблокирована.
С системе команд процессоров Intel есть также команды обмена значений, заданных в качестве операндов, сравнения и обмена, проверки и установки…
68
Блокирование файлов при создании или открытии
Создание и открытие файла через API производится одной функцией CreateFile:
HANDLE CreateFile (LPCTSTR ipFileName, DWORD dwDesiredAccess. DWORD dwShareMode. LPSECURITY_ATTRIBUTES ipSecurityAttributes,
DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes. HANDLE hTemplateFile)
Параметр dwShareMode задаёт режим разделения файлов между разными процессами, данный параметр может принимать следующие значения:
|
0 – монополизация доступа к файлу; |
|
FILE_SHARE_READ = 0000000th – другие процессы могут открыть файл, но |
|
только по чтению, запись в файл монополизирована процессом, открывшим |
|
файл; |
|
FILESHAREWRITE = 00000002b – другие процессы могут открыть файл, но только |
|
по записи, чтение из файла монополизировано процессом, открывшим файл; |
|
FILE_SHARE_READ+FILE_SHARE_WRITE = 00000003b – другие процессы могут |
69 |
открывать файл по чтению-записи. |
Таким образом, доступ к файлу может быть заблокирован… |
Современные методы решения проблемы взаимного исключения
1.Блокирующие функции, операции блокирования.
2.Семафоры различных типов.
3.Транзакции.
70
Семафор – это защищённая переменная, значение которой можно опрашивать и менять только при помощи специальных операций (семафорных примитивов) P и V и операции инициализации.
Семафоры могут находиться в двух состояниях: закрыт и открыт.
Двоичные (бинарные) семафоры могут
принимать только значения 0 или 1 (true или false). Считающие семафоры (семафоры со счётчиками) могут
принимать целые значения. Считающий семафор открыт, если значение счётчика больше 0.
