Операционная система - ПО ввода-вывода
Программное обеспечение ввода-вывода часто организовано на следующих уровнях:
User Level Libraries- Это обеспечивает простой интерфейс для пользовательской программы для выполнения ввода и вывода. Например,stdio это библиотека, предоставляемая языками программирования C и C ++.
Kernel Level Modules - Это обеспечивает драйвер устройства для взаимодействия с контроллером устройства и независимыми от устройства модулями ввода-вывода, используемыми драйверами устройств.
Hardware - Этот уровень включает реальное оборудование и аппаратный контроллер, который взаимодействует с драйверами устройств и оживляет оборудование.
Ключевой концепцией при разработке программного обеспечения ввода-вывода является то, что оно должно быть независимым от устройства, где должна быть возможность писать программы, которые могут получить доступ к любому устройству ввода-вывода без необходимости заранее указывать устройство. Например, программа, которая считывает файл в качестве входных данных, должна иметь возможность читать файл на гибком диске, жестком диске или компакт-диске без необходимости изменять программу для каждого отдельного устройства.
Драйверы устройств
Драйверы устройств - это программные модули, которые можно подключить к ОС для работы с конкретным устройством. Операционная система требует помощи драйверов устройств для обработки всех устройств ввода-вывода. Драйверы устройств инкапсулируют код, зависящий от устройства, и реализуют стандартный интерфейс таким образом, чтобы код содержал чтение / запись регистров, зависящих от устройства. Драйвер устройства, как правило, пишется производителем устройства и поставляется вместе с устройством на компакт-диске.
Драйвер устройства выполняет следующие задачи -
- Принять запрос от вышестоящего к нему устройства независимого ПО.
- Взаимодействовать с контроллером устройства, чтобы выполнять операции ввода-вывода и выполнять необходимую обработку ошибок.
- Убедимся, что запрос выполнен успешно
Драйвер устройства обрабатывает запрос следующим образом. Предположим, что поступает запрос на чтение блока N. Если драйвер бездействует в момент поступления запроса, он немедленно начинает выполнение запроса. В противном случае, если драйвер уже занят каким-либо другим запросом, он помещает новый запрос в очередь ожидающих запросов.
Обработчики прерываний
Обработчик прерывания, также известный как подпрограмма обслуживания прерывания или ISR, представляет собой часть программного обеспечения или, более конкретно, функцию обратного вызова в операционной системе или, более конкретно, в драйвере устройства, выполнение которой запускается приемом прерывания.
Когда происходит прерывание, процедура прерывания делает все, что нужно для обработки прерывания, обновляет структуры данных и пробуждает процесс, который ожидал прерывания.
Механизм прерывания принимает адрес ─ число, которое выбирает конкретную процедуру / функцию обработки прерывания из небольшого набора. В большинстве архитектур этот адрес представляет собой смещение, хранящееся в таблице, называемой таблицей векторов прерываний. Этот вектор содержит адреса памяти специализированных обработчиков прерываний.
Программное обеспечение ввода-вывода, не зависящее от устройства
Основная функция аппаратно-независимого программного обеспечения заключается в выполнении функций ввода-вывода, общих для всех устройств, и обеспечении единого интерфейса для программного обеспечения пользовательского уровня. Хотя сложно написать полностью независимое от устройства программное обеспечение, мы можем написать несколько модулей, которые будут общими для всех устройств. Ниже приведен список функций программного обеспечения ввода-вывода, не зависящего от устройства.
- Единый интерфейс для драйверов устройств
- Именование устройств - мнемонические имена, сопоставленные с основным и второстепенным номерами устройств.
- Защита устройства
- Обеспечение независимого от устройства размера блока
- Буферизация, поскольку данные, поступающие с устройства, не могут быть сохранены в конечном месте назначения.
- Распределение памяти на блочных устройствах
- Выделение и выпуск выделенных устройств
- Отчет об ошибках
Программное обеспечение ввода-вывода в пространстве пользователя
Это библиотеки, которые предоставляют более богатый и упрощенный интерфейс для доступа к функциям ядра или, в конечном итоге, интерактивны с драйверами устройств. Большая часть программного обеспечения ввода-вывода пользовательского уровня состоит из библиотечных процедур, за некоторыми исключениями, такими как система буферизации, которая является способом работы с выделенными устройствами ввода-вывода в многопрограммной системе.
Библиотеки ввода-вывода (например, stdio) находятся в пользовательском пространстве для обеспечения интерфейса для резидентного ОС, независимого от устройства SW ввода-вывода. Например, putchar (), getchar (), printf () и scanf () являются примерами библиотеки ввода-вывода пользовательского уровня stdio, доступной в программировании на C.
Подсистема ввода-вывода ядра
Подсистема ввода-вывода ядра отвечает за предоставление множества услуг, связанных с вводом-выводом. Ниже приведены некоторые из предоставляемых услуг.
Scheduling- Ядро планирует набор запросов ввода-вывода, чтобы определить правильный порядок их выполнения. Когда приложение выдает системный вызов блокирующего ввода-вывода, запрос помещается в очередь для этого устройства. Планировщик ввода-вывода ядра изменяет порядок очереди, чтобы улучшить общую эффективность системы и среднее время отклика приложений.
Buffering - Подсистема ввода-вывода ядра поддерживает область памяти, известную как bufferкоторый хранит данные во время их передачи между двумя устройствами или между устройством с операцией приложения. Буферизация выполняется, чтобы справиться с несоответствием скорости между производителем и потребителем потока данных или для адаптации между устройствами, которые имеют разные размеры передачи данных.
Caching- Ядро поддерживает кэш-память, которая является областью быстрой памяти, в которой хранятся копии данных. Доступ к кэшированной копии более эффективен, чем доступ к оригиналу.
Spooling and Device Reservation- Спул - это буфер, в котором хранится вывод для устройства, такого как принтер, которое не может принимать чередующиеся потоки данных. Система буферизации копирует файлы буферизации из очереди на принтер по одному. В некоторых операционных системах буферизация управляется процессом системного демона. В других операционных системах это обрабатывается потоком ядра.
Error Handling - Операционная система, использующая защищенную память, может защитить от многих видов ошибок оборудования и приложений.