Драйверы устройств
На рис. 25 представлена типичная подсистема устройств QNX.
Рис. 25 |
Администратор устройств (Dev) управляет потоками данных между прикладными процессами QNX. Аппаратным интерфейсом управляют специализированные драйверы. Данные, которыми обменивается администратор Dev и драйверы, проходят через наборы очередей в совместно используемой памяти, которые существуют для каждого периферийного устройства.
Каждое устройство имеет три очереди. Каждая из очередей организована по принципу "первым пришел - первым обслужен". С каждой очередью связана управляющая структура.
Принятые данные помещаются драйвером во входную очередь и передаются администратором Dev только тогда, когда прикладной процесс запросит данные. Обработчики прерываний, входящие в состав драйверов, обычно обращаются к библиотечной подпрограмме администратора Dev для добавления данных в очередь: это обеспечивает последовательную входную дисциплину и значительно сокращает количество возлагаемых на драйвер функций.
Dev помещает выходные данные в выходную очередь, затем драйвер обеспечивает физическую передачу данных устройству. Каждый раз при добавлении данных Dev вызывает подпрограмму, входящую в состав драйвера, и активизирует драйвер в том случае, если он не был еще запущен. Благодаря использованию выходных очередей, Dev обеспечивает запись данных для всех периферийных устройств. Процесс блокируется при записи только в случае переполнения выходных буферов.
Каноническая очередь полностью управляется Администратором Dev и используется при обработке входных данных в режиме редактируемого ввода. Размер этой очереди определяется максимальным размером входной редактируемой строки для каждого конкретного устройства.
Размер всех этих очередей устанавливается системным администратором; при этом единственным ограничением является то, что суммарный размер всех трех очередей не может превысить 64 Кбайта. Значения, используемые по умолчанию, обычно больше требуемых для реальных устройств, но их можно настроить для того, чтобы уменьшить размер выделяемой системной памяти или иметь возможность работать в нештатных режимах.