Структуры данных для ввода-вывода в ядре ОС

Подсистема ввода-вывода в ядре ОС

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

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

ОС обеспечивает буферизацию– запись данных в память в процессе передачи между устройствами. Цели буферизации:

  • балансировка устройств с разными скоростями;
  • сглаживание несоответствия размера данных для работы с устройством;
  • поддержка "семантики копирования".

Как неоднократно отмечалось, для оптимизации работы с внешними устройствами организуется кэширование– использование быстрой память, в которой хранится копия данных (фактически в ней сохраняются наиболее часто используемые блоки). Следует, однако, иметь в виду, что содержимое кэш-памяти - всегда только копия реальных данных, поэтому в некоторых случаях приходится синхронизировать содержимое кэша с содержимым диска, чтобы не допустить рассогласованности информации. Кэширование - ключ к повышению производительности дисковых устройств.

Весьма важна также такая функция ОС, как буферизация вывода (spooling)– задержка вывода на устройство, с целью поддержания целостности информации, выводимой одним и тем же процессом. Типичный пример – печать на принтер.

ОС выполняет также резервирование устройства– обеспечение монопольного доступа к нему. Имеются системные вызовы для занятия и освобождения устройства монопольного доступа. ОС контролирует отсутствие тупиков (deadlocks), которые возможны при монопольном использовании устройств.

ОС выполняет обработку ошибокввода-вывода. Система поддерживает восстановление информации после чтения с диска, недоступности устройства, временных сбоев при записи. В большинстве случаев возвращается номер (код) ошибки, в случае, если запрос на ввод-вывод завершается неудачно. В системные журналы записывается информация об обнаруженных проблемах.

В ядре ОС хранится информация о состоянии для компонент ввода-вывода, включая таблицы открытых файлов, сетевых соединений, состояние символьных устройств. Она представляет собой большое число сложных структур данных (очередей ввода-вывода и таблиц устройств) для контроля буферов, распределения памяти и др. Реализация многих из этих системных структур использует объектно-ориентированные методы и передачу сообщений.

Структура модулей ввода-вывода в системе UNIX изображена на рис. 21.5.

Рис. 21.5. Структура модулей ввода-вывода в ядре UNIX.