
- •8 Взаимодействие процессов 79
- •9 Синхронизация процессов 87
- •10 Тупиковые ситуации 101
- •11 Управление памятью 114
- •12 Управление виртуальной памятью 132
- •13 Интерфейс файловой системы 138
- •14 Некоторые аспекты Реализации файловой системы 156
- •Литература 166 введение
- •Понятие операционной системы
- •Контрольные вопросы
- •Организация компьютерной системы
- •Архитектура компьютера с общей шиной
- •Структура памяти
- •Структура ввода-вывода
- •Контрольные вопросы
- •Классификация Операционных Систем
- •Поддержка многопользовательского режима.
- •Поддержка многопоточности
- •Многопроцессорная обработка
- •Особенности областей использования
- •Контрольные вопросы
- •Функциональные компоненты операционной системы
- •Управление процессами
- •Управление памятью
- •Управление файлами и внешними устройствами
- •Безопасность и защита данных
- •Интерфейс прикладного программирования
- •Пользовательский интерфейс
- •Контрольные вопросы
- •Структура операционной системы
- •Монолитные системы
- •Многоуровневые системы
- •Виртуальные машины
- •Экзоядро
- •Модель клиент-сервер
- •Контрольные вопросы
- •Процессы и потоки
- •Концепция процесса
- •Состояния процесса
- •Реализация процессов
- •Операции над процессами
- •1Создание процессов
- •2Завершение процессов
- •Контрольные вопросы
- •Планирование процессора
- •Планирование процессов. Очереди
- •Планировщики
- •Моменты перепланировки. Вытеснение
- •Переключение контекста
- •Диспетчеризация
- •Критерии планирования процессора
- •Стратегии планирования процессора
- •3Планирование в порядке поступления
- •Пример.
- •4Стратегия sjf
- •5Приоритетное планирование
- •6Карусельная стратегия планирования
- •7Очереди с обратной связью
- •8Гарантированное планирование
- •9Лотерейное планирование
- •10Планирование в системах реального времени
- •Планирование потоков
- •Оценка алгоритмов планирования
- •11Детерминированное моделирование
- •12Моделирование очередей
- •13Имитация
- •Контрольные вопросы
- •Взаимодействие процессов
- •Разделяемая память. Проблема производителя и потребителя
- •Взаимодействие путем передачи сообщений
- •14Буферизация
- •15Исключительные ситуации
- •Потерянные сообщения
- •Вызов удаленных процедур (rpc)
- •Контрольные вопросы
- •Синхронизация процессов
- •Взаимное исключение и критические участки
- •Синхронизация с помощью элементарных приемов нижнего уровня
- •16Запрещение прерываний
- •17Переменные блокировки
- •18Операция проверки и установки
- •Семафоры
- •19Использование семафоров
- •20Реализация семафоров
- •21Тупики и зависания
- •Классические проблемы синхронизации
- •22Проблема ограниченного буфера
- •23Проблема читателей и писателей
- •24Задача об обедающих философах
- •Двоичные семафоры
- •Сигналы
- •Контрольные вопросы
- •Тупиковые ситуации
- •Необходимые условия возникновения тупиков
- •Граф выделения и закрепления ресурсов
- •Методы решения проблемы тупиков
- •25Предотвращение тупиков
- •Взаимное исключение
- •Захват и ожидание
- •Отсутствие перераспределения
- •Условие кругового ожидания
- •26Обход тупиков
- •27Простейший алгоритм обхода тупика
- •28Алгоритм банкира
- •29Обнаружение тупиков
- •30Восстановление после тупика
- •Контрольные вопросы
- •Управление памятью
- •Функции операционной системы по управлению памятью
- •Типы адресов
- •Физическое и логическое адресное пространство
- •Связывание адресов
- •Динамическая загрузка
- •Динамическое связывание
- •Перекрытие программ в памяти
- •Свопинг
- •Смежное размещение процессов
- •31Простое непрерывное распределение
- •32Распределение с несколькими непрерывными разделами
- •Фрагментация
- •Страничная организация памяти
- •Сегментная организация памяти
- •Защита и совместное использование
- •Фрагментация
- •Сегментация в сочетании со страничной памятью
- •Контрольные вопросы
- •Управление виртуальной памятью
- •Подкачка страниц
- •Алгоритмы вытеснения страниц
- •33Случайный выбор (Random)
- •34«Первым пришел первым ушел» (fifo)
- •35Вытеснение по давности использования (lru)
- •36Вытеснение редко используемых страниц (lfu)
- •37Оптимальный алгоритм (opt)
- •Аномалии в алгоритмах страничной реализации
- •38«Толкотня» в памяти
- •39Аномалия Биледи
- •Эффективность и применимость виртуальной памяти
- •Пример.
- •Контрольные вопросы
- •Интерфейс файловой системы
- •Понятие файла. Атрибуты файла и операции с файлами
- •Операции над файлами
- •Типы файлов
- •Структура файлов
- •Методы доступа
- •40Последовательный метод доступа
- •41 Прямой метод доступа
- •42Другие методы доступа
- •Каталоги
- •Логическая структура каталога
- •43Одноуровневая структура каталога
- •44Двухуровневая структура каталога
- •45 Древовидная структура каталога
- •46Организация каталога в виде графа без циклов
- •47Организация каталога в виде произвольного (простого) графа
- •Проблемы защиты файлов
- •48Типы доступа
- •49Списки прав доступа
- •50Другие подходы к защите
- •Контрольные вопросы
- •Некоторые аспекты Реализации файловой системы
- •Общая структура файловой системы
- •Методы выделения дискового пространства
- •51Выделение непрерывной последовательностью блоков
- •52Связный список
- •53Таблица отображения файлов
- •54Индексные узлы
- •Управление свободным и занятым дисковым пространством
- •55Учет при помощи организации битового вектора
- •56Учет при помощи организации связного списка
- •57Размер блока
- •58Структура файловой системы на диске
- •Контрольные вопросы Литература
27Простейший алгоритм обхода тупика
Если в некоторой системе распределения ресурсов разрешено использование только одного экземпляра каждого типа ресурсов, то для обхода тупика можно использовать вариант графа выделения и закрепления ресурсов.
В дополнение к дугам запроса и назначения, определим еще один вид ребра – дуга потребности. Дуга потребности от процесса к ресурсу означает, что процесс может затребовать ресурс через некоторое время в будущем. Ее будем изображать пунктиром. Когда процесс выполнит соответствующий запрос, дуга потребности преобразуется в дугу назначения. Когда ресурс фактически выделен процессу, дуга запроса преобразуется в дугу назначения. Когда процесс освобождает ресурс, дуга назначения преобразуется в дугу потребности. Все ребра потребности для процесса должны быть включены в граф до начала выполнения процесса.
Предположим, что процесс запрашивает ресурс . Запрос может быть выполнен только, если преобразование ребра потребности в ребро назначения не приведет к возникновению цикла в графе.
Рисунок 10.24 - Граф выделения и закрепления ресурсов с дугами потребности
Если
в системе имеется n
процессов, то алгоритм проверки наличия
цикла имеет сложность порядка
.
28Алгоритм банкира
Один из наиболее известных алгоритмов обхода тупиков – это алгоритм банкира (banker ‘s algorithm). Он выполняется следующим образом. Банкир ссужает денежные суммы, все в одной валюте, некоторому числу клиентов, каждый из которых заранее сообщает банкиру максимальную сумму, которая ему будет нужна. Клиент может занимать эту сумму по частям, и нет никаких гарантий, что он возвратит часть денег до того, как сделает весь заем. Весь капитал банкира обычно меньше, чем суммарные требования клиентов, так как банкир не предполагает, что все клиенты сделают максимальные займы одновременно. Если в некоторый момент клиент запросит денежную сумму, банкир должен знать, сможет ли он ссудить ее без риска попасть в ситуацию, когда не будет достаточного количества денег, чтобы обеспечить дальнейшие займы, а именно это, в конце концов, позволяет клиентам возвратить долг.
Чтобы ответить на этот вопрос, банкир предполагает, что он выполнил запрос и оценивает сложившуюся ситуацию. Он определяет клиента, чей текущий заем наиболее близок к максимальному. Если банкир не может ссудить оставшуюся сумму этому клиенту, то он отклоняет первоначальный запрос. Если же банкир может ссудить оставшуюся сумму, то он предполагает, что этот клиент полностью рассчитался, и обращает свое внимание на того клиента из оставшихся, чей запрос ближе всего к своему лимиту. Просматривая таким образом всех клиентов, банкир каждый раз проверяет, будет ли у него достаточно денег, чтобы удовлетворить минимальный заем клиенту и предоставить последнему полную сумму. В случае если это так, банкир удовлетворяет первоначальный заем. Если вместо «банкир», «клиент» и «денежные суммы» читать «операционная система», «процесс» и «ресурс», то можно применить этот алгоритм к вычислительным системам.
Если используются несколько типов ресурсов, нужно проводить аналогию с международным банкиром, который ссужает деньги в разной валюте. Недостаточно применить одновалютный алгоритм к каждой валюте в отдельности. Вместо этого необходимо проверять общие запасы разной валюты, а необходимый для этого алгоритм более сложен.
Для реализации алгоритма банкира требуются некоторые структуры данных. Пусть:
п – количество процессов в системе,
т – количество типов ресурсов.
Тогда:
Available – вектор размерностью т, определяющий количество доступных экземпляров для каждого типа ресурсов. Если Availablej равно k, это означает, что доступно k экземпляров ресурса Rj.
Max – матрица размерностью п т определяющая максимальные ресурсные потребности для каждого процесса. Если Maxij равно k, это означает, что процессу Рi понадобится не более k экземпляров ресурса Rj.
Allocation – матрица размерностью п т, определяющая текущее закрепление ресурсов. Если Allocationi,j равно k, это означает, что процессу Рi в настоящий момент выделено k экземпляров ресурса Rj.
Need – матрица размерностью п т, определяющая оставшиеся невостребованные ресурсы для каждого процесса. Если Needi,j равно k, это означает, что процессу Рi для завершения работы понадобится ещё k экземпляров ресурса Rj.
Need i, j = Max i, j - Allocation i ,j
Будем считать, что для векторов Х и Y имеет место Х Y если Хi Yi для всех i = 1,2, … , n.
Алгоритм банкира базируется на двух процедурах:
S - процедура (для определения состояния безопасности/опасности);
R - процедура (для выделения процессу запрашиваемых ресурсов или перевод его в ожидание).
С учетом введенных обозначений основные шаги S-процедуры могут быть представлены в виде:
Шаг 1. Определим векторы Work и Finish размерностью m и n соответственно.
Присвоим им следующие начальные значения:
Work : = Available , Finish i : = false для i = 1 , 2 , … , n
где false соответствует незавершенному процессу, true - завершенному процессу.
Шаг 2. Найдем i, такое, что одновременно Finishi:=false, Needi Work,
где Needi - строка матрицы Need, определяющая оставшиеся невостребованными ресурсы для процесса Рi.
В том случае, если такое i не найдено, перейдём к шагу 4.
Шаг 3.
Work : = Work + Allocationi
Finish i = true
Переходим к шагу 2.
Шаг 4. Если Finish i = true для всех i, то система находится в безопасном состоянии.
R - процедура
Пусть Reguesti - вектор размерностью т, описывающий запрос на выделение ресурса процессом Рi. Если Reguesti j = k, это означает, что процессу Рi необходимо k экземпляров ресурса Rj.
Шаг 1. Если Reguesti Needi, то перейти к шагу 2. В противном случае – ошибка: «Запрошено больше ресурсов, чем возможно для данного процесса».
Шаг 2. Если Reguesti Available, то переходим к шагу 3. В противном случае процесс Рi переводится в состояние ожидания.
Шаг 3. Предположив, что затребованные ресурсы выделены, получим новые состояния системы.
Available : = Available - Reguesti ,
Allocationi : = Allocationi + Reguesti,
Needi : = Needi + Reguesti
С помощью S - процедуры определяется безопасность/опасность в состоянии системы. Если новое состояние безопасно, то для процесса Рi выделяются запрашиваемые ресурсы. Если новое состояние опасно, то Рi переводится в состояние ожидания и сохраняется старое состояние системы.