Драйвер: различия между версиями

Материал из Old-Games.RU Wiki
Перейти к навигации Перейти к поиску
м
Строка 3: Строка 3:
 
== Принцип устройства DOS драйверов ==
 
== Принцип устройства DOS драйверов ==
 
Драйвер может быть загружен или при старте системы из файла [[CONFIG.SYS]] (при этом его выгрузка будет невозможна), или в любое другое время (например, из файла [[AUTOEXEC.BAT]]). Загрузчик помещает содержимое драйвера в свободное окно ОЗУ и делает переход на EP драйвера. Драйвер должен изменить какие-либо [[IRQ|вектора прерываний]], заменив их на указатель к своему собственному коду, после чего должен выйти в DOS, оставясь резидентом (TSR). При наступлении прерывания драйвер читает данные из конкретного [[I/O Port|порта ввода/вывода]], анализирует полученную информацию, отправляет ответ устройству при необходимости. После этого драйвер возвращает управление в прерванный код.
 
Драйвер может быть загружен или при старте системы из файла [[CONFIG.SYS]] (при этом его выгрузка будет невозможна), или в любое другое время (например, из файла [[AUTOEXEC.BAT]]). Загрузчик помещает содержимое драйвера в свободное окно ОЗУ и делает переход на EP драйвера. Драйвер должен изменить какие-либо [[IRQ|вектора прерываний]], заменив их на указатель к своему собственному коду, после чего должен выйти в DOS, оставясь резидентом (TSR). При наступлении прерывания драйвер читает данные из конкретного [[I/O Port|порта ввода/вывода]], анализирует полученную информацию, отправляет ответ устройству при необходимости. После этого драйвер возвращает управление в прерванный код.
 +
 
При таком подходе драйвер регистрирует обычно два прерывания — одно связанное с [[IRQ]], второе — интерфейс драйвера, через который происходит работа с ним. Если прикладной программе надо обратится к устройству, то она вызывает [[INT]] нужного драйвера, драйвер или сразу выдаёт результат, или же если это невозможно (например, это команда устройству) отправляет сообщение в порт устройства и ждёт ответа (IRQ или I/O port polling методом, как более оперативным).
 
При таком подходе драйвер регистрирует обычно два прерывания — одно связанное с [[IRQ]], второе — интерфейс драйвера, через который происходит работа с ним. Если прикладной программе надо обратится к устройству, то она вызывает [[INT]] нужного драйвера, драйвер или сразу выдаёт результат, или же если это невозможно (например, это команда устройству) отправляет сообщение в порт устройства и ждёт ответа (IRQ или I/O port polling методом, как более оперативным).
 +
 
Драйвера появились из необходимости единого способа доступа к разным устройствам. Прикладная программа не обязана знать, какая у вас мышь, чтобы работать с ней. Однако, иногда драйвер не предоставляет интерфейса (например, [[Sound Blaster AWE32]] предоставляет драйвер CTCM, который управляет платой, но не предоставляет прикладных функций, работа с платой осуществляется напрямую через порты I/O).
 
Драйвера появились из необходимости единого способа доступа к разным устройствам. Прикладная программа не обязана знать, какая у вас мышь, чтобы работать с ней. Однако, иногда драйвер не предоставляет интерфейса (например, [[Sound Blaster AWE32]] предоставляет драйвер CTCM, который управляет платой, но не предоставляет прикладных функций, работа с платой осуществляется напрямую через порты I/O).
 
Важно также упомянуть, что драйвер управляет [[DMA]] контроллером, позволяя плате не инициировать прерывания в том случае, если ей необходимо совершить обмен данными с оперативной памятью по известному адресу. В этом случае Процессор останавливается и отключается от шины данных, его место занимает контроллер DMA, которому не требуются сохранять состояние программы, выполнять различные переходы и прочее, поэтому обмен данными по DMA происходит значительно быстрее, чем через драйвер и порты I/O процессора. Однако всё равно в время процессор не способен работать (поскольку не может получить доступ к оперативной памяти, в которой находится программа, которую он должен выполнять).
 
Важно также упомянуть, что драйвер управляет [[DMA]] контроллером, позволяя плате не инициировать прерывания в том случае, если ей необходимо совершить обмен данными с оперативной памятью по известному адресу. В этом случае Процессор останавливается и отключается от шины данных, его место занимает контроллер DMA, которому не требуются сохранять состояние программы, выполнять различные переходы и прочее, поэтому обмен данными по DMA происходит значительно быстрее, чем через драйвер и порты I/O процессора. Однако всё равно в время процессор не способен работать (поскольку не может получить доступ к оперативной памяти, в которой находится программа, которую он должен выполнять).
 +
 
Внимание, данная информация относится только к операционной системе DOS и только к старым компьютерам.
 
Внимание, данная информация относится только к операционной системе DOS и только к старым компьютерам.
  
 
== См. также ==
 
== См. также ==
 
[[DOS]]
 
[[DOS]]

Версия 21:51, 6 октября 2011

Драйвер — специальная программа, предназначенная для взаимодействия конкретного устройства и другого программного обеспечения, например, операционной системой.

Принцип устройства DOS драйверов

Драйвер может быть загружен или при старте системы из файла CONFIG.SYS (при этом его выгрузка будет невозможна), или в любое другое время (например, из файла AUTOEXEC.BAT). Загрузчик помещает содержимое драйвера в свободное окно ОЗУ и делает переход на EP драйвера. Драйвер должен изменить какие-либо вектора прерываний, заменив их на указатель к своему собственному коду, после чего должен выйти в DOS, оставясь резидентом (TSR). При наступлении прерывания драйвер читает данные из конкретного порта ввода/вывода, анализирует полученную информацию, отправляет ответ устройству при необходимости. После этого драйвер возвращает управление в прерванный код.

При таком подходе драйвер регистрирует обычно два прерывания — одно связанное с IRQ, второе — интерфейс драйвера, через который происходит работа с ним. Если прикладной программе надо обратится к устройству, то она вызывает INT нужного драйвера, драйвер или сразу выдаёт результат, или же если это невозможно (например, это команда устройству) отправляет сообщение в порт устройства и ждёт ответа (IRQ или I/O port polling методом, как более оперативным).

Драйвера появились из необходимости единого способа доступа к разным устройствам. Прикладная программа не обязана знать, какая у вас мышь, чтобы работать с ней. Однако, иногда драйвер не предоставляет интерфейса (например, Sound Blaster AWE32 предоставляет драйвер CTCM, который управляет платой, но не предоставляет прикладных функций, работа с платой осуществляется напрямую через порты I/O). Важно также упомянуть, что драйвер управляет DMA контроллером, позволяя плате не инициировать прерывания в том случае, если ей необходимо совершить обмен данными с оперативной памятью по известному адресу. В этом случае Процессор останавливается и отключается от шины данных, его место занимает контроллер DMA, которому не требуются сохранять состояние программы, выполнять различные переходы и прочее, поэтому обмен данными по DMA происходит значительно быстрее, чем через драйвер и порты I/O процессора. Однако всё равно в время процессор не способен работать (поскольку не может получить доступ к оперативной памяти, в которой находится программа, которую он должен выполнять).

Внимание, данная информация относится только к операционной системе DOS и только к старым компьютерам.

См. также

DOS