2015-07-27 4 views
0

Существует несколько функций мне очень нравится, когда синхронизация потоков в драйвере Linux, а именно: wait_for_completion() и его коллега complete_and_exit()Подождите завершения завершения в пользовательском пространстве?

Реально ли реализовать этот API с 2 нитями, деля карту памяти, соответственно писатель в ядре и читатель в пользовательском пространстве?

Если нет, то какова была бы попытка предоставить wait_for_completion() для пользовательского пространства на языке C?

С уважением, CyrIng (Fr)

+0

Конечно, почему нет? Является ли эта функция ненормальной? –

+0

+ Мартин: это нормально, но ограничено ядром, не так ли? – CyrIng

ответ

0

Процесс пользовательского пространства можно использовать ioctl() вызовы на файл устройства, созданного с помощью mknod. Драйвер устройства может использовать аргументы из системного вызова ioctl, чтобы найти аргументы для вызова wait_for_completion(). Например, пользовательский процесс может использовать ioctl(), чтобы передать структуру, содержащую какой-либо код, чтобы определить, что он хочет, указатель на буфер пространства пользователя и поле размера, содержащее размер буфера. Затем поток ядра, обрабатывающий ioctl(), блокируется на wait_for_complete(), а затем заполняет буфер пользовательского пространства данными.

См this web page для примера ioctl() обработки:

Представляя IOCTL()

Input/Output Control (У, короче) является обычной операцией, или системного вызова, доступным в большинстве категорий драйверов. Это системный вызов с одним счетом для всех типов: . Если нет другой системы вызов, соответствующий конкретному требованию, то ioctl() используется для использования .

Практические примеры включают регулировку громкости для звукового устройства, дисплей конфигурацию видеоустройства, чтение регистров устройств и так далее - в принципе, ничего общего с входом устройства/вывода, или операций конкретного устройства, но достаточно универсальный для любого вида операции (например, для отладки драйвера путем запроса данных драйвера ).

...

+0

Спасибо. Попробует смешать '' 'ioctl''' с разделяемой памятью, где могут храниться переменные завершения. – CyrIng

Смежные вопросы