- •Основы построения операционных систем
- •Введение
- •1. Основные аспекты операционных систем
- •1.1. Программные системы
- •1.2. Ресурсы вычислительных систем
- •1.3. Функции операционных систем
- •1.3.1. Упрощение доступа к компьютеру
- •1.3.2. Повышение эффективности использования ресурсов
- •1.4. Классификация операционных систем
- •2. Управление файлами
- •2.1. Файлы
- •2.1.1. Имя файла
- •2.1.2. Типы файлов
- •2.1.3. Атрибуты файла
- •2.2. Функции системы управления файлами
- •2.3. Способы организации файлов
- •2.3.1. Последовательное размещение
- •2.3.2. Размещение с помощью сцепленных блоков
- •2.3.3. Организация файлов на основе таблиц размещения
- •2.3.4. Размещение с использованием таблицы индексов
- •2.3.5. Индексно-последовательное размещение
- •2.3.6. Библиотечная структура данных
- •2.4. Методы доступа к содержимому файлов
- •2.4.1. Последовательный доступ
- •2.4.2. Прямой доступ
- •2.4.3. Другие методы доступа
- •2.5. Способы организации файловой структуры
- •2.6. Манипулирование файловой структурой
- •3. Управление памятью
- •3.1. Простое непрерывное распределение
- •3.2. Распределение с несколькими непрерывными разделами
- •3.2.1. Мультипрограммирование и разбиение на разделы
- •3.2.2. Разделы с фиксированными границами
- •3.2.3. Разделы с подвижными границами
- •3.2.4. Своппинг
- •3.3. Организация виртуальной памяти
- •3.3.1. Основные концепции виртуальной памяти
- •3.3.2. Страничная организация памяти
- •3.3.3. Сегментная организация памяти
- •3.3.4. Сегментно-страничная организация памяти
- •3.4. Управление виртуальной памятью
- •3.4.1. Алгоритмы выталкивания страниц
- •3.4.2. Подкачка страниц по запросу
- •3.4.3. Подкачка страниц с опережением
- •3.4.4. Освобождение страниц
- •3.4.5. Размер страниц
- •4. Управление процессами
- •4.1. Концепции процесса
- •4.1.1. Понятие последовательного процесса
- •4.1.2. Состояния процесса
- •4.1.3. Блок управления процессом
- •4.1.4. Планирование процессов
- •4.1.5. Обработка прерываний
- •4.2. Синхронизация параллельных процессов
- •4.2.1. Параллельная обработка
- •4.2.2. Взаимное исключение
- •4.2.3. Алгоритм Деккера
- •4.2.4. Аппаратная реализация взаимного исключения
- •4.2.5. Семафоры
- •4.2.6. Мониторы
- •4.2.7. Передача сообщений
- •4.3. Тупиковые ситуации
- •4.3.1. Условия возникновения дедлоков
- •4.3.2. Основные направления исследований по проблеме тупиков
- •4.3.3. Предотвращение тупиков
- •4.3.4. Обход дедлоков
- •4.3.5. Алгоритм банкира
- •4.3.6. Распознавание дедлоков
- •4.3.7. Восстановление после тупиков
- •5. Управление процессором
- •5.1. Диспетчеризация процессов
- •5.2. Приоритеты
- •5.3. Алгоритмы диспетчеризации с одной очередью
- •5.3.1. Алгоритм fcfs (первый пришедший обслуживается первым)
- •5.3.2. Алгоритм spn (кратчайший процесс - следующий)
- •5.3.3. Алгоритм srt (по наименьшему остающемуся времени)
- •5.3.4. Алгоритм hrrn (по наибольшему относительному времени ответа)
- •5.3.5. Алгоритм циклической диспетчеризации rr
- •5.3.6. Сравнение алгоритмов диспетчеризации с одной очередью
- •5.4. Многоуровневые очереди с обратными связями
- •6. Управление устройствами
- •6.1. Общая организация ввода-вывода
- •6.2. Методы управления периферийными устройствами
- •6.3. Действия по вводу-выводу
- •6.3.1. Буферизация : прочитать и записать
- •6.3.2. Блокирование : получить и поместить
- •6.3.3. Подготовка : открыть и закрыть
- •6.4. Управление магнитными дисками
- •6.4.1. Физическая структура магнитного диска
- •6.4.2. Физическая структура формата данных дискеты
- •6.4.3. Логическая структура магнитного диска
- •6.4.4. Планирование работы с магнитными дисками
- •Заключение
- •Список используемых источников
- •Оглавление
4.2.3. Алгоритм Деккера
Примером программной реализации взаимного исключения является алгоритм Деккера (названный так по имени предложившего его голландского математика Деккера), позднее усовершенствованный Дейкстрой. Программа использует три общие для обоих процессов переменные (рис.4.12) : flag[1] и flag[2], устанавливающие возможность входа в критический интервал соответственно первого и второго процесса, и turn, определяющую номер выбранного процесса.
Процесс P1 уведомляет о желании войти в свой критический участок, устанавливая свой флаг. Затем он переходит к циклу, в котором проверяет, не хочет ли также войти в свой критический участок и P2. Если флаг Р2 не установлен, то Р1 пропускает тело цикла ожидания и входит в свой критический участок. Предположим, однако, что Р1 при выполнении цикла проверки обнаруживает, что флаг Р2 установлен. Это заставляет Р1 войти в тело своего цикла ожидания. Здесь он анализирует значение переменной turn, которая используется для разрешения конфликтов, возникающих в случае, когда оба процесса одновременно хотят войти в свой критический участок. Если избранным процессом является Р1, он пропускает тело своего цикла if и повторно выполняет цикл проверки в ожидании момента, когда Р2 сбросит свой флаг. (Процесс Р2 со временем должен это сделать.). Если процесс Р1 определяет, что преимущественное право принадлежит процессу Р2, он входит в тело своего цикла if, где сбрасывает свой собственный флаг, а затем блокируется в цикле ожидания, пока избранным процессом остается Р2. Сбрасывая свой флаг, Р1 дает возможность Р2 войти в свой критический интервал. Со временем Р2 выйдет из своего критического участка и обеспечит возврат преимущественного права процессу Р1 и сброс флага Р2. Теперь у Р1 появляется возможность выйти из внутреннего цикла ожидания while и установить собственный флаг. Затем Р1 выполняет внешний цикл проверки. Если флаг Р2 (недавно сброшенный) по-прежнему сброшен, то Р1 входит в свой критический участок. Если, однако, Р2 сразу же пытается вновь войти в свой критический участок, то его флаг будет установлен, и Р1 снова придется войти в тело внешнего цикла while. Однако на этот раз «бразды правления» находятся уже у процесса Р1, поскольку сейчас именно он является избранным процессом (процесс Р2, выходя из своего критического ин тервала, установил для переменной turn - номера избранного процесса - значение 1). Поэтому Р1 пропускает тело условной конструкции if и многократно выполняет внешний цикл проверки, пока Р2 не сбросит собственный флаг, позволяя процессу Р1 войти в свой критический интервал.
Когда Р1 выходит из внутреннего цикла активного ожидания, он может потерять центральный процессор, а Р2 в это время пройдет цикл и вновь попытается войти в свой критический интервал. При этом Р2 первым установит свой
флаг и вновь войдет в свой критический интервал. Когда Р1 снова захватит
Program Dekker’s algorithm;
Var flag: array[1..2] of boolean;
turn: 1..2;
Procedure Process P1;
begin
repeat
flag[1] := true ;
while flag[2] do
if turn = 2 then
begin
flag[1] := false;
while turn = 2 do;
flag[1] := true
end;
< критический интервал >;
turn := 2 ;
flag[1] := false ;
< остальная часть программы >
until false
end ;
Procedure Process P2;
begin
repeat
flag[2] := true ;
while flag[1] do
if turn = 1 then
begin
flag[2] := false;
while turn = 1 do;
flag[2] := true
end;
< критический интервал >;
turn := 1 ;
flag[2] := false ;
< остальная часть программы >
until false
end ;
Begin
flag[1] := false ;
flag [2] := false ;
turn := 1 ;
Process P1 ;
Process P2
End .
Рис. 4.12. Реализация взаимного исключения согласно алгоритму Деккера
процессор, он установит свой флаг. Поскольку сейчас будет очередь процесса Р1, то Р2, если он попытается вновь войти в свой критический интервал, должен будет сбросить свой флаг и перейти на внутренний цикл активного ожидания, так что Р1 получит возможность входа в свой критический интервал. Этот прием позволяет решить проблему бесконечного ожидания.