В главе 2, "Обзор операционных систем", при обсуждении структуры системы мы придавали особое значение иерархической природе современных операционных систем. Философия иерархии состоит в том, что функции операционной системы следует разделять в соответствии с их сложностью, характерной временной шкалой и уровнем абстракции. Следуя этому подходу, можно прийти к такой организации операционной системы, при которой она будет представлена серией уровней. Каждый уровень представляет связанное подмножество функций, необходимых операционной системе. Выполнение примитивных функций передается более низкому уровню; при этом более высокий уровень не знает никаких деталей выполнения поставленных задач более низким уровнем. Со своей стороны любой из уровней обеспечивает обслуживание следующего верхнего уровня. В идеале уровни нужно организовывать таким образом, чтобы изменения в одном уровне не приводили к необходимости внесения изменений в остальных уровнях.
Вообще говоря, чем ниже уровень, тем более короткой оказывается его временная шкала. Некоторые части операционной системы должны непосредственно взаимодействовать с аппаратным оборудованием компьютера, где продолжительность различных событий может оказаться на уровне нескольких микросекунд; другие части операционной системы работают с пользователем, ввод команд которым может осуществляться со скоростью один раз в несколько секунд. Использование множества уровней идеально подходит для этих условий.
Такая философия по отношению к средствам ввода-вывода определяет организацию, приведенную на рис. 11.5. Детали организации будут зависеть от типа устройства и его применения. На рисунке представлены три наиболее важные логические схемы. Естественно, что конкретная операционная система может и не соответствовать в точности этим схемам, но общие положения остаются справедливыми в любом случае, и большинство операционных систем используют ввод-вывод приблизительно таким образом.
Рассмотрим в первую очередь самый простой случай, когда локальное периферийное устройство осуществляет связь посредством потока байтов или записей (рис. 11.5,а). В этом случае уровни будут следующими.
• Логический ввод-вывод. Модуль логического ввода-вывода обращается с устройством как с логическим ресурсом и не обращает внимания на детали фактического управления устройством. Логический модуль ввода-вывода работает посредником между пользовательскими процессами (предоставляя им набор высокоуровневых функций) и устройством.
• Устройство ввода-вывода. Запрошенные операции и данные (буферизированные символы, записи и т.п.) конвертируются в соответствующие последовательности инструкций ввода-вывода, команды управления каналом и команды контроллера. Для более эффективного использования устройства может быть применена буферизация.
• Планирование и контроль. На этом уровне происходит реальная организация очередей и планирование операций ввода-вывода, а также управление выполнением операций. Осуществляется работа с прерываниями, получение и передача информации о состоянии устройства. Это уровень программного обеспечения, которое непосредственно взаимодействует с контроллером ввода-вывода, а следовательно, с аппаратным обеспечением устройства.
Для устройств связи структура ввода-вывода (рис. 11.5,6) выглядит почти так же, как и рассмотренная выше. Принципиальное отличие состоит в том, что логический модуль ввода-вывода заменяется коммуникационной архитектурой, которая, в свою очередь, может состоять из некоторого количества уровней.
На рис. 11.5,в представлена характерная структура управления вводом-выводом во внешнее запоминающее устройство, поддерживающее файловую систему. Здесь имеется три уровня, с которыми мы не сталкивались ранее.
Управление каталогами. На этом уровне происходит преобразование символьных имен файлов в идентификаторы, указывающие на файл — непосредственно или косвенно, с использованием файлового дескриптора или индексной таблицы. Этот уровень также связан с такими пользовательскими операциями с каталогами файлов, как их добавление, удаление или реорганизация.
Рис. 11.5. Модель организации ввода-вывода
• Файловая система. Этот уровень работает с логической структурой файлов и операциями с ними, такими, как открытие, закрытие, чтение и запись. Кроме того, управление правами доступа также происходит на этом уровне.
• Физическая организация.Как адреса виртуальной памяти должны быть преобразованы в физические адреса основной памяти с учетом сегментации и страничной организации, так и логические ссылки на файлы и записи должны быть конвертированы в физические адреса конкретного внешнего запоминающего устройства с учетом физической структуры дорожек и секторов внешнего запоминающего устройства. На этом же уровне происходит общее управление распределением пространства внешней памяти и буферов основной памяти.
Учитывая значимость файловой системы, в этой и следующей главе мы остановимся на рассмотрении ее различных компонентов. В данной главе обсуждаются три нижних уровня; два верхних уровня рассматриваются в главе 12, "Управление файлами".