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


Прерывания при стандартном режиме работы системы Windows


     При написании драйвера,  который будет выполняться  в стандартном режиме  работы  системы  Windows,  необходимо  учитывать   возможность появления  прерывания,  когда  процессор  работает  в реальном режиме. Даже если работают только приложения системы Windows, а не  приложения системы  MS-DOS,   процессор  часто   переключается  из   реального  в защищенный  режим.   Так  как   система  Windows   3.1  не    является операционной  системой,   а  скорее   представляет  собой    окружение пользовательского интерфейса,  она возлагает  выполнение определенного количества основных функций,  включая функцию ввода-вывода  файлов, на операционную систему (а именно MS-DOS).

     Поэтому  когда  приложение  системы  Windows  выполняет   функцию MS-DOS ввода-вывода  файла и  процессор при  этом работает  в реальном режиме, устройство может прерывать ЦПУ. По умолчанию, если  библиотека DLL обеспечила связь с прерыванием, то система Windows переключит  ЦПУ в защищенный режим  для обработки прерывания  и, как только  программа ISR  завершит  работу,  переключит  ЦПУ  обратно  в реальный режим для продолжения выполнения функций системы MS-DOS.

     Хотя  это  в  меньшей  мере  относится  к ЦПУ 80386, переключение процессора  из  защищенного  режима  в  реальный  режим,  например  на процессоре  80286,  создает  огромные  накладные  расходы,   требующие контролируемого   сброса   ЦПУ,   который   выполняется   в    течении миллисекунд.  Если  необходимо  ускорить  среднее  время ответа, нужно предотвратить  переключение  процессора  в  защищенный  режим, если он получает прерывание, работая в реальном режиме.

     Обеспечение связи  с вектором  прерывания в  защищенном режиме из библиотеки  DLL  системы  Windows  -  тривиально,  что  и  показано  в программе  SetPMVector,   представленной  в   листинге  4   (программа bogus.c).  Установление  связи  с   вектором  производится  таким   же способом,  как  и  в  системе  MS-DOS,  -  с помощью функции setvector системы  MS-DOS.  Однако  в  отличие  от  вызова  в  системе MS-DOS, в системе  Windows  при  обращении  к  функции  передаются  селектор   и смещение, а  не сегмент  и смещение.  Ядро системы  Windows следит  за всем.  Функции  следует  передать   нормальный  селектор  и   смещение (натуральный  указатель  far  для  системы  Windows),  а  не сегмент и смещение (натуральный указатель far для системы MS-DOS).




- Начало -  - Назад -  - Вперед -