Система файлов Linux, ориентированная на устройства, осуществляет доступ к дисковой памяти с помошью двух кэшей:
- Данные хранятся в кэше страниц, который объединен с системой виртуальной памяти;
- Метаданные хранятся в буферном кэше, причем каждый кэш индексируется блоком диска.
Linux разбивает устройства на три класса:
Блочные устройствадопускают произвольный доступ к полностью независимым блокам данных фиксированного размера.
Символьные устройствавключают большую часть всех других устройств; они не нуждаются в поддержке функциональности обычных файлов.
Сетевые устройствавзаимодействуют с сетевой системой ядра.
Модульная структура драйверов устройств в Linux изображена на рис. 1.5.

Рис. 1.5. Модульная структура драйверов устройств.
Блочные устройстваобеспечивают основной интерфейс ко всем дисковым устройствам в системе. Блочный буферный кэш служит для двух основных целей:
- Как буферный пул для активного ввода-вывода
- Как кэш для завершенного ввода-вывода.
Менеджер запросов управляет чтением и записью содержимого буферов с помощью драйвера блочного устройства.
Символьные устройства. Драйвер символьного устройства не поддерживает произвольный доступ к фиксированным блокам данных.
Драйвер символьного устройства регистрирует набор функций, реализующих разнообразные требуемые операции ввода-вывода.
Ядро не выполняет почти никакой предварительной обработки запроса на чтение или запись в файл символьного устройства, но просто передает данный запрос драйверу устройства.
Основное исключение из этого правила – это особый набор драйверов символьных устройств, которые реализуют доступ к терминальным устройствам(TTY); для них ядро поддерживает стандартный интерфейс.