¦ ¦ СТРАТЕГИЙ є ¦ ¦ СТРАТЕГИЙ є ¦ ¦ СТРАТЕГИЙ є
¦ ГДДДДДДДДДДДД¶ ¦ ГДДДДДДДДДДДД¶ ¦ ГДДДДДДДДДДДД¶
¦ ¦ Указатель є ¦ ¦ Указатель є ¦ ¦ Указатель є
¦ ЪДДґ на є ¦ ЪДДґ на є ¦ ЪДДґ на є
¦ ¦ ¦ ПРЕРЫВАНИЙ є ¦ ¦ ¦ ПРЕРЫВАНИЙ є ¦ ¦ ¦ ПРЕРЫВАНИЙ є
¦ ¦ ГДДДДДДДДДДДД¶ ¦ ¦ ГДДДДДДДДДДДД¶ ¦ ¦ ГДДДДДДДДДДДД¶
¦ ¦ ¦ Устройство є ¦ ¦ ¦ Имя или є ¦ ¦ ¦ Имя или є
¦ ¦ ¦ NUL є ¦ ¦ ¦ число є ¦ ¦ ¦ число є
¦ ¦ ¦ є ¦ ¦ ¦ устройств є ¦ ¦ ¦ устройств є
АДДДД>ГДДДДДДДДДДДД¶ АДДДД>ГДДДДДДДДДДДД¶ АДДДД>ГДДДДДДДДДДДД¶
¦ ¦ Программа є ¦ ¦ Программа є ¦ ¦ Программа є
¦ ¦ СТРАТЕГИЙ є ¦ ¦ СТРАТЕГИЙ є ¦ ¦ СТРАТЕГИЙ є
¦ \/\/\/\/\/\/ ¦ \/\/\/\/\/\/ ¦ \/\/\/\/\/\/
¦ /\/\/\/\/\/\/\ ¦ /\/\/\/\/\/\/\ ¦ /\/\/\/\/\/\/\
АД>ГДДДДДДДДДДДД¶ АД>ГДДДДДДДДДДДД¶ АД>ГДДДДДДДДДДДД¶
¦ Программа є ¦ Программа є ¦ Программа є
¦ ПРЕРЫВАНИЙ є ¦ ПРЕРЫВАНИЙ є ¦ ПРЕРЫВАНИЙ є
\/\/\/\/\/\/ \/\/\/\/\/\/ \/\/\/\/\/\/
/\/\/\/\/\/\/\ /\/\/\/\/\/\/\ /\/\/\/\/\/\/\
ФННННННННННННј ФННННННННННННј ФННННННННННННј
Рисунок 6-1. Цепочка драйверов устройств.
Не только NUL-драйвер не может быть заменен. Драйверы, работа-
- 6-9 -
ющие с устройствами массовой памяти (например с дисками), также
не могут быть заменены. Вы можете добавить драйверы для новых
дисков, но не удалить или заменить уже существующие. Это ограни-
чение возникает по той причине, что имена драйверам дисковых уст-
ройств (A,B,C и т.д.) назначает MS-DOS при загрузке. Невозможно
присвоить конкретному дисководу уникальное имя, соответственно
нельзя и заменить его.
Использование команды ASSIGN для замены
драйверов дисковых устройств
Тем не менее не расстраивайтесь, если Вас не удовлетворяет ра-
бота существующих дисковых драйверов. Хотя их нельзя удалить, они
могут быть "нейтрализованы". После того, как Вы написали (и прове-
рили) новый драйвер,добавьте его в файл CONFIG.SYS. После переза-
грузки системы он будет включен в цепочку драйверов устройств. На-
пример, если Вы имеете три дисковода, новый драйвер получит имя
"D". Теперь используйте команду ASSIGN для переназначения любых
обращений к старому драйверу на новый. Допустим, мы хотим заменить
драйвер дисковода "A". Команда ASSIGN, при этом, будет иметь вид
ASSIGN A = D
MS-DOS переназначит все обращения к драйверу "A" на драйвер
"D", включая абсолютный доступ к диску по прерываниям 25H и 26H.
Если Вы написали новый драйвер для работы с тем же физическим
дисководом, с которым работал старый драйвер, то описанной проце-
дурой Вы довольно эффективно заменили его на новый. Если же Вам
покажется, что старый драйвер все-таки лучше, Вы можете восстано-
вить первоначальную конфигурацию, введя команду ASSIGN без пара-
метров.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦ ПРЕДУПРЕЖДЕНИЕ : Когда НЕЛЬЗЯ использовать команду ASSIGN ¦
¦ ¦
¦ Хотя команда ASSIGN позволяет Вам заменять существующие ¦
¦ драйверы дисков на новые, это не всегда разумно. Некоторые ¦
¦ команды, такие как BACKUP и PRINT, или программы, подобные ¦
¦ Lotus 1-2-3 будут весьма удивлены, если их попросят работать с ¦
¦ переопределенными дисками. Другие команды, такие как FORMAT, ¦
¦ DISKCOPY или DISKCOMP, вообще игнорируют такие диски и работают ¦
¦ с настоящими логическими дисками. ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Типы драйверов устройств
Существует два типа драйверов устройств, именованные и неиме-
нованные, называемые соответственно драйверами символьных уст-
ройств и драйверами блоковых устройств. Различие между ними го-
раздо глубже, чем способность иметь имя или заменяемость. Кроме
того, что блоковые драйверы предназначены для поддержки дисковых
устройств, предполагается,что один блоковый драйвер может поддер-
живать более одного дисковода. Команды ввода/вывода для таких
драйверов обеспечивают возможность доступа к отдельным секторам
и, если не задан атрибут NONIBM (также известный как NONFAT),
предполагается, что драйвер должен поддерживать стандартную для
MS-DOS структуру диска, включая FAT (таблицу распределения диска)
- 6-10 -
и директории.
Откровенно говоря, названия "символьный" и "блоковый" не сов-
сем точны, так как символьный драйвер тоже может поддерживать
блоковый режим передачи данных. Более того, нельзя сказать, что
символьные драйверы обеспечивают последовательный доступ, а блоч-
ные драйверы обеспечивают прямой доступ, так как можно спроекти-
ровать символьный драйвер так, чтобы он поддерживал прямой доступ
к устройству (если, конечно, он может работать в таком режиме.
Оставив пока вопрос о том, что же такое символьный драйвер и
что такое блоковый драйвер, обсудим некоторые способы работы с
драйверами устройств через MS-DOS. Это даст нам некоторые сообра-
жения о том, какой тип следует выбрать, если Вы желаете написать
драйвер для какого-либо приложения.
Работа с драйверами устройств в среде MS-DOS
Для прикладных программ MS-DOS обеспечивает четыре основных
метода доступа к внешним устройствам. Каждый из них удобен для
соответствующих приложений и мы обсудим достоинства и недостатки
каждого метода для того, чтобы Вы могли выбрать метод, наиболее
удобный для Вашего приложения. Мы не будем описывать детали каж-
дого из функциональных вызовов, так как эту информацию можно най-
ти в "MS-DOS Programmer's Reference Manual" ("MS-DOS. Руководство
программиста.") фирмы Microsoft или другом аналогичном руководс-
тве. Следующий ниже список классифицирует эти четыре метода.
* CP/M-ориентированные функции для работы с такими устройствами,
как консоль, принтер или вспомогательное устройство. Это истин-
но символьные устройства. Функции, входящие в эту группу :
CON: Функции 01H, 02H, и с 06H по 0CH
PRN: Функция 05H
AUX: Функции 03H и 04H
* CP/M-ориентированные функции для работы с файлами с использова-
нием FCB (блока управления файлами). Этот метод также может
быть использован для доступа к символьным устройствам. В эту
группу входят функции :
Открыть/Закрыть: Функции 0FH и 10H
Читать/Писать Устройство/Файл: Функции 14H и 15H
Читать/Писать Файл: Функции 21H, 22H, 27H и 28H
* Функции MS-DOS-стиля для работы с файлами с использованием
описателей. Этот метод (аналогично FCB-методу) тоже можно ис-
пользовать для работы с символьными устройствами. Функции, ра-
ботающие с использованием описателей файлов :
Открыть/Закрыть: Функции 3DH и 3EH
Читать/Писать Устройство/Файл: Функции 3FH и 40H
Управление Устройством: Функция 44H
* Функции прямого доступа к диску, выполняющие чтение и запись по
абсолютным адресам. Эти функции обеспечиваются отдельными пре-
рываниями INT 25H (абсолютное чтение) и INT 26H (абсолютная за-
пись).
- 6-11 -
Функции CP/M-стиля для работы с символьными устройствами
CP/M-ориентированные функции предназначены, в основном, для
работы со стандартным устройством CON и предлагают возможности для
буферизации, эхо-отображения, ожидания символов и проверки состоя-
ния. Поддержка устройств PRN и AUX более ограниченная, но вполне
достаточна для многих приложений. Для нестандартных устройств, од-
нако, необходимо использовать либо метод, использующий FCB (блоки
управления файлами), либо метод на основе описателей файлов.
Работа с устройством с использованием блоков управления файлами
FCB-метод работы с устройствами имеет и достоинства и недос-
татки. С одной стороны, FCB сложнее создавать и использовать, чем
работать с описателями файлов, хотя использование макросредств и
директив STRUC может весьма облегчить задачу построения блока уп-
равления файлом. С другой стороны, FCB-метод позволяет програм-
мисту непосредственно указывать номер записи в файле, делая воз-
можным прямой доступ к файлам. Функции 3FH ("Читать") и 40H
("Писать"), работающие с описателями, позволяют осуществлять толь-
ко последовательный доступ к файлам. Для выполнения прямого досту-
па к файлам, используя функции описателей , прикладная программа
должна обращаться к функции 42H ("Передвинуть указатель файла").
FCB-метод работы таких дополнительных действий не требует.
Работа с устройствами на основе описателей файлов
Хотя прямой доступ очень нужен при работе с файлами, он не
имеет большого значения при работе с не дисковыми устройствами.
При работе с такими устройствами метод доступа, использующий
описатели, намного проще в использовании и не требует от програм-
миста создания FCB. Кроме того, описатель-ориентированный метод
доступа (ДОМД) поддерживает IOCTL (управление вводом/выводом)
функцию 44H. Как мы вскоре увидим, IOCTL-функция может быть исклю-
чительно полезна для управления устройством.
При использовании ДОМД (описатель-ориентированного метода
доступа) для работы с не дисковыми устройствами, программист не
ограничен пересылкой одного байта за один раз. За одно обращение к
функциям ввода/вывода может быть переслано с устройства или на
устройство до 64 Kбайт. Как и при работе с дисками, использование
этих функций для не дисковых устройств приводит к выполнению
последовательной передачи данных. Используя, однако, IOCTL-функцию
прямого управления, можно задать устройству дополнительные пара-
метры. Так, например, если и устройство и его драйвер установлены
в режим прямого доступа, можно использовать IOCTL-функцию для уп-
равления точками отправления и назначения при пересылке данных в
устройстве.
Этот пример может помочь при иллюстрации потенциала прямого
управления вводом/выводом с устройством. Предположим, что некото-
рая система имеет отображаемую на адресное пространство графичес-