Проблема взаимного исключения.pptx
- Количество слайдов: 94
НИУ ВШЭ – Пермь Факультет бизнес-информатики Кафедра информационных технологий в бизнесе Проблема взаимного исключения Материалы курса «Информатика, математическая логика и теория алгоритмов» Лядова Л. Н. Пермь 2013
Понятие процесса 2 Информационная система (ИС) – это комплекс ресурсов, технологий получения и обработки данных, поддержания их в актуальном и непротиворечивом состоянии. Обработка выполняется программами, использующими устройства, данные, … Процесс – это экземпляр программы, запущенной на выполнение (или программа в стадии выполнения). Процесс представляет собой всю совокупность действий, связанных с исполнением программы процессором. Понятия “процесс” и “процессор” неразрывно связаны друг с другом: исполнителем вычислительного процесса является процессор. Процессор – устройство, способное автоматически выполнять действия в соответствии с программой, хранящейся в памяти, непосредственно доступной этому устройству. Таким образом, для каждого процесса процессор и память – это основные ресурсы, без наличия и выделения которых развитие процесса невозможно.
Понятие ресурса 3 Ресурс – это объект в составе системы, обладающий свойством “полезности” (ресурс необходим его потребителям, в роли которых выступают процессы, запрашивающие ресурсы для своего выполнения). Основной количественной характеристикой ресурса является его ёмкость (объем, количество единиц в ВС). Ресурсы исчерпаемы. Все компоненты ИС предназначены для организации вычислительного процесса, поэтому ИС можно представить как ограниченный набор функциональных элементов (программ, устройств, данных), обладающих потенциальными возможностями выполнения с их помощью или над ними действий, связанных с обработкой, хранением и передачей данных (информации), таким образом, ИС представляет собой набор, совокупность ресурсов.
Подготовка к выполнению и выполнение программы Алгоритм + + Структуры данных = … Программа на ЯВУ 4 Компилятор Как выполняется программа (развивается процесс)? Библиотеки Объектный код Компоновщик (редактор связей) Загрузка Исполняемый модуль
Развитие процессов в ИС При выполнении процесса в ВС он проходит ряд дискретных состояний, связь которых можно представить с помощью графа: Порождение 5 Готовность Создание виртуального процессора для выполнения процесса Активность Завершение Ожидание
Развитие процессов в ИС При выполнении процесса в ВС он проходит ряд дискретных состояний, связь которых можно представить с помощью графа: Ожидание выделения реального процессора Порождение Готовность Активность Завершение 6 Ожидание
Развитие процессов в ИС При выполнении процесса в ВС он проходит ряд дискретных состояний, связь которых можно представить с помощью графа: Порождение Готовность Активность Завершение 7 Ожидание Выполнение последовательности команд программы на процессоре
Развитие процессов в ИС При выполнении процесса в ВС он проходит ряд дискретных состояний, связь которых можно представить с помощью графа: Порождение Готовность Активность Завершение 8 Ожидание Запрос ресурса (файла, памяти и т. п. ) или услуги (системной функции: вводвывод, передача данных по линии связи и т. п. )
Развитие процессов в ИС При выполнении процесса в ВС он проходит ряд дискретных состояний, связь которых можно представить с помощью графа: Что, если параллельно с одними и теми же ресурсами работают несколько процессов, выполняющихся на Порождение Активность Готовность Ожидание разных процессорах? Завершение 9
Проблема взаимного исключения: пример В ВС существует несколько процессов P 1, P 2, . . . , Pn, каждый из которых увеличивает значение разделяемой (общей) переменной C (например, выполняются программы, обслуживающие некоторые запросы, и требуется считать общее количество выполненных в ВС запросов). Таким образом, в каждой из выполняющихся программ должны быть операторы вида C : = C + 1. 10
Проблема взаимного исключения: пример 11 Увеличение значения счётчика C выполняется с помощью последовательности из трёх (как минимум) операций: чтения (выборки из общей памяти или из общего файла) текущего значения переменной, увеличения значения этой переменной на 1 и сохранения (записи в память или в файл) увеличенного значения: read(C); inc(C); write(C). Эта последовательность операций выполняется каждым из процессов в ИС, причём процессы выполняются независимо друг от друга, поэтому неизвестен заранее порядок, в котором они подойдут к выполнению этих действий.
Проблема взаимного исключения: пример Таким образом возможна ситуация: Порядок выполнения операций процессами Процесс 2 3 4 Pi read(C) inc(C) write(C) . . . Pj 12 1 . . . read(C) inc(C) write(C)
Проблема взаимного исключения: пример Таким образом возможна ситуация: C = 100 read(C); inc(C); write(C). 13 read(C); inc(C); write(C). … read(C); inc(C); write(C).
Проблема взаимного исключения: пример Таким образом возможна ситуация: C = 100 read(C); inc(C); write(C). C = 101 14 read(C); inc(C); write(C). … read(C); inc(C); write(C).
Проблема взаимного исключения: пример Таким образом возможна ситуация: C = 101 read(C); inc(C); write(C). C = 101 15 … read(C); inc(C); write(C).
Проблема взаимного исключения: пример Таким образом возможна ситуация: C = 101 read(C); inc(C); write(C). 16 read(C); inc(C); write(C). … read(C); inc(C); write(C).
Проблема взаимного исключения: пример Взаимное исключение необходимо в том случае, когда несколько процессов работают параллельно с разделяемыми (общими) данными, совместное использование которых может привести к их разрушению или к конфликтной ситуации. C = 101 read(C); inc(C); write(C). 17 read(C); inc(C); write(C). … read(C); inc(C); write(C).
Понятие критической секции Критическая секция (интервал, участок) – это последовательность команд программы, операции которой связаны с обращением к разделяемым ресурсам, причём параллельное выполнение несколькими процессами действий, заданных в критических секциях, может привести к разрушению этих ресурсов или получению неверного результата. Каждая критическая секция требует реализации взаимного исключения по отношению к одному конкретному разделяемому ресурсу (единице данных: переменной в общей памяти, целому файлу или записи в файле и т. п. ), который выступает в качестве последовательно используемого, требующего монопольного доступа ресурса. 18
Свойства критической секции На критическую секцию, связанную с доступом к какому-либо разделяемому несколькими процессами информационному ресурсу, налагаются следующие требования: 1) главное требование – взаимное исключение; 2) ни один процесс не должен ждать бесконечно долго входа в критическую секцию; 3) ни один процесс не может находиться в своей критической секции бесконечно долго; 4) никакой процесс, находящийся вне своей критической секции, не должен задерживать выполнение других процессов, ожидающих входа в свои критические секции. 19
Свойства критической секции 20 На критическую секцию, связанную с доступом к какому-либо разделяемому несколькими процессами информационному ресурсу, налагаются следующие требования: 1) главное требование – взаимное исключение: в любой момент времени только один процесс может находиться в своей критической секции по данному ресурсу; 2) ни один процесс не должен ждать бесконечно долго входа в критическую секцию; 3) ни один процесс не может находиться в своей критической секции бесконечно долго; 4) никакой процесс, находящийся вне своей критической секции, не должен задерживать выполнение других процессов, ожидающих входа в свои критические секции.
Свойства критической секции 21 На критическую секцию, связанную с доступом к какому-либо разделяемому несколькими процессами информационному ресурсу, налагаются следующие требования: 1) главное требование – взаимное исключение; 2) ни один процесс не должен ждать бесконечно долго входа в критическую секцию: реализация взаимного исключения не должна приводить к ошибкам или невозможности выполнения процессами своих функций – взаимное исключение только устанавливает порядок доступа к общим ресурсам, исключающий их разрушение; 3) ни один процесс не может находиться в своей критической секции бесконечно долго; 4) никакой процесс, находящийся вне своей критической секции, не должен задерживать выполнение других процессов, ожидающих входа в свои критические секции.
Свойства критической секции На критическую секцию, связанную с доступом к какому-либо разделяемому несколькими процессами информационному ресурсу, налагаются следующие требования: 1) главное требование – взаимное исключение; 2) ни один процесс не должен ждать бесконечно долго входа в критическую секцию; 3) ни один процесс не может находиться в своей критической секции бесконечно долго: это следствие предыдущего требования – все процессы в течение приемлемого времени должны получить доступ к разделяемым данным для выполнения своих функций; 4) никакой процесс, находящийся вне своей критической секции, не должен задерживать выполнение других процессов, ожидающих входа в свои критические секции. 22
Свойства критической секции На критическую секцию, связанную с доступом к какому-либо разделяемому несколькими процессами информационному ресурсу, налагаются следующие требования: 1) главное требование – взаимное исключение; 2) ни один процесс не должен ждать бесконечно долго входа в критическую секцию; 3) ни один процесс не может находиться в своей критической секции бесконечно долго; 4) никакой процесс, находящийся вне своей критической секции, не должен задерживать выполнение других процессов, ожидающих входа в свои критические секции: не допускается «захват» ресурсов «заранее» , «про запас» , т. е. ресурсы запрашиваются тогда, когда они необходимы для выполнения процессами своих функций. 23
Условия реализации критической секции 24 Относительно режима работы с разделяемыми информационными ресурсами сделаны следующие предположения: • относительные скорости процессов неизвестны; • программа может останавливаться только вне её критической секции; • операции считывания и записи разделяемых данных неделимы; • процессы не имеют приоритетов, связанных с доступом к общим данным (то есть нет приоритетов на вход в критические секции) или они неизвестны; • одновременные обращения к одним и тем же данным для выполнения операции чтения или записи более чем одного процессора приведут к последовательным обращениям в неустановленном порядке.
Условия реализации критической секции 25 Относительно режима работы с разделяемыми информационными ресурсами сделаны следующие предположения: • относительные скорости процессов неизвестны; • программа может останавливаться только вне её критической секции; • операции считывания и записи разделяемых данных неделимы; • процессы не имеют приоритетов, связанных с доступом к общим данным (то есть нет приоритетов на вход в критические секции) или они неизвестны; • одновременные обращения к одним и тем же данным для выполнения операции чтения или записи более чем одного процессора приведут к последовательным обращениям в неустановленном порядке.
Простейший пример критической секции process Pi; begin while true do begin BEFOREi; {Операторы, предшествующие критической секции } CSi; {Операторы критической секции } AFTERi; {Операторы, следующие за критической секцией } end Pi. 26
Простейший пример критической секции 27 process Pi; begin while true do begin BEFOREi; Вход в критическую секцию – как реализовать? CSi; Выход из критической секции – как реализовать? AFTERi; end Pi.
Простейший пример критической секции process Pi; Проверка состояния begin критической секции (КС) и организация ожидания, while true do если она занята begin BEFOREi; Вход в критическую секцию – как реализовать? CSi; Выход из критической секции – как реализовать? AFTERi; Освобождение КС или end активизация ожидающего входа в end Pi. 28 неё процесса
Программные методы решения: вариант 1 Процедура инициализации procedure INIT; common integer N ; begin N : = 1 ; start(P 1) ; start(P 2) end INIT. 29 Устанавливает очерёдность выполнения критической секции. Все ли требования к Первый процесс Второй процесс критической секции process P 1; process P 2; выполняются? common integer N ; begin while true do begin BEFORE 1 ; while N = 2 do ; CS 1 ; N : = 2 ; AFTER 1 ; end P 1. common integer N ; begin while true do begin BEFORE 2 ; while N = 1 do ; CS 2 ; N : = 1 ; AFTER 2 ; end P 2.
Программные методы решения: вариант 1 Процедура инициализации procedure INIT; common integer N ; begin N : = 1 ; start(P 1) ; start(P 2) end INIT. 30 Первый процесс process P 1; common integer N ; begin while true do begin BEFORE 1 ; while N = 2 do ; CS 1 ; N : = 2 ; AFTER 1 ; end P 1. Второй процесс process P 2; common integer N ; begin while true do begin BEFORE 2 ; while N = 1 do ; CS 2 ; N : = 1 ; AFTER 2 ; end P 2.
Программные методы решения: вариант 1 Процедура инициализации procedure INIT; common integer N ; begin N : = 1 ; start(P 1) ; start(P 2) end INIT. 31 Может оказаться, что процесс, не требующий монопольного использования ресурса, Первый процесс Второй процесс блокирует работу другого процесса, которому необходимо process P 1; process P 2; выполнить критическую секцию common integer N ; begin while true do begin BEFORE 1 ; while N = 2 do ; CS 1 ; N : = 2 ; AFTER 1 ; end P 1. common integer N ; begin while true do begin BEFORE 2 ; while N = 1 do ; CS 2 ; N : = 1 ; AFTER 2 ; end P 2.
Программные методы решения: вариант 2 Процедура инициализации procedure INIT; common boolean C 1, C 2 ; begin C 1 : = false ; C 2 : = false ; start(P 1) ; start(P 2) end INIT. 32 Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; while C 2 do ; C 1 : = true ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; while C 1 do ; C 2 : = true ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 2 Процедура инициализации procedure INIT; common boolean C 1, C 2 ; begin C 1 : = false ; C 2 : = false ; start(P 1) ; start(P 2) end INIT. 33 Устанавливается признак занятости критической секции. Все ли требования к Первый процесс Второй процесс критической секции выполняются? process P ; 1 common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; while C 2 do ; C 1 : = true ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. 2 common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; while C 1 do ; C 2 : = true ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 2 Процедура инициализации procedure INIT; common boolean C 1, C 2 ; begin C 1 : = false ; C 2 : = false ; start(P 1) ; start(P 2) end INIT. 34 Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; while C 2 do ; C 1 : = true ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; while C 1 do ; C 2 : = true ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 2 Процедура инициализации procedure INIT; common boolean C 1, C 2 ; begin C 1 : = false ; C 2 : = false ; start(P 1) ; start(P 2) end INIT. 35 Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; while C 2 do ; C 1 : = true ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; while C 1 do ; C 2 : = true ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 2 Процедура инициализации procedure INIT; common boolean C 1, C 2 ; begin C 1 : = false ; C 2 : = false ; start(P 1) ; start(P 2) end INIT. 36 Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; while C 2 do ; C 1 : = true ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; while C 1 do ; C 2 : = true ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 2 Процедура инициализации procedure INIT; common boolean C 1, C 2 ; begin C 1 : = false ; C 2 : = false ; start(P 1) ; start(P 2) end INIT. 37 Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; while C 2 do ; C 1 : = true ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; while C 1 do ; C 2 : = true ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 2 Процедура инициализации procedure INIT; common boolean C 1, C 2 ; begin C 1 : = false ; C 2 : = false ; start(P 1) ; start(P 2) end INIT. 38 Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; while C 2 do ; C 1 : = true ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; while C 1 do ; C 2 : = true ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 2 Процедура инициализации procedure INIT; common boolean C 1, C 2 ; begin C 1 : = false ; C 2 : = false ; start(P 1) ; start(P 2) end INIT. 39 Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; while C 2 do ; C 1 : = true ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; while C 1 do ; C 2 : = true ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 2 Процедура Первый процесс инициализации Процессы параллельно procedure INIT; process P 1; вошли в критическую common boolean C 1, C 2 ; секцию! begin C 1 : = false ; while true do C 2 : = false ; begin start(P 1) ; BEFORE 1 ; start(P 2) while C 2 do ; end INIT. C 1 : = true ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. 40 Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; while C 1 do ; C 2 : = true ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 3 Процедура инициализации procedure INIT; common boolean C 1, C 2 ; begin C 1 : = false ; C 2 : = false ; start(P 1) ; start(P 2) end INIT. 41 Устанавливается признак намерения занять критическую секцию. Первый процесс Второй процесс Все ли требования к критической секции process P 1; process P 2; выполняются? common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; BEFORE 2 ; C 1 : = true ; C 2 : = true ; while C 2 do ; while C 1 do ; CS 1 ; CS 2 ; C 1 : = false ; C 2 : = false ; AFTER 1 ; AFTER 2 ; end end P 1. end P 2.
Программные методы решения: вариант 3 Процедура инициализации procedure INIT; common boolean C 1, C 2 ; begin C 1 : = false ; C 2 : = false ; start(P 1) ; start(P 2) end INIT. 42 Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 3 Процедура инициализации procedure INIT; common boolean C 1, C 2 ; begin C 1 : = false ; C 2 : = false ; start(P 1) ; start(P 2) end INIT. 43 Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 3 Процедура инициализации procedure INIT; common boolean C 1, C 2 ; begin C 1 : = false ; C 2 : = false ; start(P 1) ; start(P 2) end INIT. 44 Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 3 Процедура инициализации procedure INIT; common boolean C 1, C 2 ; begin C 1 : = false ; C 2 : = false ; start(P 1) ; start(P 2) end INIT. 45 Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 3 Процедура Взаимное блокирование – Первый процесс инициализации процессы никогда не войдут procedure INIT; process P 1; в критическую секцию и не common boolean C 1, C 2 ; смогут продолжить begin выполнение – C 1 : = false ; while true do «смертельные объятия» ! C 2 : = false ; begin start(P 1) ; BEFORE 1 ; start(P 2) C 1 : = true ; end INIT. while C 2 do ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. 46 Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 3 Процедура Первый процесс инициализации Общая проблема всех procedure INIT; process P 1; методов – «занятое commonожидание» - время boolean C 1, C 2 ; common boolean C 1, C 2 ; begin процессора тратится begin C 1 : = false ; while true do впустую C 2 : = false ; begin start(P 1) ; BEFORE 1 ; start(P 2) C 1 : = true ; end INIT. while C 2 do ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. 47 Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 4 Процессы «усыпляются» на случайные Процедура инициализации procedure INIT; common boolean C 1, C 2 ; begin C 1 : = false ; C 2 : = false ; start(P 1) ; start(P 2) end INIT. 48 интервалы времени, после чего повторяют попытки входа, «переждав» соперника. Используется специальная системная Первый процесс Второй процесс функция, выводящая на время process P 1 процессы из конкуренции за ресурсы. ; process P 2; common boolean C 1, C 2 ; Процессор не занят на время ожидания begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do begin C 1 : = false ; delay(T 1) ; C 1 : = true ; end ; CS 1 ; C 1 : = false ; AFTER 1 ; end P 1. begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do begin C 2 : = false ; delay(T 2) ; C 2 : = true ; end ; CS 2 ; C 2 : = false ; AFTER 2 ; end P 2.
Программные методы решения: вариант 5 – алгоритм Деккера Процедура инициализации procedure INIT; common boolean C 1, C 2 ; common integer N ; begin C 1 : = false ; C 2 : = false ; N : = 1 ; start(P 1) ; start(P 2) end INIT. 49 Первый процесс Второй процесс process P 1; process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; begin BEFORE 2 ; C 1 : = true ; C 2 : = true ; Устанавливается порядок while C 2 do входа в критическую секцию while C 1 do begin при возникновении if N = 2 then if N = 1 then конфликтной ситуации, когда begin C 1 : = false ; C 2 : = false ; оба процесса параллельно while N=2 do ; while N=1 do ; заявляют о попытке войти в C 1 : = true ; C 2 : = true ; свои критические секции end end ; CS 1 ; CS 2 ; C 1 : = false; N : = 2; C 2 : = false; N: =1; AFTER 1 ; AFTER 2 ; end end P 1. end P 2.
Программные методы решения: вариант 5 – алгоритм Деккера Процедура инициализации procedure INIT; common boolean C 1, C 2 ; common integer N ; begin C 1 : = false ; C 2 : = false ; N : = 1 ; start(P 1) ; start(P 2) Устанавливается порядок end INIT. входа в критическую секцию Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do begin if N ≠ 1 then begin C 1 : = false ; при возникновении while N=2 do ; конфликтной ситуации, когда C 1 : = true ; оба процесса параллельно end ; заявляют о попытке войти в CS 1 ; свои критические секции C 1 : = false; N : = 2; AFTER 1 ; end 50 end P 1. Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do begin if N ≠ 2 then begin C 2 : = false ; while N=1 do ; C 2 : = true ; end ; CS 2 ; C 2 : = false; N: =1; AFTER 2 ; end P 2.
Программные методы решения: вариант 5 – алгоритм Деккера Процедура инициализации procedure INIT; common boolean C 1, C 2 ; common integer N ; begin C 1 : = false ; C 2 : = false ; N : = 1 ; start(P 1) ; start(P 2) Устанавливается порядок end INIT. входа в критическую секцию Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do begin if N ≠ 1 then begin C 1 : = false ; при возникновении while N=2 do ; конфликтной ситуации, когда C 1 : = true ; оба процесса параллельно end ; заявляют о попытке войти в CS 1 ; свои критические секции C 1 : = false; N : = 2; AFTER 1 ; end P 1. 51 Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do begin if N ≠ 2 then begin C 2 : = false ; while N=1 do ; C 2 : = true ; end ; CS 2 ; C 2 : = false; N: =1; AFTER 2 ; end P 2.
Программные методы решения: вариант 5 – алгоритм Деккера Процедура инициализации procedure INIT; common boolean C 1, C 2 ; common integer N ; begin C 1 : = false ; C 2 : = false ; N : = 1 ; start(P 1) ; start(P 2) Устанавливается порядок end INIT. входа в критическую секцию Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do begin if N ≠ 1 then begin C 1 : = false ; при возникновении while N=2 do ; конфликтной ситуации, когда C 1 : = true ; оба процесса параллельно end ; заявляют о попытке войти в CS 1 ; свои критические секции C 1 : = false; N : = 2; AFTER 1 ; end P 1. 52 Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do begin if N ≠ 2 then begin C 2 : = false ; while N=1 do ; C 2 : = true ; end ; CS 2 ; C 2 : = false; N: =1; AFTER 2 ; end P 2.
Программные методы решения: вариант 5 – алгоритм Деккера Процедура инициализации procedure INIT; common boolean C 1, C 2 ; common integer N ; begin C 1 : = false ; C 2 : = false ; N : = 1 ; start(P 1) ; start(P 2) Устанавливается порядок end INIT. входа в критическую секцию Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do begin if N ≠ 1 then begin C 1 : = false ; при возникновении while N=2 do ; конфликтной ситуации, когда C 1 : = true ; оба процесса параллельно end ; заявляют о попытке войти в CS 1 ; свои критические секции C 1 : = false; N : = 2; AFTER 1 ; end P 1. 53 Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do begin if N ≠ 2 then begin C 2 : = false ; while N=1 do ; C 2 : = true ; end ; CS 2 ; C 2 : = false; N: =1; AFTER 2 ; end P 2.
Программные методы решения: вариант 5 – алгоритм Деккера Процедура инициализации procedure INIT; common boolean C 1, C 2 ; common integer N ; begin C 1 : = false ; C 2 : = false ; N : = 1 ; start(P 1) ; start(P 2) Устанавливается порядок end INIT. входа в критическую секцию Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do begin if N ≠ 1 then begin C 1 : = false ; при возникновении while N=2 do ; конфликтной ситуации, когда C 1 : = true ; оба процесса параллельно end ; заявляют о попытке войти в CS 1 ; свои критические секции C 1 : = false; N : = 2; AFTER 1 ; end P 1. 54 Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do begin if N ≠ 2 then begin C 2 : = false ; while N=1 do ; C 2 : = true ; end ; CS 2 ; C 2 : = false; N: =1; AFTER 2 ; end P 2.
Программные методы решения: вариант 5 – алгоритм Деккера Процедура инициализации procedure INIT; common boolean C 1, C 2 ; common integer N ; begin C 1 : = false ; C 2 : = false ; N : = 1 ; start(P 1) ; start(P 2) Устанавливается порядок end INIT. входа в критическую секцию Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do begin if N ≠ 1 then begin C 1 : = false ; при возникновении while N=2 do ; конфликтной ситуации, когда C 1 : = true ; оба процесса параллельно end ; заявляют о попытке войти в CS 1 ; свои критические секции C 1 : = false; N : = 2; AFTER 1 ; end P 1. 55 Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do begin if N ≠ 2 then begin C 2 : = false ; while N=1 do ; C 2 : = true ; end ; CS 2 ; C 2 : = false; N: =1; AFTER 2 ; end P 2.
Программные методы решения: вариант 5 – алгоритм Деккера Процедура инициализации procedure INIT; common boolean C 1, C 2 ; common integer N ; begin C 1 : = false ; C 2 : = false ; N : = 1 ; start(P 1) ; start(P 2) Устанавливается порядок end INIT. входа в критическую секцию Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do begin if N ≠ 1 then begin C 1 : = false ; при возникновении while N=2 do ; конфликтной ситуации, когда C 1 : = true ; оба процесса параллельно end ; заявляют о попытке войти в CS 1 ; свои критические секции C 1 : = false; N : = 2; AFTER 1 ; end P 1. 56 Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do begin if N ≠ 2 then begin C 2 : = false ; while N=1 do ; C 2 : = true ; end ; CS 2 ; C 2 : = false; N: =1; AFTER 2 ; end P 2.
Программные методы решения: вариант 5 – алгоритм Деккера Процедура инициализации procedure INIT; common boolean C 1, C 2 ; common integer N ; begin C 1 : = false ; C 2 : = false ; N : = 1 ; start(P 1) ; start(P 2) Устанавливается порядок end INIT. входа в критическую секцию Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do begin if N ≠ 1 then begin C 1 : = false ; при возникновении while N=2 do ; конфликтной ситуации, когда C 1 : = true ; оба процесса параллельно end ; заявляют о попытке войти в CS 1 ; свои критические секции C 1 : = false; N : = 2; AFTER 1 ; end 57 end P 1. Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do begin if N ≠ 2 then begin C 2 : = false ; while N=1 do ; C 2 : = true ; end ; CS 2 ; C 2 : = false; N: =1; AFTER 2 ; end P 2.
Программные методы решения: вариант 5 – алгоритм Деккера Процедура инициализации procedure INIT; common boolean C 1, C 2 ; common integer N ; begin C 1 : = false ; C 2 : = false ; N : = 1 ; start(P 1) ; start(P 2) Устанавливается порядок end INIT. входа в критическую секцию Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do begin if N ≠ 1 then begin C 1 : = false ; при возникновении while N=2 do ; конфликтной ситуации, когда C 1 : = true ; оба процесса параллельно end ; заявляют о попытке войти в CS 1 ; свои критические секции C 1 : = false; N : = 2; AFTER 1 ; end 58 end P 1. Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do begin if N ≠ 2 then begin C 2 : = false ; while N=1 do ; C 2 : = true ; end ; CS 2 ; C 2 : = false; N: =1; AFTER 2 ; end P 2.
Программные методы решения: вариант 5 – алгоритм Деккера Процедура инициализации procedure INIT; common boolean C 1, C 2 ; common integer N ; begin C 1 : = false ; C 2 : = false ; N : = 1 ; start(P 1) ; start(P 2) Устанавливается порядок end INIT. входа в критическую секцию Первый процесс process P 1; common boolean C 1, C 2 ; begin while true do begin BEFORE 1 ; C 1 : = true ; while C 2 do begin if N = 2 then begin C 1 : = false ; при возникновении while N=2 do ; конфликтной ситуации, когда C 1 : = true ; оба процесса параллельно end ; заявляют о попытке войти в CS 1 ; свои критические секции C 1 : = false; N : = 2; AFTER 1 ; end P 1. 59 Второй процесс process P 2; common boolean C 1, C 2 ; begin while true do begin BEFORE 2 ; C 2 : = true ; while C 1 do begin if N = 1 then begin C 2 : = false ; while N=1 do ; C 2 : = true ; end ; CS 2 ; C 2 : = false; N: =1; AFTER 2 ; end P 2.
Недостатки программных методов 1. 2. Занятое ожидание – неэффективное использование времени процессора. Сложная реализация для большего числа процессов (рассмотрите пример алгоритма Деккера для 3 и более процессов). Основные причины ошибок: 1. Невозможность обеспечить неделимость операций проверки и модификации значений переменных. Это приводит к нарушению требований к критической секции: не реализуется взаимное исключение или возникает тупик. Менее серьёзные ошибки – задержки и опережающие блокировки. 60
Современные методы решения проблемы взаимного исключения 1. 2. 3. 61 Блокирующие функции, операции блокирования. Семафоры различных типов. Транзакции.
Современные методы решения проблемы взаимного исключения 1. 2. 3. Блокирующие функции, операции блокирования. Семафоры различных типов. Транзакции. На время выполнения операций выполняется блокирование баз данных, отдельных таблиц, записей, файлов, блоков в файлах, … с помощью специальных команд блокирования или процедур (например, открытие файла в режиме монополизации и т. п. ). Блокирующие функции могут использоваться и для выполнения арифметических операций (inc, dec) на основе аппаратной поддержки. 62
Блокирующие функции 63 В программном интерфейсе (API) операционных систем Microsoft Windows предусмотрено несколько функций, которые просты в использовании и могут оказаться полезными для синхронизации доступа к разделяемым (общим) переменным, когда для работы с ними требуется взаимное исключение. Функции выполняют увеличение и уменьшение на единицу значения переменной типа LONG, адрес которой передаётся им в качестве единственного параметра: LONG Interlocked. Increment(LPLONG lp. Addend); LONG Interlocked. Decrement(LPLONG lp. Addend); Если одна задача (поток процесса) приступила с их помощью к изменению значения переменной, то другая задача не сможет выполнить изменение этой же переменной до тех пор, пока первая задача не завершит такое изменение. В результате при использовании этих функций можно быть уверенным, что изменение переменной будет выполнено правильно.
Блокирующие функции Значение, возвращаемое функциями Interlocked. Increment и Interlocked. Decrement, равно нулю, если в результате изменений значение переменной стало равно нулю; если в результате увеличения или уменьшения значение переменной стало больше или меньше нуля, то эти функции возвращают, соответственно, значение, большее или меньшее нуля. Полученное значение можно использовать только для сравнения, так как абсолютная величина возвращённого значения может быть не равна новому значению изменяемой переменной. 64
Блокирующие функции Операция присваивания глобальной переменной нового значения, если она выполняется несколькими задачами одновременно, таит в себе ту же опасность. Чтобы избежать такой опасности, в API Microsoft Windows предусмотрена функция Interlocked. Exchange: LONG Interlocked. Exchange( LPLONG lp. Target, // адрес изменяемой переменной LONG l. New. Value ); // новое значение для переменной 65 Эта функция записывает значение l. New. Value по адресу lp. Target. При этом гарантируется, что операция не будет прервана другой задачей, выполняющейся в рамках того же процесса. Функция Interlocked. Exchange возвращает старое значение изменяемой переменной.
Аппаратная поддержка выполнения блокирующих функций Форматы команд процессоров Intel (и совместимых с ними) предусматривают возможность использования различных префиксов, в частности перед командой может быть записан префикс блокирования шины на время выполнения операции: lock Inc A ; увеличение значения A на 1 в режиме блокирования шины lock Dec A ; уменьшение значения A на 1 в режиме блокирования шины В многопроцессорной системе префикс lock гарантирует, что время, пока процессор, выполняющий команду, считывает значение переменной из памяти, вычисляет новое значение и записывает его назад в память, другие процессоры не смогут обратиться к памяти, т. к. шина в это время будет заблокирована. С системе команд процессоров Intel есть также команды обмена значений, заданных в качестве операндов, сравнения и обмена, проверки и установки… 66
Блокирование файлов при создании или открытии Создание и открытие файла через API производится одной функцией Create. File: HANDLE Create. File (LPCTSTR ip. File. Name, DWORD dw. Desired. Access. DWORD dw. Share. Mode. LPSECURITY_ATTRIBUTES ip. Security. Attributes, DWORD dw. Creation. Distribution, DWORD dw. Flags. And. Attributes. HANDLE h. Template. File) Параметр dw. Share. Mode задаёт режим разделения файлов между разными процессами, данный параметр может принимать следующие значения: 67 0 – монополизация доступа к файлу; FILE_SHARE_READ = 00000001 h – другие процессы могут открыть файл, но только по чтению, запись в файл монополизирована процессом, открывшим файл; FILESHAREWRITE = 00000002 b – другие процессы могут открыть файл, но только по записи, чтение из файла монополизировано процессом, открывшим файл; FILE_SHARE_READ+FILE_SHARE_WRITE = 00000003 b – другие процессы могут открывать файл по чтению-записи. Таким образом, доступ к файлу может быть заблокирован…
Современные методы решения проблемы взаимного исключения 1. 2. 3. 68 Блокирующие функции, операции блокирования. Семафоры различных типов. Транзакции. Семафор – это защищённая переменная, значение которой можно опрашивать и менять только при помощи специальных операций (семафорных примитивов) P и V и операции инициализации. Семафоры могут находиться в двух состояниях: закрыт и открыт. Двоичные (бинарные) семафоры могут принимать только значения 0 или 1 (true или false). Считающие семафоры (семафоры со счётчиками) могут принимать целые значения. Считающий семафор открыт, если значение счётчика больше 0.
Современные методы решения проблемы взаимного исключения 1. 2. 3. 69 Блокирующие функции, операции блокирования. Семафоры различных типов. Транзакции. Транзакция – это последовательность операций, которая либо выполняется от начала до конца, либо (при невозможности завершить все операции последовательности) выполняется откат (roll back) на начало этой транзакции. Таким образом, вся последовательность выполняется как одна неделимая операция: begin transaction Последовательность операций end transaction
Понятие семафора Семафор – это защищённая переменная, значение которой можно опрашивать и менять только при помощи специальных операций P и V (семафорных примитивов) и операции инициализации. Семафоры могут находиться в двух состояниях: закрыт и открыт. Состояния определяются значениями: • Двоичные (бинарные) семафоры могут принимать только значения 0 (закрыт) или 1 (открыт). • Считающие семафоры (семафоры со счётчиками) могут принимать целые значения. Считающий семафор открыт, если значение счётчика больше 0, и закрыт в противном случае. 70
Семафорные примитивы Операции P и V – это семафорные примитивы (неделимые операции), во время выполнения которых процессом к переменнойсемафору нет доступа для других процессов. Примитив P – процедура, сбрасывающая в 0 или уменьшающая значение семафора на 1, если семафор открыт; эта процедура заключает в себе потенциальное ожидание вызывающих процессов в том случае, если соответствующий семафор закрыт к моменту выполнения этой процедуры процессом. Процедура V отрывает семафор или увеличивает значение счётчика на 1. Таким образом, вызов этой процедуры может активизировать некоторый процесс, ожидающий открытия семафора. 71
Семафорные примитивы S Бинарный семафор Считающий семафор с неотрицательными значениями счётчика Общий считающий семафор P(S) if S = 0 then Hold(S) else S : = S – 1; if S < 0 then Hold(S) V(S) 72 if S = 0 then Hold(S) else S : = 0 if not Empty(S) then Release (S) else S : = 1 ; if not Empty(S) then Release (S) else S : = S + 1 ; if S<= 0 then Release (S) Процедура Hold – задержка на семафоре (перевод процесса в состояние ожидания). Функция Empty – функция проверки очереди процессов, ожидающих на семафоре. Процедура Release – освобождение (активация) первого процесса в очереди.
Семафорные примитивы S Бинарный семафор Общий считающий семафор Считающий семафор с неотрицательными значениями счётчика P(S) if S = 0 then hold(S); S : = 0 S : = S – 1 V(S) S : = 1 ; release (S) 73 S : = S – 1; if S < 0 then hold(S) S : = S + 1 ; release (S) Будет ли этот вариант «примитивов» верным? Чем он отличается от описанного выше?
Решение проблемы взаимного исключения с помощью семафоров Процедура инициализации procedure INIT; binary semaphore B ; begin B : = 1 ; {Открыт} start(P 1) ; start(P 2) end INIT. 74 Первый процесс Второй процесс process P 1; binary semaphore B ; begin while true do begin BEFORE 1 ; P(B) ; {вход в КС} CS 1 ; V(B) ; {выход из КС} AFTER 1 ; end P 1. process P 2; binary semaphore B ; begin while true do begin BEFORE 2 ; P(B) ; {вход в КС} CS 2 ; V(B) ; {выход из КС} AFTER 2 ; end P 2.
Реализация отношения предшествования с помощью семафоров Отношение предшествования реализуется, если есть функциональная зависимость между процессами. Первая задача: задача «писателя и читателя» (единичная запись). Первый процесс (писатель) Буфер Запись Второй процесс (читатель) 75
Реализация отношения предшествования с помощью семафоров Отношение предшествования реализуется, если есть функциональная зависимость между процессами. Первая задача: задача «писателя и читателя» (единичная запись). Первый процесс (писатель) Буфер Второй процесс (читатель) 76
Реализация отношения предшествования с помощью семафоров Отношение предшествования реализуется, если есть функциональная зависимость между процессами. Первая задача: задача «писателя и читателя» (единичная запись). Процедура инициализации 77 procedure INIT; binary semaphore B ; begin B : = 0 ; {Закрыт: } { запрет читателю } { на чтение и } {обработку данных } { до их подготовки } { писателем } start(P 1) ; start(P 2) end INIT. Первый процесс (писатель) Второй процесс (читатель) process P 1; binary semaphore B ; begin . . . BEFORE; {подготовка и запись} {подготовленных данных} V(B); {Разрешение для P 2 } {выполнить AFTER } . . . end P 1. process P 2; binary semaphore B ; begin . . . P(B) ; {Ожидание от P 1 } {разрешения на выполнение} AFTER ; {чтение и обработка} {прочитанных данных} . . . end P 2.
Реализация отношения предшествования с помощью семафоров Вторая задача: задача «писателя и читателя» при работе с циклическим буфером: Первый процесс (писатель) Буфер Второй процесс (читатель) 78
Реализация отношения предшествования с помощью семафоров Вторая задача: задача «писателя и читателя» при работе с циклическим буфером: Первый процесс (писатель) Буфер Второй процесс (читатель) 79
Реализация отношения предшествования с помощью семафоров Вторая задача: задача «писателя и читателя» при работе с циклическим буфером: Первый процесс (писатель) Буфер Запись 1 Второй процесс (читатель) 80
Реализация отношения предшествования с помощью семафоров Вторая задача: задача «писателя и читателя» при работе с циклическим буфером: Первый процесс (писатель) Буфер Запись 1 Запись 2 Второй процесс (читатель) 81
Реализация отношения предшествования с помощью семафоров Вторая задача: задача «писателя и читателя» при работе с циклическим буфером: Первый процесс (писатель) Буфер Запись 1 Запись 2 Второй процесс (читатель) 82
Реализация отношения предшествования с помощью семафоров Вторая задача: задача «писателя и читателя» при работе с циклическим буфером: Первый процесс (писатель) Буфер Запись 2 Второй процесс (читатель) 83
Реализация отношения предшествования с помощью семафоров Вторая задача: задача «писателя и читателя» при работе с циклическим буфером: Первый процесс (писатель) Буфер Запись 2 Второй процесс (читатель) 84
Реализация отношения предшествования с помощью семафоров Вторая задача: задача «писателя и читателя» при работе с циклическим буфером: Первый процесс (писатель) Буфер Запись 2 Запись 3 Второй процесс (читатель) 85
Реализация отношения предшествования с помощью семафоров Вторая задача: задача «писателя и читателя» при работе с циклическим буфером: Первый процесс (писатель) Буфер Запись 3 Второй процесс (читатель) 86
Реализация отношения предшествования с помощью семафоров Вторая задача: задача «писателя и читателя» при работе с циклическим буфером: Первый процесс (писатель) Буфер Запись 3 Второй процесс (читатель) 87
Реализация отношения предшествования с помощью семафоров Вторая задача: задача «писателя и читателя» при работе с циклическим буфером: Первый процесс (писатель) Буфер Второй процесс (читатель) 88
Реализация отношения предшествования с помощью семафоров Вторая задача: задача «писателя и читателя» при работе с циклическим буфером: Первый процесс (писатель) Буфер Запись 1 Второй процесс (читатель) 89
Реализация отношения предшествования с помощью семафоров Вторая задача: задача «писателя и читателя» при работе с циклическим буфером Процедура инициализации procedure INIT; binary semaphore B ; integer semaphore E, F; begin B : = 1 ; {Буфер открыт} E : = N ; {Все записи} {в буфере пусты} F : = 0 ; {В буфере нет} {ни одной записи} start(P 1) ; start(P 2) end INIT. 90 Первый процесс (писатель) process P 1; 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 P 1. Второй процесс (читатель) process P 2; 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 P 2.
Реализация отношения предшествования с помощью семафоров Вторая задача: задача «писателя и читателя» при работе с циклическим буфером 91 Процедура Первый процесс Второй процесс (писатель) (читатель) инициализации procedure INIT; process P 1; process P 2; binary semaphore B ; integer semaphore E, F; begin B : = 1 ; {Буфер открыт} while true do while Будет ли это решение эффективным? true do E : = N ; {Все записи} begin Как его можно усовершенствовать? {в буфере пусты}. . . F : = 0 ; {В буфере нет} produce_next_record ; P(F) ; {ни одной записи} P(E) ; P(B) ; start(P 1) ; P(B) ; read_record_from_buffer; start(P 2) write_record_to_buffer ; V(B); end INIT. V(B); V(E); V(F); process_new_record ; . . . end end P 1. end P 2.
Объекты диспетчеризации и синхронизация процессов Современные операционные системы предоставляют в распоряжение программистов различные средства синхронизации, которые могут играть роль «семафоров» , т. е. с их помощью может быть организовано ожидание. В объектно-ориентированных системах основные средства синхронизации – это объекты. Объекты диспетчеризации – это объекты, влияющие на распределение времени процессора. Основной объект диспетчеризации – поток (thread object): время процессора в современных системах выделяется не программе (процессу) в целом, а отдельным задачам (потокам), которые в рамках процесса выполняются параллельно. Первичный поток порождается автоматически при запуске программы (процесса). Остальные создаются при необходимости программистом через функции API или соответствующие средства системы программирования. 92
Объекты диспетчеризации и синхронизация процессов 93 Можно организовать ожидание завершения потока (выполнения задачи), проверить его состояние для реализации функциональной связи потоков (отношения предшествования для задач). Во всех системах имеется несколько специальных типов объектов, реализующих семафоры: mutex object, event object, semaphore object, mutant object. На каждом из этих объектов можно организовать ожидание. Для организации ожидания на этих объектах (входа в критическую секцию, получения доступа к ресурсам…) используются функции Wait. For. Single. Object и Wait. For. Multiple. Object, С помощью их параметров можно задать режим ожидания, ограничить его время. Результат, возвращаемый функциями, позволяет проверить, было ли ожидание «успешным» или завершилось по timeout. Это позволяет предотвратить «смертельную блокировку» , обработать эту ситуацию.
Использованные источники: 1. 2. 94 Шоу А. Логическое проектирование операционных систем. М. : Мир. .
Проблема взаимного исключения.pptx