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