
- •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Структура файловой системы на диске
- •Контрольные вопросы Литература
Фрагментация
Алгоритмы, описанные нами, приводят к так называемой внешней фрагментации. Загрузка и удаление процессов из памяти, приводит к дроблению свободной памяти на небольшие участки. Внешняя фрагментация присутствует, если свободного адресного пространства достаточно для выполнения запроса, но оно не является непрерывным.
Фрагментация вызывает различные проблемы. В самом плохом случае, свободные блоки располагаются между каждыми двумя процессами. Если бы вся эта память была объединена в единый большой блок, то можно было бы запустить большее количество процессов. Выбор стратегии распределения памяти может повлиять на фрагментацию. Внешняя фрагментация также зависит от общего объема оперативной памяти и среднего размера процесса. Статистика показывает, что даже с некоторой оптимизацией, если выделено N блоков, то 0.5N блоков теряются из-за фрагментации, то есть 1/3 памяти недоступна (правило 50%).
Другая проблема, связанная с распределением памяти с несколькими разделами, состоит в следующем. Рассмотрим блок размером 18464 байта. Предположим, что следующему процессу требуется 1862 байта. Если мы выделим запрашиваемый блок, то свободно останется 2 байта. Накладные расходы на хранение такого блока себя не оправдывают. Общий подход – распределение слишком маленьких блоков как части запрошенных. То есть выделенный участок может быть немного больше запрошенного. Эта разница составляет внутреннюю фрагментацию (память выделена, но не используется).
Одним из решений проблемы внешней фрагментации является уплотнение (дефрагментация). Ее целью является объединение всех свободных участков в один блок.
Уплотнение возможно, только если привязка адресов производится на этапе выполнения программы. Если уплотнение возможно, то следует определить его стоимость. Простейшая стратегия – подвинуть все процессы вверх, но это очень дорого.
На практике возможно частичное уплотнение, то есть передвигается один какой-то блок, чтобы удовлетворить запрос.
Часто совместно с уплотнением используется свопинг. Одним из подходов к уплотнению является вытеснение всех процессов во внешнюю память, а затем их подкачка на новое место. Если в системе уже есть свопинг, то затраты труда программиста на решение этой задачи весьма невелики.
На практике реализация уплотнения памяти сопряжена с усложнением операционной системы и обладает следующими недостатками:
В тех случаях, когда мультипрограммная смесь неоднородна по отношению к размерам программ, возникает необходимость в частом уплотнении, что расходует процессорное время и компенсирует экономию памяти.
Во время уплотнения все прикладные программы переводятся в состояние ожидания, что приводит к невозможности выполнения программ в реальном масштабе времени.
Страничная организация памяти
Описанные выше схемы недостаточно эффективно используют память, поэтому в современных схемах управления памятью не принято размещать процесс в оперативной памяти одним непрерывным блоком.
Страничная организация памяти (paging) относится к методам несмежного размещения процессов в основной памяти. Основное достоинство страничной организации памяти заключается в том, что она позволяет свести к минимуму общую фрагментацию за счет полного устранения внешней фрагментации и минимизации внутренней фрагментации.
Адресные пространства основной памяти разбиваются на блоки фиксированного размера, которые называются физическими страницами или страничными блоками (page frames). Логическое адресное пространство программы также разбивается на блоки того же размера, называемые страницами (pages). Таким образом, одну страницу информации можно загрузить в один страничный блок.
Процесс загружается в память постранично, причем каждая страница помещается в любой свободный страничный блок основной памяти. Рис. 11.6 иллюстрирует аппаратную поддержку базового метода страничной организации памяти.
При страничной организации всякий страницы адрес (логический) представляет собой пару [p,d], где p – номер страницы, а d – смещение относительно начала. Заметим, что разбиение адресного пространства на страницы осуществляется вычислительной системой незаметно для программиста. Поэтому адрес является двумерным лишь с точки зрения операционной системы, а с точки зрения программиста адресное пространство процесса остается линейным.
Каждому процессу ставится в соответствие таблица страниц (page table). Таблица страниц содержит начальные адреса (f) соответствующих страничных блоков в памяти. Физический адрес определяется путем сложения начального адреса соответствующего страничного блока (f) и смещения (d).
Рисунок 11.30 - Базовый метод страничной организации памяти.
Размер
страницы определяется оборудованием.
Обычно это степень двойки в промежутке
от 512 до 8192 байтов. Выбранный таким
образом размер страницы позволяет
упростить преобразование логического
адреса в физический. Пусть логическое
адресное пространство имеет размер
,
размер страницы равен
.
Тогда в старших n-m
разрядов логического адреса будет
храниться номер страницы, а в младших
m разрядах смещение внутри
страницы. Поскольку физические адреса
страниц кратны
,
в таблице страниц можно хранить только
старшие разряды этих адресов (номер
физической страницы). Преобразование
логического адреса к физическому
сводится к склеиванию (конкатенации)
номера физической страницы и смещения
внутри страницы.
Когда процесс начинает выполняться, его адресное пространство разбивается на страницы. Для размещения каждой страницы, требуется страничный блок. Если в памяти имеется необходимое количество страничных блоков, то они выделяются процессу. С точки зрения пользователя, при страничной организации памяти адресное пространство процесса представляет собой непрерывный участок памяти, содержащий только его программу. Фактически же программа пользователя разбросана по всей физической памяти, которая содержит и другие программы. Размещение программ в ОП скрыто от пользователя и управляется операционной системой.
При использовании страничной организации памяти отсутствует внешняя фрагментация. Однако, как правило, имеется некоторая внутренняя фрагментация, поскольку размер адресного пространства процесса обычно не кратен размеру страницы. Поэтому, по крайней мере, один блок будет заполнен лишь частично.
Для управления страничной памятью ОС требуется информация о распределении физической памяти, какие страничные блоки были распределены, какие свободны, сколько всего блоков имеется и т. д. Эта информация хранится в таблице страничных блоков (frame table). Каждому страничному блоку соответствует строка в этой таблице, содержащая информацию о том, занят или свободен этот блок, и если занят, то каким процессом.
Отображение адресов должно быть осуществлено корректно даже в сложных случаях и обычно реализуется аппаратно.