Доступ к блочным устройствам осуществляется с помощью трех основных точек входа:
,
и
. При этом за фактическое выполнение ввода/вывода отвечает
. Единственным аргументом, передаваемым этой функции, является указатель на структуру buf
, представляющую собой заголовок буфера обмена, с которой мы уже встречались в предыдущей главе при разговоре о буферном кэше. Структура buf
содержит всю необходимую для операций ввода/вывода информацию. Основные поля структуры buf
:
b_flags | Флаги. Определяют состояние буфера (например, B_BUSY или B_DONE ) и направление передачи данных (B_READ , B_WRITE , B_PHYS ) |
av_back , av_forw | Указатели двухсвязного рабочего списка буферов, ожидающих обработки драйвером |
b_bufsize | Размер буфера |
b_un.b_addr | Виртуальный адрес буфера |
b_blkno | Номер блока начала данных на устройстве |
b_bcount | Число байтов, которые требуется передать |
b_dev | Старший и младший номера устройства |
Использование заголовка buf
при передачи блока данных показано на рис. 5.7.
Рис. 5.7. Обмен данными с блочным устройством (диском)
Ядро адресует дисковый блок, указывая vnode и смещение. Если доступ осуществляется к специальному файлу устройства, то смещение является физическим, отсчитываемым от начала устройства. Например, если специальный файл устройства /dev/dsk/c0t0d0s1 обеспечивает доступ ко второму разделу жесткого диска, то смещение будет отсчитываться от начала этого раздела. Если vnode представляет обычный файл, то смещение является логическим, отсчитываемым от начала файла.
Таким образом, блок устройства, содержащего файловую систему, может быть адресован двумя способами — либо через обычный файл и логическое смещение, либо через специальный файл устройства и физическое смещение на этом устройстве. Это, в свою очередь, может привести к различной идентификации одного и того же блока и, как следствие, двум различным копиям блока в памяти. Результатом такого несоответствия может стать потеря или нарушение целостности данных. Поэтому непосредственный доступ к специальному файлу такого устройства возможен только при размонтированной файловой системе.
Поскольку каждый дисковый блок связан с каким-либо файлом и соответственно с его vnode, а его образ в памяти — с физическими страницами, которые также связаны с vnode (через структуры описания физической памяти — page
в SVR4, pfdat
в SVR3), все операции ввода/вывода связаны с подкачкой и сохранением страниц и идентифицируются vnode.
Символьные устройства представляют собой значительную часть периферийного оборудования системы, включая терминалы, манипуляторы (например, мышь), клавиатуру и локальные принтеры. Основное отличие этих устройств от блочных заключается в том, что они, как правило, передают небольшие объемы данных.
Обмен данными с символьными устройствами происходит непосредственно через драйвер, минуя буферный кэш. При этом данные обычно копируются в драйвер из адресного пространства процесса, запросившего операцию ввода/вывода.
Если процесс сделал системный вызов ввода/вывода, например, spec_read()
или spec_write()
соответственно для spec_read()
и spec_write()
похожи. Обе проверяют тип vnode и определяют, что устройство является символьным. После этого с помощью коммутатора ядро выбирает соответствующую точку входа драйвера, используя старший номер, хранящийся в поле v_rdev
vnode, и вызывает эту функцию (соответственно
или
), передавая ей в качестве параметров старший и младший номера, ряд дополнительных параметров, зависящих от конкретного вызова, а также явно или неявно адресует область копирования данных в адресном пространстве процесса[54].
Символьные драйверы обеспечивают доступ не только к символьным устройствам, например, к адаптеру последовательного или параллельного портов, манипулятору "мышь", монитору или терминалам. Часть символьных драйверов служит в качестве
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии