Когда запросы на чтение и запись передаются по слоям через VFS, они проходят драйверы файловой системы и кеш страниц1 и заканчиваются входом в драйвер блокового устройства для выполнения настоящих операций ввода-вывода на устройстве, хранящем требуемые данные.Как упоминалось ранее, драйвер блочного устройства создает и инициализирует очередь запросов во время инициализации. Также во время инициализации определяется алгоритм планировки ввода-вывода, используемого для чтения и записи с обслуживаемого блочного устройства.
Драйвер устройства регистрируется во время инициализации драйверов. При этом драйвер добавляется в таблицу драйверов ядра (driver table), а номер драйвера отображается в структуру block_device_operations. Структура block_device_operations хранит функции для запуска и остановки данного блочного устройства в системе:
include/linux/fs.h
760 struct block_device_operations {
761 int (*open) (struct inode *, struct file *);
762 int (*release) (struct inode *, struct file *); 7 63 int (*ioctl) (struct inode *, struct file *,
unsigned, unsigned long);
Как говорилось ранее, операционная система Linux рассматривает все устройства в качестве файлов. Любые полученные элементы от блочного устройства могут быть связаны случайным образом. Хорошим примером блочного устройства является дисковый привод. Файловая система для диска IDE называется /dev/hda. С /dev/hda. связан старший номер 3 и младший номер 0. Сам дисковый привод обычно обладает контроллером и по своей сути является электромеханическим устройством (т. е. имеющим движущиеся части). Раздел «Общая концепция файловых систем» в гл.
Существует два типа файлов устройств: файлы блочных устройств и файлы символьных устройств. Блочные устройства передают данные порциями, а символьные устройства (как следует из названия) передают данные по символу за один раз. Третий тип устройств, сетевые устройства, является специальным случаем, наследующим свойства как блочных, так и символьных устройств.
Процессор общается с окружающими устройствами через набор электрических связей, называемых линиями (lines). Шины (busses) - это группы линий с похожими функциями. Наиболее простой тип шины идет к процессору и от него и использует адресацию устройства; для посылки, получения данных (data) от устройств и для передачи управляющей информации, такой, как устройство-зависимая инициализация и характеристики. Поэтому мы можем сказать, что основными методами общения процессора с устройствами (и наоборот) являются общение через адресную шину, шину данных и управляющую шину.