СОДЕРЖАНИЕ
1.2.1 Ос как виртуальная машина
1.2.2 Ос как система управления ресурсами
1.3 Интерфейс прикладного программирования
1.4 Структура операционных систем
1.4.2 Многоуровневая структура ос
1.4.4 Микроядерная архитектура (модель клиент-сервер)
1.4.5 Обобщение сравнения моделей
2.2.3 Преимущества использования потоков
2.2.4 Реализация потоков в пространстве пользователя, ядра и смешанное
2.2.5 Особенности реализации Windows
3.1 Взаимодействие между процессами
3.1.1 Передача информации от одного процесса другому
3.1.4 Взаимное исключение с активным ожиданием
3.1.5 Примитивы взаимодействия процессов
4.1 Основные понятия планирования процессов
4.2 Планирование в системах пакетной обработки
4.3.2 Приоритетное планирование
4.3.3 Методы разделения процессов на группы
4.4 Планирование в системах реального времени
4.4.1 Планирование однородных процессов
4.4.2 Общее планирование реального времени
5.1 Взаимоблокировка процессов
5.2 Моделирование взаимоблокировок
5.3 Методы борьбы с взаимоблокировками
5.3.1 Пренебрежением проблемой в целом (страусовый алгоритм)
5.3.2 Обнаружение и устранение взаимоблокировок
5.3.3 Динамическое избежание взаимоблокировок
5.3.4 Предотвращение четырех условий, необходимых для взаимоблокировок
6.2 Методы без использования внешней памяти
6.2.1 Однозадачная система без подкачки на диск
6.2.2 Распределение памяти с фиксированными разделами.
6.2.3 Распределение памяти динамическими разделами
6.3 Методы с использованием внешней памяти (свопинг и виртуальная память)
7.1 Алгоритмы замещения страниц
7.2.1 Политика распределения памяти
7.2.3 Совместно используемые страницы
7.2.4 Политика очистки страниц
7.3 Особенности реализации в unix
7.4 Особенности реализации в Windows
8.1 Основные понятия сегментации
8.2.1 Сегментация с использованием страниц: multics
8.2.2 Сегментация с использованием страниц: Intel Pentium
8.3 Особенности реализации в unix
9.1 Принципы аппаратуры ввода-вывода
9.1.3 Отображаемый на адресное пространство памяти ввод-вывод
9.1.4 Прямой доступ к памяти (dma - Direct Memory Access)
9.2 Принципы программного обеспечения ввода-вывода
9.2.1 Задачи программного обеспечения ввода-вывода
9.2.3 Управляемый прерываниями ввод-вывод
9.2.4 Ввод-вывод с использованием dma
9.3 Программные уровни и функции ввода-вывода
9.3.3 Независимое от устройств программное обеспечение ввода-вывода
9.3.4 Программное обеспечение ввода-вывода пространства пользователя
9.3.5 Обобщение уровней и функций ввода-вывода
10.1.2 Raid (Redundant Array of Independent Disk - массив независимых дисков с избыточностью)
10.1.3.1 Компакт-диски с возможностью записи cd-r
10.1.3.2 Многократно перезаписываемые компакт-диски cd-rw
10.1.3.3 Универсальный цифровой диск dvd (Digital Versatile Disk)
10.2 Форматирование дисков (программная часть)
10.2.1 Низкоуровневое форматирование
10.2.3 Высокоуровневое форматирование
10.3 Алгоритмы планирования перемещения головок
10.3.1 Алгоритм "первый пришел - первым обслужен" fcfs (First Come, First Served)
10.3.3 Алгоритмы сканирования (scan, c-scan, look, c-look)
10.5 Стабильное запоминающее устройство
10.6.1 Аппаратная часть таймеров
10.6.2 Программное обеспечение таймеров
11.1.7 Файлы, отображаемые на адресное пространство памяти
12.2.3 Связные списки при помощи таблиц в памяти
12.3.1 Реализация длинных имен файлов
12.3.2 Ускорение поиска файлов
12.3.2.1 Использование хэш-таблицы для ускорения поиска файла.
12.3.2.2 Использование кэширования результатов поиска файлов для ускорения поиска файла.
12.4 Совместно используемые файлы
12.5 Организация дискового пространства
12.6 Надежность файловой системы
12.6.2 Непротиворечивость файловой системы
12.7 Производительность файловой системы
13.1.2 Рок-ридж расширения для unix
13.1.3 Joliet расширения для Windows
13.2 Файловая система ms-dos (fat-12,16,32)
13.2.4 Расширение Windows 98 для fat-32
14.1.2 Блокировка данных файла
14.1.3 Создание и работа с файлом
14.4 Сравнительная таблица некоторых современных файловых систем
14.4.1 Архитектура файловой системы nfs
Алгоритм основан на алгоритме "часы", но использует рабочий набор.
Используются битов R и M, а также время последнего использования.

Работа алгоритма WSClock
Это достаточно реальный алгоритм, который используется на практике.
Алгоритмы замещения бывают:
локальные
глобальные

Пример глобального и локального алгоритма
В целом глобальный алгоритм работает лучше.
Можно поровну распределять страничные блоки между процессами.
Такой подход справедлив, но не эффективен, т.к. процессы разные.
Можно распределять страничные блоки между процессами, в зависимости от размеров процесса
Размер процесса динамически меняется, поэтому определить размер динамически сложно.
Частота страничных прерываний - может служить показателем потребности процесса в страницах.
Чем больше частота, тем больше памяти необходимо процессу.

