Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОС / 2. ОС - Управление устройствами

.pdf
Скачиваний:
57
Добавлен:
01.06.2015
Размер:
393.99 Кб
Скачать

21

Активное и пассивное ожидание

Активное ожидание (busy waiting) – ожидание путем постоянной циклической проверки ожидаемого условия.

Пассивное ожидание (sleeping) – ожидание без затраты процессорного времени. Реализуется на базе аппаратных прерываний.

Эти понятия относятся не только к вводу/выводу, но и к многим другим ситуациям.

В прикладных программах использование активного ожидания есть признак низкой квалификации программиста. Современные ОС дают достаточные средства для использования пассивного ожидания.

Компромиссный вариант (например, если ПУ не дает аппаратных прерываний) – опрос через заданные интервалы времени, по прерываниям от таймера (polling).

Операционные системы. Управление устройствами

22

Синхронный и асинхронный ввод/вывод

На уровне прикладных программ детали реализации ввода/вывода не видны. Однако их отражением можно считать два вида функций ввода/вывода.

Синхронный ввод/вывод – вызванная функция начинает операцию и ожидает ее завершения, потом возвращает управление вызвавшей программе. Это обычный способ ввода/вывода.

Асинхронный ввод/вывод – функция начинает операцию, но не ожидает ее завершения. Управление сразу возвращается вызвавшей программе, которая может делать что-то полезное, пока выполняется ввод/вывод.

Операционные системы. Управление устройствами

23

Синхронный и асинхронный ввод/вывод

Рано или поздно программа должна убедиться, что операция асинхронного ввода/вывода завершилась. Для этого есть три способа:

переход в ожидание завершения (как бы вторая половинка синхронной операции);

проверка состояния операции (без ожидания);

назначение (при начале операции) функции завершения, которую система должна вызвать, когда операция закончится.

Windows обеспечивает все три способа на выбор.

UNIX вообще не имеет функций асинхронного ввода, там это решается путем запуска параллельного процесса ввода/вывода.

Для реализации функций асинхронного ввода/вывода необходимо, чтобы система использовала ввод/вывод по прерываниям, а не по опросу готовности.

Операционные системы. Управление устройствами

24

Буферизация и кэширование

Буферизация – такая организация ввода/вывода, при которой данные не передаются непосредственно с устройства в заданную область памяти (или из области памяти на устройство), а предварительно направляются во вспомогательную область памяти, называемую буфером.

Операционные системы. Управление устройствами

25

Буферизация и кэширование

Причины использования буферизации:

сглаживание неравномерности скоростей процессов;

распараллеливание ввода и обработки;

Операционные системы. Управление устройствами

26

Буферизация и кэширование

Причины использования буферизации:

согласование размеров логической и физической записи.

Программа:

 

логические записи

100

 

 

 

 

 

Запись 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

100

 

 

 

 

 

Запись 2

 

 

 

 

 

 

 

 

 

 

 

 

100

 

 

 

 

 

Запись 3

 

 

 

 

 

 

 

 

 

 

 

 

100

 

 

 

 

 

Запись 4

 

 

 

 

 

 

 

 

 

 

 

 

100

 

 

 

 

 

Запись 5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

100

 

 

 

 

 

 

Запись

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

100

 

 

 

 

 

Запись 7

 

 

 

 

 

 

 

 

 

 

 

 

100

 

 

 

 

 

Запись 8

 

 

 

 

 

 

 

 

 

 

 

 

100

 

 

 

 

 

Запись 9

 

 

 

 

 

 

 

 

 

 

 

 

100

 

 

 

 

Запись 10

 

 

 

 

 

 

 

 

 

 

 

 

100

 

 

 

 

Запись 11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Логические и физические записи

Файл на диске: физические записи

Запись 1

512

Буфер

Запись 2

512

Операционные системы. Управление устройствами

27

Буферизация и кэширование

Кэширование (cache) – использование сравнительно небольшой по объему, но быстродействующей памяти для того, чтобы уменьшить количество обращений к более медленной памяти большого объема.

Аппаратное кэширование основной памяти (здесь не рассматривается):

"небольшая, но быстрая" – внутренняя кэш-память процессора;

"большая, но медленная" – основная память компьютера.

Программное кэширование дисков:

"небольшая, но быстрая" – основная память компьютера;

"большая, но медленная" – дисковая память.

Операционные системы. Управление устройствами

28

Буферизация и кэширование

Гипотеза о локальности ссылок – обоснование пользы кэширования:

Если в какой-то момент времени произошло обращение к определенному участку данных, то в ближайшее время можно с высокой вероятностью ожидать повторения обращений к тем же самым данным или же к соседним участкам данных.

Эту гипотезу нельзя доказать, но практика подтверждает ее справедливость в большинстве случаев.

Коли так, то есть смысл, один раз прочитав данные, придержать их поближе на случай повторного обращения.

Операционные системы. Управление устройствами

29

Буферизация и кэширование

Кэш – массив буферов в основной памяти.

Буфер состоит из заголовка и блока данных.

Блок данных по размеру соответствует сектору диска.

Заголовок содержит адрес сектора, хранящегося в буфере, и флаги состояния буфера.

При запросе на чтение сектора диска система проверяет по заголовкам, нет ли данного сектора в кэше. Если есть, то обращение к диску не нужно, данные берутся из кэш-буфера.

Операционные системы. Управление устройствами

30

Буферизация и кэширование

При запросе на запись данные записываются в кэш-буфер, который при этом помечается флагом "грязный", т.е. не соответствующий данным на диске.

Если требуемого сектора нет в кэше, для него должен быть выделен свободный буфер и выполнена операция чтения сектора с диска в буфер.

Поскольку количество буферов ограничено, может потребоваться "вытеснить" один из буферов из кэша.

Если вытесняемый буфер "грязный", он должен быть записан на диск.

Операционные системы. Управление устройствами