Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 75 76 77 78 79 80 81  82 83 84 85 86 87 88 ... 198
         бит слова атрибутов SPECL, значит драйвер будет работать в режиме
         высокоскоростного вывода. Этот режим и бит атрибутов SPECL обсуж-
         даются более глубоко в разделе "Слове атрибутов заголовка драйве-
         ра".

                      Группа команд управления вводом/выводом

            Четыре IOCTL команды, появившиеся в MS-DOS версии 3.3 - коман-
         ды C,  D, E и F - являются необязательными и разрешены только при
         установленном бите 6 слова атрибутов драйвера. Группа подфункций,
         обеспечиваемых командами C и D, представляет собой довольно "раз-
         ношерстное"  собрание  весьма специфических функций.  Эта группа,
         как правило,  используется для поддержки  определенных,  заданных
         изготовителем  устройства функциональных особенностей,  таких как
         переключение фонтов в принтере,  форматирование диска и т.д. Если
         Вам кажется, что у Вас есть необходимость использовать эти коман-
         ды,  следует обратиться к руководству программиста, где представ-
         лена более подробная информация.
            Команды E и F  позволяют  прикладному  программисту  управлять
         назначением и освобождением логических дисков,  например так, как
         это делается командой SUBST. Команда E ("Получить имя логического
         диска") возвращает назначение, использованное при последнем обра-
         щении к реальному устройству,  а команда F ("Установить имя логи-
         ческого диска") используется для изменения назначенных имен логи-
         ческих дисков.

             Прямой доступ к диску через прерывания INT 25H и INT 25H

            С другой  стороны  спектра  от  доступа к устройству с помощью
         описателей файлов (ДОМД) лежат прерывания прямого доступа к диску
         :  "Чтение по абсолютному адресу" (INT 25H) и "Запись по абсолют-
         ному адресу" (INT 26H).  Согласно  названию,  прерывания  прямого
         доступа  к диску работают исключительно с блоковыми устройствами,
         например с дисками.  Задача этих прерываний заключается в обеспе-
         чении работы с дисками напрямую,  не используя файловую структуру
         MS-DOS. Это может быть полезно в двух случаях.
            В первом случае,  программисты могут считывать или  записывать
         отдельные  части  стандартного диска MS-DOS,  содержащие файл или
         структуру директория. Это часто требуется, когда часть диска ста-
         новится плохой и невозможно,  поэтому, использовать FCB-метод или
         ДОМД.  В этом случае можно использовать функции прямого доступа к
         диску  для  того,  чтобы попробовать восстановить все,  что может
         быть восстановлено. Кроме того, программы могут считывать и запи-
         сывать  таблицу распределения (FAT) или директории диска,  недос-
         тупные  другим  методам.  Такая способность  требуется  утилитам,

                                      - 6-16 -
         сортирующим директории, изменяющим атрибуты файлов и т.п.
            Во втором случае,  использование этих функций  может  потребо-
         ваться в случае, если диск вообще не содержит таблицы распределе-
         ния файлов или директориев.  Такой диск  может  быть  использован
         только  как диск данных.  Такая же ситуация может встретиться при
         чтении дисков,  записанных в другой операционной среде, такой как
         CP/M  или  UCSD-p система.  Во всех этих случаях параметры диска,
         возвращаемые системе драйвером, делают невозможным доступ к диску
         любым другим методом.  Любая попытка выполнения файловых операций
         ввода/вывода,  включая чтение директория, возвратит мусор или со-
         общение об ошибке ("Non-DOS Disk"). Если Вы желаете получить под-
         робную информацию о том,  как  MS-DOS  определяет  формат  диска,
         просмотрите  описание команды драйверу "Построить блок параметров
         BIOS" в руководстве программиста или ином, аналогичном документе.
            Возвращаясь к обеспечению прямого доступа к диску, следует за-
         метить, что INT 25H и INT26H не выполняют блокирование и деблоки-
         рование  данных.  Блокирование и деблокирование требуются,  когда
         размер физического сектора на диске отличается от  размера  логи-
         ческой  записи,  используемого системой.  При блокировании данных
         система собирает вместе достаточное количество записей для запол-
         нения физического сектора перед сохранением его на диске.  Дебло-
         кирование используется при чтении с диска,  т.к.  один физический
         сектор может содержать несколько записей. В последнем случае сис-
         тема считывает целый сектор и,  затем,  выбирает оттуда требуемые
         программе  записи.  Функции доступа к диску по абсолютным адресам
         считывают и записывают только целые секторы,  так что программист
         обязан знать размер сектора диска для того,  чтобы определить ко-
         личество считанных или записанных байтов.
            В связи с тем, что параметры, используемые этими прерываниями,
         передаются драйверу без какого-либо преобразования, операции чте-
         ния и записи передают блоки данных размером, кратным длине секто-
         ра диска.  Это отличает данный метод доступа  от  FCB-метода  или
         описатель-ориентированного метода доступа,  где ввод/вывод  опре-
         деляется в терминах логических блоков и записей,  а  MS-DOS  осу-
         ществляет  преобразование логических блоков в физические секторы.
            Последняя особенность функций прямого доступа к диску заключа-
         ется в том,  что они возвращаются из прерываний INT 25H и INT 26H
         при помощи команды RETF,  а не IRET,  оставляя при этом флаги  на
         стеке.  Поэтому,  после проверки корректности выполнения функции,
         Вы должны убрать флаги со стека.

                          Опция "Ввод/вывод с проверкой"

            При выполнении  операций  ввода/вывода  следует учитывать одну
         особенность,  влияющее на работу драйвера устройства. Эта особен-
         ность  вызывается  использованием опции "Ввод/вывод с проверкой",
         при помощи которой можно заставить драйвер  проверять  выполнение
         команд вывода, т.е. осуществлять считывание после записи. Эта оп-
         ция может устанавливаться или отменяться тремя способами :

                1.С командной строки MS-DOS пользователь  может  выполнить
                команды "VERIFY ON" или "VERIFY OFF" для того, чтобы соот-
                ветственно включить или выключить эту опцию.

                2.Для некоторых команд MS-DOS,  таких как COPY,  можно за-
                дать ключ /V, который включает опцию проверки на время вы-
                полнения команды.

                                      - 6-17 -
                3.Опция проверки может быть  включена  и  выключена  любой
                программой,  используя  функцию  MS-DOS  2H ("Включить или
                выключить опцию проверки").

                                      Выводы

            В этом разделе мы обсудили основные типы операций, которые мо-
         гут потребоваться от драйвера;  мы вплотную подошли  к  вопросам,
         связанным с разработкой драйверов.
            Обобщая все вышесказанное,  можно отметить следующее. Выполне-
         ние  основных  операций  ввода/вывода  всегда  производится через
         драйверы устройств.  Драйверы могут также  поддерживать  дополни-
         тельный канал ввода/вывода для управления устройством. Символьные
         драйверы могут передавать от 1 до 64 Kбайт за  одно  обращение  к
         драйверу.  Блоковые  драйверы  могут  передавать данные только по
         секторам,  т.к. преобразование секторов в записи и обратно выпол-
         няет  MS-DOS.  Как мы вкратце упоминали,  блоковые драйверы могут
         возвращать информацию об используемом ими в настоящий момент дис-
         ке.

                           Создание драйверов устройств

            Создание драйверов в любой операционной  системе  имеет  много
         преимуществ перед написанием обычных программ. Драйверы устройств
         должны следовать строго определенной структуре,  а если структура
         понятна, то остальное приложится.
            Базовая структура  драйвера  устройства  показана  на рис.6-3.
         Обязательно должны присутствовать три раздела драйвера -- ЗАГОЛО-
         ВОК ДРАЙВЕРА,  ПРОГРАММА СТРАТЕГИЙ и ПРОГРАММА ПРЕРЫВАНИЙ.  Прог-
         рамма ПРЕРЫВАНИЙ это не тоже самое,  что программа обработки пре-
         рываний,  которая  может присутствовать в качестве необязательной
         части работающего по прерываниям драйвера.  На самом деле,  прог-
         рамма ПРЕРЫВАНИЙ - это точка входа в драйвер для обработки  полу-
         чаемых от MS-DOS команд.


                               ЪДДДДДДДДДДДДДДДДДДДДДДДДД·
                               ¦   Заголовок драйвера    є
                               ГДДДДДДДДДДДДДДДДДДДДДДДДД¶
                               ¦ Область данных драйвера є
                               ГДДДДДДДДДДДДДДДДДДДДДДДДД¶
                               ¦   Программа СТРАТЕГИЙ   є
                               ГДДДДДДДДДДДДДДДДДДДДДДДДД¶
                               ¦         Вход в          є
                               ¦   программу ПРЕРЫВАНИЙ  є
                               ГДДДДДДДДДДДДДДДДДДДДДДДДД¶
                               ¦    Обработчик команд    є
                               ГДДДДДДДДДДДДДДДДДДДДДДДДД¶
                               ¦   Программа обработки   є
                               ¦       прерываний        є
                               ГДДДДДДДДДДДДДДДДДДДДДДДДД¶
                               ¦ Процедура инициализации є
                               ФНННННННННННННННННННННННННј

                     Рисунок 6-3. Структура драйвера в MS-DOS

                                      - 6-18 -
            В программе  6-1 представлен скелет драйвера устройства.  Хотя
         структура драйвера похожа на структуру .COM программы,  важно от-
         метить следующие отличия :

          1. Программа начинается с нулевого смещения, а не 100H.

          2. Образ программы начинается с директив определения  данных
             для заголовка драйвера.

          3. Программа  не  содержит  директивы  ASSUME  для стекового
             сегмента.

          4. Программа не содержит директивы END START.


         Листинг 6-1. Заголовок драйвера, программы СТРАТЕГИЙ и ПРЕРЫВАНИЙ
        ------------------------------------------------------------------

    DRIVER    SEGMENT PARA
              ASSUME  CS:DRIVER,DS:NOTHING,ES:NOTHING
              ORG     0
    START     EQU     $                       ; Начало драйвера
    ;
    ;******* ЗАГОЛОВОК ДРАЙВЕРА *******************************************
    ;
              dw      -1,-1            ; Указатель на следующий драйвер
              dw      ATTRIBUTE        ; Слово атрибутов
              dw      offset STRATEGY  ; Точка входа в программу STRATEGY
              dw      offset INTERRUPT ; Точка входа в программу INTERRUPT
              db      8 dup (?)        ; Количество устройств/поле имени
    ;
    ;******* РЕЗИДЕНТНАЯ ЧАСТЬ ДРАЙВЕРА ***********************************
    ;
    req_ptr   dd      ?                ; Указатель на заголовок запроса
       .
       .
       .
    ;
    ;******* ПРОГРАММА СТРАТЕГИИ ******************************************
    ;
    ; Сохранить адрес заголовка запроса для программы СТРАТЕГИЙ в REQ_PTR.
    ; На входе адрес заголовка запроса находится в регистрах ES:BX.
    ;
    STRATEGY  PROC    far
              mov     cs:word ptr [req_ptr],bx
              mov     cs:word ptr [req_ptr + 2],bx
Предыдущая страница Следующая страница
1 ... 75 76 77 78 79 80 81  82 83 84 85 86 87 88 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама