Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Обзор системы ввода/вывода Непосредственные устройства и физический ввод/вывод

Непосредственные устройства и физический ввод/вывод

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

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

Эта проверка позволяет осуществить пересылку в блоках соответственно максимальному размеру передач, поддерживаемых устройством.

Операции непосредственного ввода/вывода требуют от аппаратного устройства переноса данных непосредственно в или из буфера данных в адресном пространстве программы пользователя, описанном параметром uio. Таким образом, в отличие от операций ввода/вывода, которые осуществляют непосредственный доступ к памяти (DMA) из буферов в адресном пространстве ядра, непосредственные операции ввода/ вывода должны проверить, что буфер пользователя доступен устройству, и заблокировать его в памяти на время выполнения переноса данных.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 65 гостей онлайн

Реклама на сайте: