|
|
|
|
Когда использовать драйверы устройств?
При каких условиях некоторую функцию следует удалить из программы и перенести в драйвер? Основное правило состоит в том, что
если какая-либо функция выполняет ввод/вывод на на физическом
уровне (т.е. работая непосредственно с аппаратурой), то эта функция - прекрасный кандидат для переноса в драйвер. По самой природе семейства
микропроцессоров 80x86 такие функции обычно содержат
команды IN и/или OUT (включая INS или OUTS). Если система поддерживает ввод/вывод, отображенный на память, доступ к абсолютным
адресам памяти также может служить индикатором ввода/вывода на
физическом уровне (чтение и запись векторов прерываний тоже является доступом к абсолютным адресам, но, конечно, предпочтительнее
использовать функции MS-DOS "Получить вектор прерывания" и "Установить вектор прерывания", чем использовать для этих же целей драйвер).
Выделение программ-обработчиков операций ввода/вывода в драйвер устройства порождает четыре следствия : это делает программы
более переместимыми, делает обработчики операций ввода/вывода
доступными для других программ, желающих работать с этим устройством, несколько увеличивает в размерах систему и замедляет время
доступа к аппаратуре. Некоторое увеличение размера памяти, занимаемой системой, не имеет большого значения, а вот увеличение
времени доступа может быть критическим фактором для некоторых
приложений. Когда принимается решение о написании драйвера, необходимо тщательно взвесить скоростные характеристики программы, с
одной стороны, и повышение совместимости программ и доступность драйвера, с другой стороны. Увеличение времени доступа за счет
накладных расходов при каждом обращении к драйверу более заметно
для устройств, которые передают за один раз слово или байт данных. В драйверах, передающих за одно обращение целый блок данных,
накладные расходы заметно уменьшаются.
|
|