Каждый драйвер может определить набор команд, загружаемых посредством интерфейса ioctl. Одним из параметров таких функций является cmd, целое число, соответствующее выполняемой команде. Параметр arg указывает на специфический для команды набор аргументов. Это удобная точка входа, поддерживающая богатый набор операций с устройством
d_segmap() Отображает память устройства в адресном пространстве процесса.
Также вам может показаться, что такая тема как http://magic-st.ru/ никак не связана и даже не тематична. Хотя, может быть и связана. В любом случае все-таки зайдите на сайт magic-st.ru. Тема имидж салон там представлена весьма широко. На том сайте можно узнать много интересного на тему имидж салон. Что означает вообще тема имидж салон, где найти имидж салон - про это написано на сайте magic-st.ru. Это очень важная для многих людей тема - имидж салон. Спасибо сайту magic-st.ru за информацию на тему имидж салон.
Используется символьными устройствами, отображаемыми в память при применении системного вызова mmap
d_mmap() Применяется только в случае поддержки процедуры d_segmap().
Если d_segmap равняется NULL, системный вызов mmap по отношению к символьному устройству вызывает операцию spec_segmap(), которая, в свою очередь, вызывает d_mmap(). Проверяет корректность указанного смещения устройства и завершает работу с возвратом соответствующего виртуального адреса
d_xpoll() Опрашивает устройство с целью проверки наступления определенного
события. Может использоваться для проверки готовности устройства для чтения или записи без блокировки, если произошла ошибка и т. д.
d_xhalt() Завершает работу устройства, управляемого драйвером. Вызывается
при завершении работы системы либо при выгрузке драйвера из ядра
Структуры переключателя немного отличаются друг от друга в различных реализациях UNIX. Например, в некоторых вариантах переключатель блочного устройства содержит дополнительные функции, такие как d_ioctl(), d_read() и d_write(). Другие версии могут поддерживать функции инициализации или реакции на сброс шины.
Все перечисленные процедуры (кроме d_xhalt() и d_strategy()) принадлежат к верхнему уровню. Процедура d_xhalt() вызывается при завершении работы, вследствие чего не может воспользоваться контекстом прикладного процесса и даже прерываниями. В любом случае эта процедура не переводится в режим сна.
Операция d_strategy() является специализированной сразу же по нескольким причинам. Она часто запускается с целью чтения или записи буферов, не относящихся к вызывающему ее процессу. Например, процесс пытается получить свободный буфер. Для этой цели он находит в списке свободных буферов первый по счету «грязный» буфер и вызывает процедуру strategy для выгрузки его содержимого на диск. После вызова операции записи процесс запрашивает следующий буфер (считая, что он свободен) и начинает его использовать. В дальнейшем процесс не интересуется состоянием записываемого буфера и не ожидает окончания операции записи. Более того, дисковые операции ввода-вывода часто являются несинхронными (как в только что приведенном примере) и драйвер не должен блокировать вызывающий процесс.
Из вышесказанного можно заключить, что операция d_strategy() интерпретируется как процедура нижнего уровня. Она инициализирует операцию ввода-вывода и завершает работу, не ожидая окончания ввода-вывода. Если при получении запроса устройство окажется занято, d_strategy() просто добавит этот запрос во внутреннюю очередь устройства и завершит выполнение. Через некоторое время из кода прерывания будут вызваны другие процедуры нижнего уровня, которые удалят запрос из очереди и выполнят его. Если вызывающему процессу необходимо ждать завершения ввода-вывода, он производит это вне рамок процедуры d_strategy().
Точки входа драйвера для обработки прерываний и инициализации, как правило, недоступны посредством таблицы переключателя. Вместо этого они указываются в главном файле конфигурации, используемом при сборке ядра системы. Такой файл содержит вхождения для каждого контроллера и драйвера. Во вхождении отражается также такая информация, как уровни ipl, номер вектора прерываний и базовый адрес драйвера CSR. Специфика содержимого и формата файла зависят от реализации UNIX.
В системе SVR4 определено две процедуры инициализации для каждого драйвера — init и start. Каждый драйвер регистрирует эти процедуры в массивах io_init[] и io_start[] соответственно. Код первоначальной загрузки системы загружает все функции init до инициализации ядра и все функции start после завершения его инициализации.
Подсистема ввода-вывода
Подсистема ввода-вывода представляет собой часть ядра, управляющую аппаратно-независимой частью операций ввода-вывода и взаимодействующую с драйверами устройств для обработки аппаратно-зависимых операций. Подсистема ввода-вывода также отвечает за именование устройств и их защиту, предоставляя прикладным приложениям единый интерфейс доступа ко всем устройствам системы.
Опубликовал katy
June 23 2015 06:48:14 ·
0 Комментариев ·
2775 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.