Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Программирование коммуникационных устройств.



Система ввода-вывода 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; Просмотров: 166; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.017 с.)
Главная | Случайная страница | Обратная связь