Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Программирование коммуникационных устройств.
Система ввода-вывода USIХ обладает рядом особенностей, среди которых следует прежде всего отметить: • поддержку стандартных механизмов доступа к внешним устройствам; • независимость ядра USIХ от набора внешних устройств; • возможность загрузки и выгрузки драйверов во время работы системы; • дополнительные возможности отладки драйверов без перестроения системы, что очень важно в системах, где необходима поддержка нестандартных устройств. Это является весьма характерным для систем реального времени; • в каталог /dev заносятся только те устройства, которые действительно доступны к использованию. Последняя особенность состоит в том, что в отличие от других UNIХ-систем в USIХ каталог /dev первоначально пустой. При загрузке драйвер создает в каталоге /dev свои специальные файлы. Это выполняется самим драйвером, так как только драйвер может определить, какие устройства он будет обслуживать. Система USIХ поддерживает блок-ориентированные и байт-ориентированные устройства, а также прямой доступ к блочным уст ройствам. Связь ядра с драйвером осуществляется с помощью сообщений и портов. После загрузки драйвера и создания имени специального файла в каталоге /dev пользовательская программа может открыть этот файл. Ядро распознает обращение к специальному файлу, формирует сообщение и посылает его в порт соответствующего драйвера. Если драйвер находился в состоянии приостановки в ожидании сообщения, он активизируется и начинает его обработку. Процесс пользователя при этом останавливается в ожидании ответного сообщения в свой порт, если запрос ввода-вывода был синхронным. Если запрос ввода-вывода асинхронный, процесс пользователя может быть продолжен. Передача данных между драйвером и процессом пользователя может осуществляться двумя способами: одновременно с сообщением; непосредственно, путем отображения региона пользователя в адресное пространство драйвера. Вторая возможность используется в тех случаях, когда объем передаваемых данных достаточно большой (например, в дисковых драйверах). При разработке системы ввода-вывода USIХ были заложены следующие требования: • обеспечение унифицированного подхода для выполнения взаимодействия между мультипроцессорным ядром USIХ и различными устройствами ввода-вывода; • обеспечение возможности добавления, удаления и модификации драйверов устройств; • обеспечение совместимости ввода-вывода со стандартами SVID. Система ввода-вывода содержит несколько объектов: • набор драйверов ввода-вывода; • таблицы ядра; • объекты памяти; • интерфейс системы ввода-вывода с файловой системой. Драйвер, являясь отдельным процессом, начинает выполнение как обычный процесс пользователя. Для выполнения специфических функций процесс-драйвер имеет следующие дополнительные возможности: • создавать порт или порты, которые будут точками взаимодействия с другими процессами или ядром; • выполнять инициализацию программы обработки прерываний (ISR - Interrupt Service Routine) и подключать ее к вектору прерывания; • создавать специальный объект памяти (IСО — Interrupt Communication Оbject) для взаимодействия между процессом-драйвером и программой обработки прерываний; • выполнять инициализацию программы обработки по восстановлению питания. Объект IСО является областью памяти, выделяемой для обмена данными (содержимое аппаратных регистров и др.) между программой обработки прерываний и драйвером. Размещение данных внутри IСО полностью зависит от драйвера и не интерпретируется ядром никаким другим способом. Синхронизация драйвера и ISR выполняется посредством передачи сообщений. Если ISR ждет реакции от драйвера, то необходимо послать в порт драйвера сообщение с высоким приоритетом. В соответствующий момент этот запрос будет обнаружен драйвером. Программа обработки прерываний выполняется в ограниченном контексте режима ядра и имеет доступ только к данным, расположенным в 1СО. На входе программа обработки прерываний получает в качестве параметров информацию об идентификации устройства и параметры IСО. После инициализации драйвера программа обработки прерываний отображается в адресное пространство ядра. Область IСО должна находиться в пределах страницы, что является требованием системы распределения памяти. Стандартный драйвер содержит четыре секции (подпрограммы): • секцию инициализации; • секцию обработки запросов на ввод-вывод; • секцию обработки прерываний; • секцию завершения работы драйвера. При инициализации драйвер выполняет следующие функции: • создает записи в таблицах сdevsw и/или bdevsw. Эта функция обеспечивает совместимость со стандартами SVID; • создает порты для взаимодействия драйвера с ядром; • подсоединяет векторы аппаратных прерываний к подпрограмме обработки прерываний; • создает секцию IСО и объявляет о ней ядру; • создает записи в каталоге /dev для каждого обслуживаемого устройства, которые являются входами в таблицы сdevsw и bdevs; • инициализирует устройство ввода-вывода и сообщает системе о готовности драйвера к работе. Секция обработки запросов на ввод-вывод получает запросы с помощью системного вызова «getwork» из порта, созданного для взаимодействия с ядром. Вызов «getwork» приостанавливает выполнение драйвера, пока в порт не придет некоторое сообщение. Сообщения могут быть посланы ядром, другими серверами (например, файловым сервером) или программой обработки прерываний драйвера. Драйвер получает всю необходимую информацию о запросе в принятом сообщении-запросе. После обработки запроса необходимо с помощью системного вызова «putwork» послать сообщение-ответ. Сообщения-запросы и сообщения-ответы имеют стандартные заголовки, но структура их тел зависит от типа запросов. Если к драйверу приходит запрос неизвестного типа, то сообщение об ошибке обычно выдается на консоль и посылается ответ как на ошибочный запрос ОРЕN. На основе полученной в сообщении информации драйвер создает необходимые внутренние таблицы и пытается инициировать операцию ввода-вывода. После запуска этой операции драйвер пытается получить другой запрос на ввод-вывод. Драйвер может получить столько запросов на ввод-вывод, сколько он может обработать. Это зависит от размеров таблиц драйвера и стратегии обработки сообщений. Программа (секция) обработки прерываний (ISR.) после подключения к вектору прерывания отображается в адресное пространство ядра и при получении управления имеет все права и привилегии ядра. В то же время, поскольку программа обработки прерываний как часть драйвера и ядро компонуются раздельно, для ISR не известны другие адреса ядра, кроме передаваемых в качестве аргументов. Взаимодействие ISR с драйвером может выполняться через специальный объект памяти (IСО) и/или с помощью передачи сообщений через заранее созданный порт драйвера. Программа обработки прерываний может использовать набор системных подпрограмм в ядре, адрес которых передается с помощью аргументов. Если драйвер обслуживает устройство с прямым доступом к памяти DМА — Direct Memory Access), то объект памяти в запросах чтения/записи указывает на список физических адресов страниц. Для обращения к этим страницам непосредственно программе обработки прерываний необходимо отобразить их в виртуальное пространство ядра с помощью специального вызова. При завершении работы драйвер должен с помощью специальных системных вызовов (usixса11) выполнить следующие действия: • удалить записи в каталоге /dev и в таблицах bdevsw и сdevsw; • отсоединиться от векторов прерываний; • уничтожить созданные порты; • выполнить «ехit». Здесь уместно сделать следующее замечание. В традиционных UNIХ-системах драйверы компонуются вместе с ядром. Такой подход имеет как недостатки, так и преимущества. Недостатки, главным образом, относятся к управлению системой: требуется перестройка ядра при добавлении или удалении драйверов в системе. Концепция USIХ основана на загружаемых драйверах, реализованных в виде процессов-серверов. Это ведет к гибкости конфигурации системы и дает возможность модифицировать и отлаживать драйверы на уровне пользователя. |
Последнее изменение этой страницы: 2019-04-21; Просмотров: 168; Нарушение авторского права страницы