
- •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Структура файловой системы на диске
- •Контрольные вопросы Литература
Перекрытие программ в памяти
Мы уже говорили, что программа может быть выполнена, если ее код и данные размещены в оперативной памяти. Но размер процесса может превосходить объем физической памяти. Иногда в этом случае применяется механизм оверлеев.
Идея оверлея состоит в размещении в памяти только тех команд и данных, которые необходимы в данный момент. Когда потребуются другие команды и данные, они будут размещены на месте тех, которые уже не нужны.
Например, рассмотрим двухпроходный ассемблер. Во время первого прохода формируется таблица символов, во время второго генерируется машинный код. Мы можем выделить код первого прохода, код второго прохода, таблицу имен и общую часть, используемую на обоих проходах. Предположим, что эти компоненты имеют следующий объем:
первый проход 70К;
второй проход 80К;
таблица символов 20К;
общая часть 30К.
Для того чтобы разместить все эти компоненты в памяти одновременно, потребуется 200К. Если доступно только 150К, то процесс не может быть выполнен. Предположим теперь, что не требуется одновременного присутствия в памяти кодов первого и второго прохода. Тогда мы можем определить два оверлея (рис. 11.3):
А – таблица символов, общая часть, первый проход;
В – таблица символов, общая часть, второй проход.
Рисунок 11.27 – Пример оверлея
Добавим драйвер оверлея и разместим оверлей А в памяти. Когда первый проход закончится, драйвер оверлея разместит в памяти оверлей В.
Для оверлея требуется 120К, для оверлея В – 130К. Следовательно, можно запускать ассемблер на 150К оперативной памяти.
Таким образом, применение оверлеев позволяет значительно уменьшить объем оперативной памяти, необходимой программе.
Существует две проблемы, которые применение оверлеев не решает:
при обращениях к рекурсивным процедурам и процедурам, зависящим от данных, нельзя заранее сказать, можно ли сделать эти две процедуры перекрывающимися;
количество доступной ОП может динамически изменяться. В результате структура перекрытий какого-либо задания может не уместиться в оперативной памяти.
Свопинг
Процесс должен быть размещен в оперативной памяти, чтобы выполняться. Однако он может быть временно вытеснен из оперативной памяти во внешнюю память, и, затем, загружен обратно в оперативную память для выполнения работы. Вытеснение процесса во внешнюю память называется откачкой (swap out/roll out), а загрузка из внешней памяти – подкачкой (swap in/roll in). Совокупность действий по откачке и подкачке процессов называется подкачкой-откачкой или свопингом (swapping). Подкачка обычно требует специальных аппаратных средств настройки адресов, если только не ввести ограничение – процесс подкачивается на то место, из которого был откачан.
Для организации свопинга необходима не только внешняя память для хранения неактивных процессов, но также требуется планировщик памяти, который следит за тем, где какой процесс находится.
Свопинг полезен тем, что позволяет перераспределять память для процесса, не запуская его с самого начала. Потребность в перераспределении памяти может возникнуть по нескольким причинам:
появляется возможность выполнять больше малоактивных работ, чем может разместиться в памяти;
перераспределение может освободить память, занимаемую работой, требующей вмешательства оператора;
перераспределение позволяет более эффективно использовать другие ресурсы;
перераспределение позволяет освободить память для задач с более высоким приоритетом.
Для организации свопинга требуется внешняя память. Обычно это большой диск. Он должен быть достаточно большим, чтобы поместить копии образов всех процессов всех пользователей и обеспечивать прямой доступ к этим образам.
Очередь готовых процессов строится как из тех процессов, которые в данный момент размещены в оперативной памяти, так и из тех процессов, которые размещены во внешней памяти. Когда планировщик процессора выбирает процесс для исполнения, он вызывает диспетчер памяти, который проверяет, находится ли данный процесс в оперативной памяти. Если нет, то диспетчер откачивает некоторый процесс из ОП и подкачивает необходимый. Затем он изменяет содержимое регистров для нормального исполнения выбранного процесса.
Стандартный свопинг используется редко, так как он требует значительных затрат. Поэтому в современных операционных системах используются модифицированные варианты свопинга. Так, например, во многих версиях операционной системы UNIX свопинг включается только в том случае, когда количество процессов в памяти становится слишком большим. Свопинг может быть остановлен, как только все процессы можно разместить в оперативной памяти.
В MS Windows тоже не применяется полный свопинг, поскольку пользователь, а не планировщик решает, когда один процесс может быть заменен другим. Процесс не может быть откачан, если он в данный момент выбран пользователем.
В Windows NT используется специальная аппаратная поддержка свопинга.