Большинство непосредственных устройств отличаются от файловых систем лишь способом выполнения ввода/вывода. В то время как файловые системы читают и записывают данные в и из буферов ядра, непосредственные устройства передают данные в и из буферов пользователя. Обход буферов ядра устраняет необходимость копирования одних участков памяти в другие, что должны делать файловые системы, но лишает приложений также и преимуществ кеширования данных. Кроме того, для устройств, поддерживающих как непосредственный доступ, так и доступ файловой системы, приложения должны позаботиться о сохранении согласованности данных в буферах ядра и данных, записанных непосредственно в устройство. Непосредственное устройство должно использоваться лишь тогда, когда файловая система демонтирована или монтирована с правом только для чтения. Прямой доступ используется многими утилитами файловой системы, такими, как программа проверки файловой системы, fsck, и программами, которые читают и записывают на резервные носители (например, tar, dump и restore).
Поскольку непосредственные устройства обходят буферы ядра, они отвечают за управление собственными структурами буферов. Большинство устройств для описания своего ввода/вывода занимают буферы подкачки. Процедуры чтения и записи используют процедуру physio(), чтобы начать операцию непосредственного ввода/ вывода. Параметр strategy идентифицирует процедуру стратегии блочного устройства, которое начинает операцию ввода/вывода на устройство. Буфер используется physio() при конструировании запроса(-ов), делаемых процедуре стратегии. Устройство, флаг чтения-записи и параметры uio полностью определяют операцию ввода/вывода, которая должна быть сделана. Процедурой physio() проверяется максимальный размер передачи для устройства, для того чтобы настроить размер каждой пересылки ввода/вывода, до того как последняя будет передана процедуре стратегии.
Эта проверка позволяет осуществить пересылку в блоках соответственно максимальному размеру передач, поддерживаемых устройством.

Операции непосредственного ввода/вывода требуют от аппаратного устройства переноса данных непосредственно в или из буфера данных в адресном пространстве программы пользователя, описанном параметром uio. Таким образом, в отличие от операций ввода/вывода, которые осуществляют непосредственный доступ к памяти (DMA) из буферов в адресном пространстве ядра, непосредственные операции ввода/ вывода должны проверить, что буфер пользователя доступен устройству, и заблокировать его в памяти на время выполнения переноса данных.
- 29/10/2010 16:19 - Управление дескрипторами и службы дескрипторов
- 27/10/2010 14:46 - Метки дисков
- 27/10/2010 14:21 - Сортировка запросов дискового ввода/вывода
- 27/10/2010 11:07 - Точки входа для драйверов дисковых устройств
- 24/10/2010 15:46 - Точки входа для драйверов символьных устройств
- 20/10/2010 23:48 - Обработка прерываний
- 20/10/2010 17:08 - Очередь ввода/вывода
- 18/10/2010 18:44 - Драйверы устройств
- 18/10/2010 06:21 - Отображение ввода/вывода от пользователя на устройство