Драйверы устройств в системе Windows

Программа ISR в реальном режиме


     Несмотря на  то, что  автор рекомендовал  обеспечивать раздельную программу ISR в реальном режиме, в данном примере эта рекомендация  не была   выполнена.   Вместо   этого,   автор   предоставил   программы, необходимые  при  реализации  программы  ISR  на языке Си. Фактически, данный  пример  устанавливает  связь  с  прерываниями реального режима только  для  того,  чтобы  переключить  ЦПУ  в  защищенный  режим  для обработки прерывания. Таково  по умолчанию поведение  системы Windows, когда  с  прерываниями  реального  режима  не  устанавливается   связь вообще, таким  образом автор  рассматривает несколько  циклов, которые не  имеют  никакого  другого  назначения,  кроме  как  показать, каким образом все работает.

     Рассмотрим  код  для  точки  входа  BogusStart.  По  существу  он работает  так  же,  как  работал  бы  в  системе MS-DOS. Код сохраняет старое значение прерывания, обеспечивает  связь с текущим значением  и подает устройству знак начать работу. Однако вместо обеспечения  связи только с  вектором защищенного  режима, он  устанавливает связь  как с вектором  реального  режима,  так  и  с  вектором  защищенного режима. Устанавливая  связь   с  вектором   реального  режима,   код  вызывает AllocIntReflector,   чтобы   обеспечить   ссылку   вектора  прерываний реального  режима  на  обратный  вызов,  который  просто  обращается к программе ISR защищенного режима.  Точка входа BogusStart подает  знак устройству  начинать  работу  одинаковым  образом  при  обоих  режимах работы:  защищенном  и  реальном.    Она  размаскирует  бит  IRQ   для контроллера PIC и подает знак устройству начинать работу, записывая  1 в  бит  START  порта  управления  устройством.  Как  только приложение обращается  к  данной  программе,  начинается  обработка  прерываний и регистрация сообщений в соответствии с программой ISR.

     Программа BogusStop  тривиальна и  просто отключает  устройство и разрывает связи, установленные  программой BogusStart. Итак,  осталось привести пример прикладной  программы, чтобы показать  работу операций ввода-вывода.



Содержание раздела