Книга: Операционная система UNIX
Доступ к потоку
Доступ к потоку
Как и для обычных драйверов устройств, рассмотренных ранее, прежде чем процесс сможет получить доступ к драйверу STREAMS, необходимо встроить драйвер в ядро системы и создать специальный файл устройства — файловый интерфейс доступа. Независимо от того, как именно осуществляется встраивание (статически с перекомпиляцией ядра, или динамически), для этого используются три структуры данных, определенных для любого драйвера или модуля STREAMS: module_info
, qinit
и streamtab
. Связь между ними представлена на рис. 5.21.
Рис. 5.21. Конфигурационные данные драйвера (модуля) STREAMS
Структура streamtab
используется ядром для доступа к точкам входа драйвера или модуля — к процедурам его очередей xxopen()
, xxclose()
, xxput()
и xxservice()
. Для этого streamtab
содержит два указателя на структуры qinit
, соответственно, для обработки сообщений очереди чтения и записи. Два других указателя, также на структуры qinit
, используются только для мультиплексоров для обработки команды I_LINK
, используемой при конфигурации мультиплексированного потока. Каждая структура qinit
определяет процедуры, необходимые для обработки сообщений вверх и вниз по потоку (очередей чтения и записи). Функции xxopen()
и xxclose()
являются общими для всего модуля и определены только для очереди чтения. Все очереди модуля имеют ассоциированную с ними процедуру xxput()
, в то время как процедура xxservice()
определяется только для очередей, реализующих управление передачей. Каждая структура qinit
также имеет указатель на структуру module_info
, которая обычно определяется для всего модуля и хранит базовые значения таких параметров, как максимальный и минимальный размеры передаваемых пакетов данных (mi_maxpsz
, mi_minpsz
), значения ватерлиний (mi_hiwat
, mi_lowait
), а также идентификатор и имя драйвера (модуля) (mi_idnum
, mi_idname
).
Доступ к драйверам STREAMS осуществляется с помощью коммутатора символьных устройств — таблицы cdevsw[]
. Каждая запись этой таблицы имеет поле d_str
, которое равно NULL
для обычных символьных устройств. Для драйверов STREAMS это поле хранит указатель на структуру streamtab
драйвера. Таким образом, через коммутатор устройств ядро имеет доступ к структуре streamtab
драйвера, а значит и к его точкам входа. Для обеспечения доступа к драйверу из прикладного процесса необходимо создать файловый интерфейс — т.е. специальный файл символьного устройства, старший номер которого был бы равен номеру элемента cdevsw[]
, адресующего точки входа драйвера.
- Что делать, если при установке принтера появляется сообщение Невозможно завершение операции. Подсистема печати недоступн...
- 9.4. Права доступа к squid
- Глава 29 Доступ к канальному уровню
- 10.5. Транзакции и пути доступа меню
- Настройка доступа пользователей к рабочей книге
- 3.5 Проблемы доступа при использовании нескольких протоколов
- Доступ к существующим рабочим областям для документов
- Есть ли быстрый способ доступа к папкам?
- Как открыть доступ к своей папке другим пользователям?
- Я открыл доступ к папке
- Как сделать так, чтобы папка на одном компьютере в сети была доступна для другого компьютера, даже если первый выключен?
- Говорят, хакеры могут получить доступ к моему почтовому ящику или ICQ. Как им помешать?