- •1. Эволюция ос
- •2. Классификация ос
- •2.1. Особенности алгоритмов управления ресурсами
- •2.2. Особенности методов построения
- •2.3.Особенности аппаратных платформ
- •2.4. Особенности областей использования
- •Лекция 3. Архитектура операционной системы
- •3. 1. Ядро и вспомогательные модули ос
- •3. 2. Ядро и привилегированный режим
- •3. 3. Многослойная структура ос
- •3. 4. Аппаратная зависимость и переносимость ос
- •3. 5. Переносимость операционной системы
- •3. 6. Микроядерная архитектура
- •3 .6. 1. Концепция
- •3. 6. 2. Преимущества и недостатки микроядерной архитектуры
- •3. 7. Совместимость и множественные прикладные среды
- •3. 7. 1. Двоичная совместимость и совместимость исходных текстов
- •3. 7. 2. Трансляция библиотек
- •3. 7. 3. Способы реализации прикладных программных сред
- •Контрольные вопросы
- •Лекция 4. Основные концепции теории ос
- •4.1. Понятие процесса
- •4.2. Понятие ресурса
- •4.3. Концепция виртуализации
- •Одноочередные дисциплины обслуживания.
- •Многоочередная дисциплина обслуживания. Схема данной дисциплины приведена на рис. 5.
- •Дисциплина обслуживания при наличии приоритетов. Такая дисциплина строится на основе рассмотренной выше многоочередной дисциплины. На рис.6. Приводится ее условная схема.
- •4.5. Система прерываний
- •Лекция 5. Процессы и потоки (нити). Взаимодействие процессов.
- •5.1 Процессы
- •5.1.1 Понятие процесса
- •5.1.2 Модель процесса
- •5.1.3 Создание процесса
- •5.1.4 Завершение процесса
- •5.1.5 Иерархия процессов
- •5.1.6 Состояние процессов
- •5.2 Потоки (нити, облегченный процесс)
- •5.2.1 Понятие потока
- •5.2.2 Модель потока
- •5.2.3 Преимущества использования потоков
- •5.2.4 Реализация потоков в пространстве пользователя, ядра и смешанное
- •5.2.5 Особенности реализации Windows
- •5.3. Взаимодействие между процессами
- •5.3.1. Передача информации от одного процесса другому
- •5.3.2 Состояние состязания
- •5.3.3 Критические области
- •5.3.4 Взаимное исключение с активным ожиданием
- •5.3.5 Примитивы взаимодействия процессов
- •5.3.6 Семафоры
- •6.1 Основные понятия планирования процессов
- •6.3.2 Приоритетное планирование
- •6.3.3 Методы разделения процессов на группы
- •6.4 Планирование в системах реального времени
- •6.4.1 Планирование однородных процессов
- •6.4.2 Общее планирование реального времени
- •7.1 Взаимоблокировка процессов
- •7.2 Моделирование взаимоблокировок
- •7.3 Методы борьбы с взаимоблокировками
- •7.3.1 Пренебрежением проблемой в целом (страусовый алгоритм)
- •7.3.2 Обнаружение и устранение взаимоблокировок
- •7.3.3 Динамическое избежание взаимоблокировок
- •7.3.4 Предотвращение четырех условий, необходимых для взаимоблокировок
- •9.1 Принципы аппаратуры ввода-вывода
- •9.1.1 Устройства ввода-вывода
- •9.1.2 Контроллеры устройств
- •9.1.3 Отображаемый на адресное пространство памяти ввод-вывод
- •9.1.4 Прямой доступ к памяти (dma - Direct Memory Access)
- •9.1.5 Прерывания
- •9.2 Принципы программного обеспечения ввода-вывода
- •9.2.1 Задачи программного обеспечения ввода-вывода
- •9.2.2 Программный ввод-вывод
- •9.2.3 Управляемый прерываниями ввод-вывод
- •9.2.4 Ввод-вывод с использованием dma
- •9.3 Программные уровни и функции ввода-вывода
- •9.3.1 Обработчики прерываний
- •9.3.2 Драйвера устройств
- •9.3.3 Независимое от устройств программное обеспечение ввода-вывода
- •9.4. Программное обеспечение ввода-вывода пространства пользователя
- •9.5. Принципы, заложенные в подсистему управления вводом-выводом в ос unix
- •4.1. Понятие об организации и управлении физической памятью в операционных системах
- •4.2. Методы связного распределения основной памяти
- •4.2.1. Связное распределение памяти для одного пользователя
- •4.2.2. Связное распределение памяти при мультипрограммной обработке
- •4.2.3. Стратегии размещения информации в памяти
- •4.3. Организация виртуальной памяти
- •4.3.1. Основные концепции виртуальной памяти
- •4.3.2. Страничная организация виртуальной памяти
- •4.3.3. Сегментная организация виртуальной памяти
- •4.3.4. Странично-сегментная организация виртуальной памяти
- •4.4. Управление виртуальной памятью
- •4.4.1. Стратегии управления виртуальной памятью
- •4.4.2. Стратегии вталкивания (подкачки)
- •4.4.3. Стратегии размещения
- •4.4.4. Стратегии выталкивания
- •10.1.3 Типы файлов
- •Лекции 10-11. Системы управления данными (файловые системы)
- •10.1 Файлы
- •10.1.1 Именование файлов
- •10.1.2 Структура файла
- •Три типа структур файла.
- •Примеры исполняемого и не исполняемого файла
- •10.1.4 Доступ к файлам
- •10.1.5 Атрибуты файла
- •10.1.6 Операции с файлами
- •10.1.7 Файлы, отображаемые на адресное пространство памяти
- •Пример копирования файла через отображение в памяти.
- •10.2 Каталоги
- •10.2.1 Одноуровневые каталоговые системы
- •10.2.2 Двухуровневые каталоговые системы
- •Двухуровневая каталоговая система
- •10.2.3 Иерархические каталоговые системы
- •Иерархическая каталоговая система
- •10.2.4 Имя пути
- •10.2.5 Операции с каталогами
- •10.3 Структура файловой системы
- •Возможная структура файловой системы
- •10.4 Реализация файлов
- •10.4.1 Непрерывные файлы
- •5 Непрерывных файлов на диске и состояние после удаления двух файлов
- •10.4.2 Связные списки
- •Размещение файла в виде связного списка блоков диска
- •10.4.3 Связные списки при помощи таблиц в памяти
- •Примеры I-узла
- •10.5 Реализация каталогов
- •Варианты реализации каталогов
- •10.5.1 Реализация длинных имен файлов
- •Реализация длинных имен файлов
- •10.5.2 Ускорение поиска файлов
- •1 Использование хэш-таблицы для ускорения поиска файла.
- •2 Использование кэширования результатов поиска файлов для ускорения поиска файла.
- •10.6 Совместно используемые файлы
- •10.6.1 Жесткие ссылки
- •Иллюстрация проблемы, которая может возникнуть
- •10.6.2 Символьные ссылки
- •10.7 Организация дискового пространства
- •10.7.1 Размер блока
- •Скорости чтения/записи и эффективность использования диска, в системе с файла одинакового размера 2 Кбайта.
- •10.7.2 Учет свободных блоков
- •Основные два способа учета свободных блоков
- •10.7.3 Дисковые квоты
- •10.8 Надежность файловой системы
- •10.8.1 Резервное копирование
- •10.8.2 Непротиворечивость файловой системы
- •10.11 Производительность файловой системы
- •10.11.1 Кэширование
- •10.11.2 Опережающее чтение блока
- •10.11.3 Снижение времени перемещения блока головок
- •11.1 Файловой системы cd-дисков
- •11.1.1 Файловая система iso 9660
- •Каталоговая запись стандарта iso 9660.
- •11.1.3 Joliet расширения для Windows
- •11.1.4 Romeo расширения для Windows
- •11.1.5 Hfs расширения для Macintosh
- •11.1.6 Файловая система udf (Universal Disk Format)
- •11.2 Файловая система cp/m
- •11.2 Файловая система ms-dos (fat-12,16,32)
- •Каталоговая запись ms-dos, обратите внимание на пустые 10 байт, они будут задействованы в Windows 98
- •11.2.4 Расширение Windows 98 для fat-32
- •Формат каталогов записи с фрагментом длинного имени файла в Windows 98
- •11.3 Файловая система ntfs
- •Главная файловая таблица mft, каждая запись ссылается на файл или каталог.
- •Три записи mft для сильно фрагментированного файла. В первой записи указывается индексы на дополнительные записи.
- •Запись mft для небольшого каталога
- •11.3.1 Поиск файла по имени
- •11.3.2 Сжатие файлов
- •Пример 48-блочного файла, сжатого до 32 блоков
- •Запись mft для предыдущего файла.
- •11.3.3 Шифрование файлов
- •Шифрование файлов в ntfs
- •11.4 Файловая система unix v7
- •Расположение файловой системы unix
- •Каталоговая запись unix v7 в 16 байт Структура I-узела
- •11.4.1 Поиск файла
- •Этапы поиска файла по абсолютному пути /usr/sbin/mc
- •11.4.2 Блокировка данных файла
- •Блокировки данных файла без монополизации
- •11.4.3 Создание и работа с файлом
- •Связь между таблицей дескрипторов файлов, таблицей открытых файлов и таблицей I-узлов.
- •11.5 Файловая система bsd
- •Каталог bsd с тремя каталоговыми записями для трех файлов и тот же каталог после удаления файла zip, увеличивается длина первой записи.
- •11.6 Файловые системы linux
- •11.6.1 Файловая система ext2
- •Размещение файловой системы ext2 на диске
- •11.6.2 Файловая система ext3
- •11.6.3 Файловая система xfs
- •11.6.4 Файловая система rfs
- •11.6.4 Файловая система jfs
- •11.7 Сравнительная таблица некоторых современных файловых систем
- •Примеры монтирования удаленных файловых систем
- •Структура уровней файловой системы nfs
4.2. Методы связного распределения основной памяти
4.2.1. Связное распределение памяти для одного пользователя
Связное распределение памяти для одного пользователя, называемое также одиночным непрерывным распределением, применяется в ЭВМ, работающих в пакетном однопрограммном режиме под управлением простейшей ОС.
Вся основная часть ЭВМ, не занятая программами операционной системы, выделяется программе единственного на данном отрезке времени пользователя. Размер программы в этом случае ограничивается размером доступной основной памяти, однако существует возможность выполнения программ, размер которых превышает размер основной памяти, используя механизм оверлеев.
Организация памяти при связном распределении для одного пользователя показана на рис. 4.2.
Коэффициент использования памяти для рассматриваемого случая вычисляется по формуле
h с1=Vп/Vo, (4.2)
где Vп - размер программы пользователя; Vо - объем доступной для распределения основной памяти ЭВМ.
Функциями ОС в данном случае являются:
выделение программе необходимого пространства памяти;
защита памяти;
освобождение памяти.
Функция выделения памяти сводится к предоставлению программе всей доступной памяти ЭВМ.
Защита памяти в однопрограммных системах заключается в установке защиты областей памяти, занятых операционной системой, от воздействия программ пользователя. Эта функция реализуется при помощи одного регистра границы, встроенного в центральный процессор. Регистр границы содержит либо старший адрес команды, относящийся к операционной системе, либо младший адрес доступной программе основной памяти (адрес начала программы). Если программа пользователя пытается войти в область операционной системы, то вырабатывается прерывание по защите памяти, и программа аварийно завершается.
4.2.2. Связное распределение памяти при мультипрограммной обработке
При мультипрограммной обработке в памяти компьютера размещается сразу несколько заданий. Распределение памяти между заданиями в этом случае может быть выполнено следующими способами:
распределение фиксированными разделами;
распределение переменными разделами;
распределение со свопингом.
Распределение фиксированными разделами имеет две модификации:
а) с загрузкой программ в абсолютных адресах;
б) с загрузкой перемещаемых модулей.
При загрузке перемещаемых модулей вся оперативная память машины разбивается на некоторое количество разделов фиксированного размера. Размеры разделов могут не совпадать. В каждом разделе может быть размещено только одно задание.
В случае загрузки программ в абсолютных адресах при их подготовке указывается начальный адрес загрузки программ, совпадающий с начальным адресом раздела, в котором эта программа будет выполняться.
В случае загрузки перемещаемых модулей раздел, в котором будет размещено задание, либо автоматически определяется операционной системой в соответствии с реализованной в нем стратегией выбора раздела (“первый подходящий”, “самый подходящий”, “самый неподходящий”), либо указывается операционной системе специальными командами языка управления заданиями.
В обоих случаях задание монопольно владеет всем объемом оперативной памяти раздела, в который оно было помещено операционной системой.
Коэффициенты использования памяти при распределении с фиксированными разделами вычисляется по формулам:
(4.3)
(4.4)
где h СMi - коэффициент использования памяти i-го раздела; VОi - размер i-го раздела; VПi - длина программы, помещенной в i-ый раздел; NФ - количество разделов; VО - общий объем оперативной памяти, доступной для распределения.
Основным недостатком распределения памяти фиксированными разделами является неэффективное использование ресурсов вычислительной системы из-за возможного появления длинных очередей заданий, ожидающих освобождения конкретного раздела в то время, как остальные разделы пусты. Подобная ситуация изображена на рис. 4.3. Задания, ожидающие освобождения раздела С, могли бы разместиться и в разделах А или В, однако операционная система не позволяет им это сделать, т.к. в управляющей информации указан конкретный раздел, в котором эти задания должны выполняться - раздел С.
Способ распределения памяти фиксированными разделами используется в операционных системах ОС ЕС и IBM/360 в режиме MFT, в котором загрузка программ выполняется перемещаемыми модулями.
Защита памяти при распределении фиксированными разделами выполняется аналогично защите памяти для одного пользователя, только теперь необходимо наличие нескольких граничных регистров - по два регистра на каждый раздел. В одном из граничных регистров указывается нижняя граница раздела, а во втором - его верхняя граница. Если программа пользователя пытается обратиться к данным, расположенным вне области адресов данного раздела, то вырабатывается прерывание по защите памяти.
В мультипрограммных системах с фиксированными разделами наблюдается явление фрагментации памяти.
Фрагментация памяти - появление в памяти вычислительной машины чередования занятых и незанятых (свободных) участков оперативной памяти.
При распределении фиксированными разделами появление фрагментации обусловлено тем, что либо задания пользователей не полностью занимают выделенные им разделы, либо часть разделов остается незанятой.
На рис.4.4. показано проявление фрагментации оперативной памяти.
Уровень фрагментации можно оценить коэффициентом фрагментации Kф, вычисляемый по формуле
(4.5)
где Vдi - размер i-ой “дыры”, т.е. i-го участка свободной памяти, ограниченного программами пользователей; NД - количество “дыр”, т.е. участков свободной памяти, лежащих между программами пользователей; Vo - объем оперативной памяти, доступной для распределения.
Фрагментация памяти представляет собой нарушение односвязности пространства свободной памяти ЭВМ, что приводит к снижению эффективности использования памяти как одного из основных ресурсов вычислительной машины.
Распределение памяти переменными разделами предназначено для повышения эффективности использования оперативной памяти ЭВМ. Суть способа распределения памяти переменными разделами состоит в том, что заданиям, когда они поступают, выделяется такой объем памяти, который им требуется, т.е. размер раздела оперативной памяти, выделяемой каждому заданию, в точности соответствует размеру этого задания. Поэтому “перерасхода” памяти, как это происходит при распределении фиксированными разделами, в данном способе не наблюдается.
Имеется две модификации способа распределения переменными разделами:
распределение переменными неперемещаемыми разделами;
распределение переменными перемещаемыми разделами.
При распределении памяти переменными неперемещаемыми разделами (динамическими разделами) операционная система создает две таблицы: таблицу учета распределенных областей памяти и таблицу учета свободных областей памяти (“дыр”).
При поступлении очередного задания память для него отводится на этапе долгосрочного планирования, причем выделение памяти осуществляется по информации из таблицы учета “дыр” в соответствии с принятой в ОС стратегией размещения (“первый подходящий”, “самый подходящий”. “самый неподходящий”). При успешном распределении ОС корректирует обе таблицы - распределенных и свободных областей.
После окончания какого-либо задания занимаемый им участок памяти освобождается, и операционная система корректирует таблицу распределенных областей, вычеркивая из нее информацию о закончившемся задании, а также заносит в таблицу свободных областей данные о вновь появившейся “дыре”.
Рассмотрим следующий пример. Пусть начальное распределение памяти переменными разделами выполнено так, как показано в табл.4.1, 4.2 и на рис. 4.5а. После размещения заданий А, В, С и Д осталась свободная область такого размера, что ни одна из программ, продолжающих стоять в очереди, в эту область не помещается.
Таблица 4.1. Таблица распределенных областей
Номер раздела, ключ защиты |
Имя раздела |
Размер |
Адрес |
Состояние |
1 2 3 4 5 |
А В С Д Е |
100К 200К 100К 400К 100К |
50К 150К 350К 450К 850К |
Распределен Распределен Распределен Распределен Распределен |
Таблица 4.2. Таблица свободных областей
Номер свободной области |
Размер |
Адрес |
Состояние |
1 |
100К |
950К |
Доступна |
Предположим, что через некоторое время закончились задания А и С (см. рис.4.5б). Таблицы областей приобретают вид, показанный в табл. 4.3 и 4.4.
Таблица 4.3. Таблица распределенных областей: закончилось задание А
Номер раздела, ключ защиты |
Имя раздела |
Размер |
Адрес |
Состояние |
1 2 3 4 5 |
- В - Д Е |
- 200К - 400К 100К |
- 150К - 450К 850К |
Пусто Распределен Пусто Распределен Распределен |
Таблица 4.4. Таблица свободных областей: закончилось задание А
Номер свободной области |
Размер |
Адрес |
Состояние |
1 2 3 |
100К 100К 100К |
100К 350К 950К |
Доступна Доступна Доступна |
Можно видеть, что несмотря на наличие 274К свободной памяти, достаточной для размещения задания Е, стоящего первым в очереди, ОС не имеет возможности это сделать, т.к. свободная память разбита на два фрагмента по 100К каждый, в которых разместить программы, стоящие в очереди, невозможно. Этот пример иллюстрирует главный недостаток способа распределения переменными неперемещаемыми разделами - склонность к фрагментации основной памяти, что снижает эффективность работы вычислительной системы.
При распределении памяти переменными перемещаемыми разделами операционная система осуществляет действия, называемые уплотнением памяти, состоящими в перемещении всех занятых участков к одному или другому краю основной памяти. Благодаря этому вместо большого количества небольших “дыр”, образующихся при использовании распределения переменными неперемещаемыми разделами, формируется единый (связный) участок свободной памяти. На рис.4.5в показан результат уплотнения, когда находящиеся в основной памяти программы В, Д и Е перемещены на свободные участки после окончания работы программ А и С. Свободная память теперь представляет собой непрерывную область размером 274К, в которую ОС может поместить стоящее в очереди задание F. Этот процесс называют также дефрагментацией памяти.
Дефрагментация памяти, применяемая при распределении перемещаемыми разделами, имеет свои недостатки:
требуются дополнительные затраты времени;
во время уплотнения памяти система должна прекращать (приостанавливать) все другие работы, что зачастую может оказаться неприемлемым;
необходимость перемещения заданий в памяти требует хранения значительного объема информации, связанной с размещением программ в памяти, что увеличивает требования к памяти со стороны ОС;
при интенсивном потоке коротких программ может возникнуть необходимость частой дефрагментации памяти, так что затачиваемые на эти цели системные ресурсы могут оказаться неоправданными получаемой выгодой.
Распределение памяти со свопингом (от англ. swapping - подкачка) характеризуется тем, что в отличие от рассмотренных ранее способов распределения программы пользователей не остаются в основной памяти до момента их завершения. В простейшей системе со свопингом в каждый момент времени только одно задание пользователя находится в основной памяти и занимает ее до тех пор, пока оно может выполняться, а затем освобождает как память, так и центральный процессор для следующего задания. Таким образом, вся память целиком на короткий период выделяется одному заданию, затем в некоторый момент времени это задание выводится (выталкивается, т.е. осуществляется “откачка”), а очередное задание вводится (вталкивается, т.е. осуществляется “подкачка”). В обычном случае каждое задание, еще до своего завершения, будет много раз перекачиваться из внешней памяти в основную и обратно.
Для обеспечения свопинга во внешней памяти ОС создает один или несколько файлов подкачки, где хранятся образы оперативной памяти находящихся в работе заданий пользователей. Способ распределения памяти со свопингом применяется в простейших ОС, работающих в режиме разделения времени.
