ОС / 2. ОС - Управление устройствами
.pdf31
Буферизация и кэширование
Таким образом, чтение с диска реально выполняется только в том случае, если требуемого сектора нет в кэше.
Запись на диск выполняется в следующих случаях:
при вытеснении "грязного" буфера из кэша;
при закрытии файла;
по специальной команде "очистки буферов" (flush).
Смысл кэширования – в резком сокращении количества обращений к диску.
Этого удается достичь, если алгоритм выбора вытесняемого буфера хорошо согласуется с гипотезой о локальности ссылок.
Операционные системы. Управление устройствами
32
Буферизация и кэширование
Идеальный (но нереальный) алгоритм: выбрать для вытеснения тот буфер, к которому дольше всего не будет обращения в будущем.
Этот алгоритм может использоваться для сравнения с реальными алгоритмами по качеству.
Другие алгоритмы выбора вытесняемого буфера:
выбрать тот буфер, который дольше всего находится в памяти – часто это неудачный выбор;
выбрать буфер случайным образом – не лучший, но и не худший способ;
выбрать тот буфер, к которому дольше всего не было обращений (алгоритм LRU) – лучший из реализуемых, тесно связан с идеей локальности ссылок.
Операционные системы. Управление устройствами
33
Буферизация и кэширование
Реализация алгоритма LRU
Плохая идея – хранить в заголовке буфера время последнего обращения и выбирать самое раннее время. Громоздко и медленно.
Хорошая идея – связать все кэш-буферы в линейный
список. |
LRU-список буферов |
Указатель на начало списка
Заголовок |
|
|
|
|
|
буфера |
|
|
|
|
|
Блок |
|
|
|
|
|
данных |
|
|
|
|
|
1 |
2 |
3 |
4 |
. . . |
N |
Блок для |
Самый "свежий" |
вытеснения |
блок |
Операционные системы. Управление устройствами
34
Буферизация и кэширование
Кэширование записи – небезопасная стратегия, в отличие от кэширования чтения. Данные в "грязных" буферах могут быть потеряны при сбое питания, при внезапном крахе системы, при выдергивании флэш-диска из разъема и т.п. Это плата за значительное повышение производительности системы.
Программы, требующие высокой надежности работы с данными, могут либо вообще не использовать кэш, либо "очищать" буфер после каждой операции записи (при этом сохраняется возможность использовать кэш при чтении).
Операционные системы. Управление устройствами
35
Буферизация и кэширование
Опережающее чтение – другая стратегия оптимизации работы с дисками, отличная от кэширования.
В том случае, если обработка файла ведется строго последовательно, от начала файла к концу, кэширование малоэффективно.
В этом случае система пытается при чтении сектора с диска прочитать "с запасом" еще несколько следующих секторов, к которым ожидается обращение в будущем.
Windows позволяет при открытии файла указать предполагаемый способ обращения (последовательный или произвольный).
Операционные системы. Управление устройствами
36
Драйверы устройств
Драйвер устройства – системная программа, которая под управлением ОС выполняет все операции с конкретным периферийным устройством.
Основные задачи драйвера:
обеспечить возможность стандартного обращения к любому устройству, скрывая от остальных частей ОС специфические особенности отдельных устройств;
добиться максимально эффективного использования всех функциональных возможностей и особенностей конкретных устройств.
Операционные системы. Управление устройствами
37
Некоторые типичные функции драйверов устройств
Для всех драйверов:
инициализация устройства;
открытие / закрытие устройства;
чтение данных;
запись данных;
выполнение специальных функций для конкретного устройства.
Для блочных драйверов:
форматирование;
поиск сектора.
Для символьных драйверов:
"неразрушающий" ввод.
Операционные системы. Управление устройствами
38
Основные блоки драйвера
Заголовок
имя устройства;
тип устройства;
число однотипных устройств;
объем памяти на устройстве;
адреса блока стратегии и блока прерываний.
Блок стратегии
прием заявок на выполнение операций;
ведение очереди заявок;
запуск и завершение операций.
Блок прерываний
выполнение ввода / вывода по прерываниям.
Операционные системы. Управление устройствами
39
Драйверы
Высокоуровневые драйверы:
не взаимодействуют с устройствами;
не содержат блока прерываний;
могут принимать заявки и использовать другие драйверы для их выполнения;
служат для различных преобразований данных:
трансляция графических примитивов в команды устройства;
упаковка (сжатие) / распаковка данных;
шифрование / расшифровка данных;
и т.п.
Операционные системы. Управление устройствами
40
Управление устройствами в BIOS
BIOS (Basic Input / Output System) – набор программ в постоянной памяти компьютера для простейших операций с устройствами и для выполнения начальной загрузки.
Не зависит от конкретной ОС.
Обработчики аппаратных прерываний BIOS – обеспечивают разумную реакцию системы на прерывания. В простейшем случае просто ставят флажок "Было прерывание".
Обработчики программных прерываний BIOS – дают набор функций ввода / вывода для конкретных устройств.
После загрузки ОС она может либо использовать обработку аппаратных и программных прерываний в BIOS, либо только аппаратных, либо полностью взять на себя обработку прерываний и выполнение ввода / вывода, минуя BIOS.
Операционные системы. Управление устройствами