
- •Ос как система управления ресурсами
- •Второй период (1955 - 1965)
- •Третий период (1965 - 1980)
- •Четвертый период (1980 - настоящее время)
- •Особенности аппаратных платформ
- •Особенности областей использования
- •Особенности методов построения
- •Структура сетевой операционной системы
- •Одноранговые сетевые ос и ос с выделенными серверами
- •Ос для рабочих групп и ос для сетей масштаба предприятия
- •Состояние процессов
- •Контекст и дескриптор процесса
- •Алгоритмы планирования процессов
- •Вытесняющие и невытесняющие алгоритмы планирования
- •Критическая секция
- •V(s) : переменная s увеличивается на 1 одним неделимым действием; выборка, инкремент и запоминание не могут быть прерваны, и к s нет доступа другим процессам во время выполнения этой операции.
- •Управление памятью
- •Типы адресов
- •Распределение памяти разделами переменной величины
- •Перемещаемые разделы
- •Страничное распределение
- •Сегментное распределение
- •Странично-сегментное распределение
- •Свопинг
- •Иерархия запоминающих устройств. Принцип кэширования данных
- •Организация программного обеспечения ввода-вывода
- •Обработка прерываний
- •Драйверы устройств
- •Независимый от устройств слой операционной системы
- •Пользовательский слой программного обеспечения
- •Файловая система
- •Имена файлов
- •Типы файлов
- •Логическая организация файла
- •Физическая организация и адрес файла
- •Права доступа к файлу
- •Кэширование диска
- •Общая модель файловой системы
- •Отображаемые в память файлы
- •Современные архитектуры файловых систем
- •Порождение процессов
- •If( fork() ) { действия отца }
- •Планирование процессов
- •Файловые системы unix System V Release 4
- •Veritas - отказоустойчивая файловая система с транзакционным механизмом операций;
- •Структура файловой системы
- •Имена файлов
- •Привилегии доступа
- •Физическая организация файла
- •Структуры индексных дескрипторов и каталогов
- •Виртуальная файловая система vfs
- •Символьные связи
- •Именованные конвейеры
- •Р ис. 5.9. Связь процесса с его файлами
- •Сетевая файловая система nfs
- •Р ис. 5.10. Многоуровневая структура nfs
- •Управление памятью. Свопинг
- •Vp и offset: указатель на vnode файла и смещение в этом файле, которые задают адрес, начиная с которого расположены на диске данные этого сегмента;
- •Структура физической памяти
- •Р ис. 5.14. Упрощенная схема выполнения запросов подсистемой буферизации
- •Новый буферный кэш
- •Р ис. 5.15. Организация связи ядра с драйверами
- •Драйверы
- •. 5.16. Взаимодействие секции записи драйвера с модулем обработки прерывания
Структура физической памяти
На рисунке 5.12 показан пример распределения физической памяти. В самых нижних адресах находится текстовый сегмент ядра, затем располагается сегмент данных ядра, далее может идти динамический сегмент данных ядра, в котором отводится место для структур ядра, например, для дескрипторов процессов. В оставшейся физической памяти могут располагаться в общем случае несколько областей для хранения страниц пользовательских процессов. Эти области описываются таблицей pageac_table[ ], каждый элемент которой содержит номера начальной и конечной страницы области, указатели на дескрипторы первой и последней страниц, размещенных в этой области.
Для каждой физической страницы имеется дескриптор страницы - структура page, в котором содержится информация о том, свободна или занята страница, загружена ли в нее в данный момент виртуальная страница, модифицировано ли ее содержимое, сколько процессов хотят сохранить эту страницу в памяти и другая информация. В каждый момент времени дескриптор физической страницы может состоять в одном из следующих списков:
Список хэшированных виртуальных дескрипторов файла. Каждый отображаемый или выполняемый файл описывается виртуальным дескриптором (vnode). Страницы, относящиеся к отдельному vnode, связываются в список. При этом используется хэширование для быстрого поиска в случае, когда произойдет страничное прерывание.
Список свободных страниц.
Список страниц, образующих кэш страниц. Этот список подобен списку свободных станиц, но данные в этих страницах остаются действительными. Страницы обычно помещаются в список кэша процессом pageout. Если происходит поиск какой-либо страницы и эта страница находится в списке страниц кэша, то она повторно используется. Например, страница может быть изъята процессом pageout и помещена в кэш-список. Процесс может затем повторно использовать эту страницу перед тем, как операционная система назначит ее другому процессу. Таким образом, кэшированная страница может быть повторно назначена процессу без перемещения данных с диска.
Рис. 5.12. Структуры, описывающие физическую память
Д
ля
вытеснения виртуальных страниц с целью
освобождения физической памяти в UNIX
System V Release 4 используется несколько
констант, описывающих размер свободной
памяти. Эти константы используются как
пороговые значения для действий по
освобождению физической памяти (рисунок
5.13). Если свободная память в системе
превышает порог lotsfree, то процесс pageout
не вызывается вовсе. Если размер свободной
физической памяти находится в пределах
от desfree до lotsfree, то pagefree вызывается 4 раза
в секунду, а если ее размер становится
меньше порога desfree, то pagefree вызывается
при каждом цикле работы функции clock().
Если же свободная память становится
меньше порога GPGSLO, то в действие вступает
процесс свопинга, который в UNIX System V
Release 4 называется shed. Этот процесс выбирает
определенный процесс, а затем выгружает
все его страницы на диск, освобождая
тем самым сразу значительное место в
памяти. Таким образом UNIX System V Release 4
использует механизм свопинга процессов,
который был основным механизмом в ранних
версиях UNIX для освобождения физической
памяти для других процессов. Процесс,
выгруженный на диск, исключается из
претендентов на выполнение. Через
некоторое время процесс shed вызывается
снова. Если количество свободной памяти
превысило GPGSL, то процесс загружается
с диска в память и включается в очередь
готовых к выполнению процессов.
Рис. 5.13. Пороговые значения для действий по освобождению физической памяти
Процесс вытеснения страниц pageout использует при поиске страниц для вытеснения алгоритм NRU (Not Recently Used), выбирающий для вытеснения не используемые в последнее время страницы. Этот алгоритм использует признаки модификации и доступа страниц. Процесс pageout периодически очищает эти признаки у тех страниц, которые не свободны. Если при следующем вызове процесс pageout видит, что эти признаки равны нулю, то значит доступа к этим страницам с момента предыдущего вызова процесса pageout не было, поэтому эти страницы вытесняются на диск. Процесс pageout циклически проверяет все страницы физической памяти, поэтому он называется часовым алгоритмом, что отражает просмотр страниц как бы по часовой стрелке. Было замечено, что обход всех страниц при их большом количестве занимает слишком много времени, поэтому в UNIX System V Release 4 применяется модифицированный часовой алгоритм. Он хорошо иллюстрируется часами с двумя стрелками, которые движутся синхронно, то есть угол между ними сохраняется постоянным. Первая стрелка указывает на виртуальные страницы, признаки которых обнуляются, а вторая - на страницы, признаки которых проверяются и, в случае их равенства нулю, страница вытесняется их физической памяти. При каждом вызове процесс pageout делает лишь часть полного оборота, поэтому при небольшом зазоре между стрелками в памяти остаются только страницы, к которым идет интенсивное обращение.
Система ввода-вывода
Основу системы ввода-вывода ОС UNIX составляют драйверы внешних устройств и средства буферизации данных. ОС UNIX использует два различных интерфейса с внешними устройствами: байт-ориентированный и блок-ориентированный.
Подсистема буферизации
Любой запрос на ввод-вывод к блок-ориентированному устройству преобразуется в запрос к подсистеме буферизации, которая представляет собой буферный пул и комплекс программ управления этим пулом.
Буферный пул состоит из буферов, находящихся в области ядра. Размер отдельного буфера равен размеру блока данных на диске.
С каждым буфером связана специальная структура - заголовок буфера, в котором содержится следующая информация:
Данные о состоянии буфера:
занят/свободен,
чтение/запись,
признак отложенной записи,
ошибка ввода-вывода.
Данные об устройстве - источнике информации, находящейся в этом буфере:
тип устройства,
номер устройства,
номер блока на устройстве.
Адрес буфера.
Ссылка на следующий буфер в очереди свободных буферов, назначенных для ввода-вывода какому-либо устройству.
Упрощенный алгоритм выполнения запроса к подсистеме буферизации приведен на рисунке 5.14. Данный алгоритм реализуется набором функций, наиболее важные из которых рассматриваются ниже.
Функция bwrite - синхронная запись. В результате выполнения данной функции немедленно инициируется физический обмен с внешним устройством. Процесс, выдавший запрос, ожидает результат выполнения операции ввода-вывода. В данном случае в процессе может быть предусмотрена собственная реакция на ошибочную ситуацию. Такой тип записи используется тогда, когда необходима гарантия правильного завершения операции ввода-вывода.
Функция bawrite - асинхронная запись. При таком типе записи также немедленно инициируется физический обмен с устройством, однако завершения операции ввода-вывода процесс не дожидается. В этом случае возможные ошибки ввода-вывода не могут быть переданы в процесс, выдавший запрос. Такая операция записи целесообразна при поточной обработке файлов, когда ожидание завершения операции ввода-вывода не обязательно, но есть уверенность в повторении этой операции.
Функция bdwrite - отложенная запись. При этом передача данных из системного буфера не производится, а в заголовке буфера делается отметка о том, что буфер заполнен и может быть выгружен, если потребуется освободить буфер.
Функции bread и getblk - получить блок. Каждая из этих функций ищет в буферном пуле буфер, содержащий указанный блок данных. Если такого блока в буферном пуле нет, то в случае использования функции getblk осуществляется поиск любого свободного буфера, при этом возможна выгрузка на диск буфера, содержащего в заголовке признак отложенной записи. В случае использования функции bread при отсутствии заданного блока в буферном пуле организуется его загрузка в какой-нибудь свободный буфер. Если свободных буферов нет, то также производится выгрузка буфера с отложенной записью. Функция getblk используется тогда, когда содержимое зарезервированного блока не существенно, например, при записи на устройство данных, объем которых равен одному блоку.