Структуры данных для ввода-вывода в ядре ОС
Подсистема ввода-вывода в ядре ОС
Операционная система управляет устройствами ввода-вывода.
ОС осуществляет планирование, включая упорядочение запросов на ввод-вывод в очередях к каждому устройству.
ОС обеспечивает буферизацию– запись данных в память в процессе передачи между устройствами. Цели буферизации:
- балансировка устройств с разными скоростями;
- сглаживание несоответствия размера данных для работы с устройством;
- поддержка "семантики копирования".
Как неоднократно отмечалось, для оптимизации работы с внешними устройствами организуется кэширование– использование быстрой память, в которой хранится копия данных (фактически в ней сохраняются наиболее часто используемые блоки). Следует, однако, иметь в виду, что содержимое кэш-памяти - всегда только копия реальных данных, поэтому в некоторых случаях приходится синхронизировать содержимое кэша с содержимым диска, чтобы не допустить рассогласованности информации. Кэширование - ключ к повышению производительности дисковых устройств.
Весьма важна также такая функция ОС, как буферизация вывода (spooling)– задержка вывода на устройство, с целью поддержания целостности информации, выводимой одним и тем же процессом. Типичный пример – печать на принтер.
ОС выполняет также резервирование устройства– обеспечение монопольного доступа к нему. Имеются системные вызовы для занятия и освобождения устройства монопольного доступа. ОС контролирует отсутствие тупиков (deadlocks), которые возможны при монопольном использовании устройств.
ОС выполняет обработку ошибокввода-вывода. Система поддерживает восстановление информации после чтения с диска, недоступности устройства, временных сбоев при записи. В большинстве случаев возвращается номер (код) ошибки, в случае, если запрос на ввод-вывод завершается неудачно. В системные журналы записывается информация об обнаруженных проблемах.
В ядре ОС хранится информация о состоянии для компонент ввода-вывода, включая таблицы открытых файлов, сетевых соединений, состояние символьных устройств. Она представляет собой большое число сложных структур данных (очередей ввода-вывода и таблиц устройств) для контроля буферов, распределения памяти и др. Реализация многих из этих системных структур использует объектно-ориентированные методы и передачу сообщений.
Структура модулей ввода-вывода в системе UNIX изображена на рис. 21.5.
Рис. 21.5. Структура модулей ввода-вывода в ядре UNIX.