- •Проектирование Операционных Систем
- •Определение ос
- •Промышленная эксплуатация
- •Принцип модульности
- •Принцип функциональной избирательности
- •Принцип перемещаемости
- •Принцип защиты
- •Состояние процессов
- •Переходы между состояниями
- •Классификация процессов
- •Характеристики процессов
- •Определение
- •Классификация ресурсов
- •Интерфейс пользователя
- •Командный интерфейс
- •Примеры командных файлов из операционных систем
- •Эльбрус
- •3. Vm, os/2: rexx (пример аналога команды unix Grep)
- •Графический интерфейс
- •Основные понятия gui
- •Обработка прерываний
- •Подсистемы ос
- •Подсистема управления процессами
- •Долгосрочное планирование
- •Краткосрочное планирование
- •Дескрипторы процессов
- •Искусственное снижение уровня мультипрограммирования
- •Подсистема распределения ресурсов
- •Подсистема управления памятью
- •Два уровня распределения оперативной памяти
- •Задачи распределения памяти
- •Выделение
- •Подсистема управления вводом/выводом
- •Требования к подсистеме управления ввода/вывода:
- •Буферизация ввода вывода
- •Пример реализации ввода/вывода в системе unix
- •Пример реализации ввода/вывода в ос vm
- •Организация виртуальной памяти
- •Структуризация адресных пространств
- •Схемы страничной структуризации.
- •Схемы сегментной структуризации.
- •Сегментно-страничная структуризация
- •Требования к вп
- •Задачи управления виртуальной памятью
- •Задача размещения
- •Задача перемещения
- •Задача взаимного исключения
- •Задача «производитель-потребитель»
- •Модификации данной задачи
- •Задача «читатели-писатели»
- •Задача «обедающие философы»
- •Механизмы синхронизации Критерии оценки механизмов синхронизации
- •Архитектура механизмов синхронизации
- •Синхронизация с помощью прерываний
- •Синхронизация при помощи переменной состояния
- •Семафоры
- •Простые семафоры
- •Множественные семафоры
Простые семафоры
Существуют два варианта допустимых множеств для значений семафоров:
-
целые числа больше или равные 0;
-
целые числа больше и меньше 0.
Особый случай первого варианта – (0, 1) – двоичный семафор.
Операция закрытия заключается в проверке текущих значений семафора и, если оно больше 0, выполняется уменьшение на 1 значения семафора и переход к выполнению следующей после закрытия семафора операции. Если значение семафора равно 0 (или для другого варианта ≤ 0), то процесс переводится в состояние пассивного ожидания. Иными словами, процесс не может развиваться дальше закрытого семафора.
Операции открытия увеличивают значение семафора на 1 и, кроме того, активизируется один или несколько ожидающих процессов.
//Философ N Void philosopher (int N) { P((N%5), (N+1)%5); // еда V((N%5), (N+1)%5); } |
При извлечении процесса из очереди ожидающих семафора повторное выполнение примитива закрытия может привести к искажению значения семафора.
Начальное значение семафора > 1 указывает на предельное число процессов, которые могут одновременно находиться в своих критических областях. В случае, когда S є [0; +∞), нам понадобится дополнительный параметр L – длина очереди ожидания.
//Философ N Void philosopher (int N) { P((N%5), (N+1)%5); // еда V((N%5), (N+1)%5); } |
Множественные семафоры
Особенностью такого механизма является возможность проверки в одном примитиве не одного, а нескольких семафоров и обработки их по определенным правилам. К семафорам, как и ранее, выстраиваются очереди ожидающих процессов. Основная сложность задачи заключается в том, что нет однозначной связи между семафором и очередью ожидания.
//Философ N Void philosopher (int N) { P((N%5), (N+1)%5); // еда V((N%5), (N+1)%5); } |