32.Методы встраивания кода данных в ядро ОС.
Драйвер устройства является частью кода ядра операционной системы и обеспечивает взаимодействие других подсистем UNIX c физическими или псевдоустройствами. Существует два основных метода встраивания кода и данных драйвера в ядро операционной системы : перекомпиляции ядра, позволяющая статически поместить драйвер, и динамическая загрузка драйвера в ядро в процессе работы системы. Традиционно для встраивания драйвера в ядро UNIX требуется перекомпиляция ядра и перезапуск системы. Принципиально эта процедура не отличается от компиляции обычной программы, все компоненты ядра являются объектными модулями и редактор связей объединяет их с объектным модулем драйвера для получения исполняемого файла. В этом случае драйвер встраивается в ядро статически, т.е независимо от фактического наличия устройства и ряда других причин, код и данные драйвера будут присутствовать в ядре UNIX до следующей перекомпиляции.Однако тенденция развития современных версий операционной системы UNIX заключается в предоставлении возможности динамического расширения функциональности ядра.Вместо того чтобы встраивать модуль драйвера, ядро содержит набор функций,позволяющих загрузить необходимые драйверы и,соответсвенно,выгрузить их, когда необходимость работы с данным устройством отпадает.При этом структура данных для доступа к драйверам устройств также являются динамическими.Динамическая установка драйвера в ядро операционной системы требует выполнения следующих операций:
-Размещение и динамическое связывание символов драйвера.-Инициализация драйвера и устройства.-Инициализация драйвера и устройства.-Добавление точек входа драйвера в соответсвующий коммутатор устройств.-Установка обработчика прерываний драйвера.Естественно код динамически загружаемых драйверов сложнее,и содержит,помимо станд-ых точек входа,ряд ф-ий,отвечающих за загрузку и выгрузку драйвера.
|