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


Библиотека DLL для драйвера


     При написании приложений в  системе Windows обычно в  программном модуле  имеют  дело  только  с  двумя  типами  сегментов: перемещаемым (moveable)  и  выгружаемым  (discardable).  Сегменты  данных программы являются  перемещаемыми,  т.е.  их  линейные  адреса  в  памяти  могут изменяться,  когда  программе   управления  памятью  системы   Windows требуется  организовать  память.   Селектор  (selector)  и   смещение, используемые  для  доступа  к  определенной  ячейке  памяти,  остаются фиксированными,  но  под  схемой  селектор-смещение  система   Windows может перемещать фактические данные в линейной памяти.

     Сегменты   программ-кодов    также   перемещаемые,    но    имеют дополнительный  атрибут  -  выгружаемые.  Их  содержимое  может   быть выгружено полностью, а  при необходимости загружено  с диска, так  как нельзя   писать   и   (или)   модифицировать   информацию  в  сегменте программы-кода. Если  при обращении  к сегменту  из программы Windows, он оказался выгруженным, программа управления памятью системы  Windows автоматически обратится к диску и прочитает ранее выгруженный сегмент.

     Итак,  каким  образом  это  обстоятельство  влияет  на  код   для программы ISR?  Так как  прерывание может  произойти в  любое время, а код ISR может оказаться  выгруженным, то возникнет проблема  загрузить код  в  память,  если  фиксируется  прерывание.  Вместо  этого,  можно описать  сегмент  как  FIXED   (фиксированный),  а  не  как   MOVEABLE (перемещаемый)  или  DISCARDABLE  (выгружаемый).  Сегмент  с атрибутом FIXED  будет  оставаться  в  единственном  месте  линейной памяти и не будет выгружаться,  даже если  он содержит  код. В  этом случае,  если произойдет  прерывание,  код  будет  доступен  и  готов  к выполнению. Однако следует отметить один  малоизвестный факт, а именно:  в системе Windows  только  те  сегменты  будут  считаться  FIXED,  которые  были описаны в библиотеке DLL.  Сегмент FIXED в обычном  программном модуле будет рассматриваться  как MOVEABLE.  Таким образом  в системе Windows нельзя будет  поместить программу  ISR в  обычный программный  модуль.


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