Подсистеме STREAMS необходимы специализированные механизмы работы с ioctl. Через некоторые команды ioctl производятся все операции с головным интерфейсом потока, остальная часть команд относится к драйверу или промежуточным модулям. Все команды преобразуются в сообщения и посылаются по потоку в нисходящем направлении. Это приводит к возникновению двух различных проблем для механизмов синхронизации процессов и передачи данных между прикладным пространством и пространством ядра.
За синхронизацию процессов отвечает головной интерфейс потока. Если он может обработать команду, то осуществляет это действие синхронно в контексте процесса. В этом случае никаких проблем не возникает. Если головному интерфейсу потока необходимо передать команду в нисходящем направлении, то он блокирует процесс и отправляет сообщение M_I0CTL, содержащее команду с ее входными параметрами. Модуль обрабатывает эту команду и затем возвращает результат выполнения в сообщении М_10САСК.
Если сообщение не может быть обработано ни одним драйвером или модулем, драйвер генерирует сообщение M_I0CNACK. Если головной интерфейс потока получает любое из этих сообщений, то в ответ он пробуждает процесс и передает ему результаты выполнения.
Проблема передачи данных связана с необходимостью обмена параметрами и результатами выполнения команд между программой и модулем (или драйвером), обрабатывающими вызовы ioctl. Если команда ioctl вызывается по отношению к обычному символьному устройству, драйвер обрабатывает ее в контексте вызывающего процесса. Каждая команда ioctl имеет связанный с ней блок параметров, размеры и содержание которых неодинаковы. Драйвер копирует этот блок из прикладного пространства в ядро, выполняет команду и дублирует результаты в прикладном пространстве.
Опубликовал katy
June 24 2015 20:32:37 ·
0 Комментариев ·
3474 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.