Зависимость частоты страничных прерываний от размеров памяти предоставленной процессу
Если частота стала ниже линии В, то памяти процессу предоставлено слишком много.
Если частота стала выше линии А, то памяти процессу предоставлено слишком мало.
Если всем процессам не хватает памяти (происходит пробуксовка), то производится выгрузка какого то процесса на диск.
Есть два крайних случая:
Маленькие страницы - улучшает распределение памяти, но увеличивает таблицу и частые переключения уменьшают производительность.
Большие страницы - наоборот.
Отдельные пространства команд и данных

Пример разделения пространства команд и данных
Совместно используемые страницы
Два процесса могут содержать в таблицах страниц указатели на общие страницы. В случае разделения пространств команд и данных это легко реализуется. Эти данные используются в режиме чтения.
В UNIX, когда создается дочерний процесс, у родительского и дочернего процесса общее пространство данных, и только если один из процессов попытается изменить данные, происходит прерывание и создание копии этой страницы, если записи не происходит, то оба процесса продолжают работать с общей памятью. Это приводит к экономии памяти.
Лучше всегда держать в запасе свободные блоки, освобождая их заранее, чем при нехватке памяти, искать и освобождать их.
Страничный демон - программа, периодически проверяющая состояние памяти, если занято много блоков, то производит выборочную выгрузку страниц.
В UNIX системах последовательность запуска процессов, следующая:
процесс 0 - это свопер
процесс 1 - это init
процесс 2 - это страничный демон
Страничный демон просыпается каждые 250мс, и проверяет количество свободных страничных блоков, если их меньше 1/4 памяти, то он начинает выгружать страницы на диск. Он использует модифицированный алгоритм часов, и он является глобальным (т.е. он не различает, какому процессу принадлежит страница).
Каждые несколько секунд свопер проверяет, есть ли на диске готовые процессы для загрузки в память для выполнения. При этом сам код программы в своп-файле не сохраняется, а подкачивается непосредственно из файла программы.
В LUNIX системе нет предварительной загрузки страниц и концепции рабочего набора.
Тексты программ и отображаемые файлы подгружаются прямо из файлов расположенных на диске.
Все остальное выгружается в раздел свопинга или файлы свопинга (их может быть от 0 до 8).
Алгоритм выгрузки страниц основан на страничном демоне (kswapd), он активизируется раз в секунда и проверяет достаточно ли свободных страниц. Демон может быть активизирован и принудительно, при не хватке памяти.
Демон состоит из трех процедур:
В первой используется алгоритм часов, она ищет редко используемые страницы страничного кэша и буферного кэша файловой системы.
Вторая процедура ищет совместно редко используемые страницы.
Третья ищет редко используемые страницы одиночных пользователей. Сначала сканируются страницы у того процесса, у которого их больше всего.
В LINUX есть еще один демон - bdflush. Он регулярно просыпается и проверяет, не превысило ли определенное значение количество измененных страниц, если да то он начинает их принудительно сохранять на диск.
В Windows системах сегментация (следующая лекция) не поддерживается. Поэтому каждому процессу выделяется виртуальное адресное пространство в 4 Гбайт (ограничение 32 разрядов). Нижние 2 Гбайт доступны для процесса, а верхние 2 Гбайт отображаются на память ядра. В Advanced server и Datacenter server процесс может использовать до 3 Гбайт.
Страницы имеют фиксированный размер (на процессорах Pentium 4 Кбайт, на Itanium 8 или 16 Кбайт) и подгружаются по требованию.

Конфигурация виртуального адресного пространства Windows
Белым цветом выделены области приватных данных процесса.
Затемнены области, совместно используемые всеми процессами.
Области в 64 Кбайт в начале и в конце, используются для защиты виртуального адресного пространства процесса, при попытке чтения или записи в эти области будет вызвано прерывание.
Системные данные содержат указатели и таймеры, доступные на чтение другим процессам.
Отображение верхней части на память ядра, позволяет при переключении потока в режим ядра не менять карту памяти.
У страниц есть три состояния:
свободное - не используется
фиксированное - данные отображены в странице
зарезервированное - зарезервировано, но не занято данными (при создании потока)
Файлы свопинга может быть до 16, разделов свопинга нет. В файлах свопинга хранятся только изменяемые страницы.
Опережающая подкачка в Windows не используется.
В Windows используется понятие рабочий набор.
Страничный демон в Windows состоит из :
менеджера балансового множества - проверяет, достаточно ли свободных страниц.
менеджера рабочих наборов - который исследует рабочие наборы и освобождает страницы.
Также в Windows есть следующие демоны:
свопер-демон
демон записи отображенных страниц - запись в отображенные файлы
демон записи модифицированных страниц
Лекция 8
Сегментация памяти
Рассмотрим пример, когда программа использует одно адресное пространство.

программа использует одно адресное пространство
Недостатки такой системы:
Один участок может полностью заполниться, но при этом останутся свободные участки. Можно конечно перемещать участки, но это очень сложно.
Эти проблемы можно решить, если дать каждому участку независимое адресное пространство, называемое сегментом.
Рассмотрим то же пример с использованием сегментов:

Сегментированная память
Каждый сегмент может расти или уменьшаться независимо от других.
Сегмент - это логический объект.
В этом случае адрес имеет две части:
номер сегмента
адрес в сегменте
Преимущества сегментации:
Сегменты не мешают друг другу.
Начальный адрес процедуры всегда начинается с (n,0). Что упрощает программирование.
Облегчает совместное использование процедур и данных.
Раздельная защита каждого сегмента (чтение, запись).
Если страницы имеют фиксированный размер, то сегменты нет.
У сегментов так же, как и у страниц, существует проблема фрагментации.
Т.к. памяти часто не хватает, стали использовать страничную организацию сегментов. При которой в памяти может находиться только часть сегмента.
| 2014 biblioonline ru |