На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 6 / Файл CONFIG.SYS Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Файл CONFIG.SYS

Файл CONFIG.SYS это обычный текстовый файл, который должен быть расположен в корневом директории диска, с которого происходит загрузка системы (если этот файл находится не в корневом директории, то процедура инициализации предполагает, что он совсем отсутствует). Файл CONFIG.SYS содержит команды, руководствуясь которыми процедура инициализации изменяет и/или дополняет стандартную конфигурацию MS-DOS. Если этот файл доступен, процедура инициализации (но не COMMAND.COM - он еще не загружен) считывает его в память и обрабатывает строка за строкой. Каждая строка содержит одну команду конфигурации. На диаграмме 6-1 показана обработка некоторых команд. Наиболее важна для нас команда DEVICE, которая имеет следующий формат:


                DEVICE=[d:][path]filename[.ext][ parameters]

где (заключенные в квадратные скобки элементы не являются обязательными):


d: - идентификатор дисковода,


path - путь к драйверу,


filename - имя файла, содержащего драйвер,


ext - расширение имени файла,


parameters - параметры для драйвера.


Эта команда задает необходимость установки нового драйвера. Программа драйвера, содержащаяся в заданном драйвере, похожа на обычную .COM программу, но имеет некоторые специфические особенности, описываемые далее, в разделе, посвященном написанию драйверов.


В общем случае, драйвер представляет собой особую форму резидентной программы. Когда в файле CONFIG.SYS встречается команда DEVICE, соответствующий драйвер загружается в память и анализируется. Заголовок драйвера содержит информацию о типе, имени, атрибутах устройства и определяет точки входа в программу. После загрузки драйвера MS-DOS обращается к драйверу с командой INIT. Драйвер выполняет инициализацию и возвращает управление MS-DOS, указывая адрес конца драйвера, т.е. адрес первого свободного байта памяти, непосредственно следующего за драйвером. На этом установка драйвера заканчивается.


Указание адреса конца драйвера при возвращении управления MS-DOS после выполнения команды INIT подобно указанию размера памяти, занимаемой программой, при вызове функции MS-DOS "Остаться резидентом". По возвращаемому адресу MS-DOS определяет расположение свободной памяти. Если файл CONFIG.SYS содержит другие команды DEVICE, следующий драйвер загружается непосредственно после предыдущего. После того, как обработка файла CONFIG.SYS закончена, загружается еще один драйвер - драйвер фиктивного устройства (NUL-драйвер). Затем MS-DOS завершает инициализацию загрузкой постоянной части COMMAND.COM или другой, определяемой пользователем оболочки.


При загрузке драйверов MS-DOS связывает их в цепочку, так чтобы каждый драйвер содержал ссылку на ранее загруженный драйвер. Цепочка драйверов начинается, таким образом, с последнего загруженного драйвера (NUL-драйвер) и заканчивается самым первым загруженным драйвером (обычно стандартный драйвер устройства COM2). Такая цепочка строится, используя первые два слова заголовка каждого драйвера. Эти два слова содержат сегмент и смещение следующего в цепочке драйвера или, в случае последнего драйвера число - 1 (шестнадцатиричное значение FFFF). Пример цепочки драйверов показан в листинге 6-6, приведенном в конце этой главы.


Когда MS-DOS требуется обратиться к определенному драйверу, она начинает поиск по цепочке драйверов (начиная с NUL-драйвера) в порядке, обратном тому, в котором драйверы были загружены. После того, как требуемый драйвер найден, MS-DOS обращается к нему с соответствующей командой. Последовательность поиска в цепочке при этом такова, что если загружен пользовательский драйвер, имя которого совпадает с именем какого-либо стандартного драйвера (такого как CON, AUX или PRN), драйвер пользователя будет найден первым. Это позволяет пользователю заменять стандартные драйверы (например, заменить стандартный CON-драйвер на ANSI.SYS CON-драйвер).


Стандартные драйверы в действительности загружаются и инициализируются до того как файл CONFIG.SYS будет считан и обработан.


           ЪДДДї   ЪДДДї
           і 1 і   і 2 і
           АДВДЩ   АДВДЩ
             АДДДВДДДЩ
                 
               ЪДДДї
               і 3 і
               АДВДЩ
                / \   Да
              <  4  >ДДДДДДДД>В<ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї
                \ /                                                  і
                 іНет        / \  Да                                  і
                 і         <  5  >ДДДДДДДДДДДДДДДДДДДДДДДДДДДї        і
                 і           \ /                                     і
                 і<ДДДДДДДДДДДЩНет                         ЪДДДї      і
                                                          і 7 і      і
               ЪДДДї                                       АДВДЩ      і
               і 6 і                                    Да  / \       і
               АДВДЩ                              ЪДДДДДДД<  8  >     і
                 і                                         \ /       і
                 і                              ЪДДДї        іНет     і
                / \  Да                         і 9 і                і
              <  12 >ДДДДДДДДДї                 АДВДЩ      ЪДДДї      і
                \ /                                      і 10і      і
                 іНет       ЪДДДї               ЪДДДї      АДВДЩ      і
                           і 13і               і 11і        і        і
               ЪДДДї        АДВДЩ               АДВДЩ                і
               і 14і          і                   АДДДДДДДДДДДДДДДДДДДЩ
               АДВДЩ          і
                 і            і
                 і<ДДДДДДДДДДДЩ
                 і
                 
               ЪДДДї
               і 15і
               АДДДЩ

                   Блок-схема 6-1. Процесс инициализации MS-DOS.

            1 - Теплая загрузка (при нажатии клавиш Ctrl+Alt+Del)
            2 - Холодная загрузка (кнопка "СБРОС" или включение питания)
            3 - Загрузка системы
            4 - Файл CONFIG.SYS существует ?
            5 - Есть еще строки в CONFIG.SYS ?
            6 - Загрузка и запуск требуемого командного процессора (по
                умолчанию это COMMAND.COM)
            7 - Чтение строки из файла CONFIG.SYS
            8 - Это команда "DEVICE=" ?
            9 - Загрузка указанного в команде "DEVICE=" файла и подключение
                его к цепочке драйверов
           10 - Обработка какой-либо из команд "BREAK=","BUFFERS=","FILES="
                или "SHELL="
           11 - Обращение к драйверу с командой "INIT="
           12 - Файл AUTOEXEC.BAT существует ?
           13 - Выполнение всех обнаруженных в AUTOEXEC.BAT команд
           14 - Выполнение программ DATE и TIME
           15 - Выдача системного приглашения "A:>"

Это позволяет процедуре инициализации драйвера использовать некоторые функции MS-DOS для вывода сообщений или настройке драйвера на конкретную версию операционной системы. Без всякой опаски могут быть использованы функции MS-DOS с 01H по 0CH, которые обеспечивают работу с устройствами CON, PRN и AUX, а также функция 30H ("Получить версию MS-DOS"). Вызовов, относящихся к работе с файлами или управлением памятью, следует избегать, так как распределение памяти полностью еще не завершено.


После того, как файл CONFIG.SYS обработан и драйверы проинициализированы, стандартные драйверы устройств CON, PRN и AUX закрываются и заново открываются операционной системой для того, чтобы могла произойти замена (если таковая предусмотрена) указанных драйверов. Начиная с этого момента используются только новые драйверы.


Определенные драйверы не могут быть заменены пользователем. Один из них - это драйвер пустого (фиктивного) устройства NUL. Это объясняется тем фактом, что MS-DOS использует NUL-драйвер в качестве начала цепочки драйверов. Так как встроенный NUL-драйвер всегда определяет начало цепочки драйверов, то первым всегда будет найден встроенный NUL-драйвер. Схематический пример цепочки драйверов показан на рисунке 6-1. Подробно назначение каждого из указанных полей будет объяснено позже. Драйвер, помеченный как последний, в действительности был первым устанавливаемым драйвером, а драйвер, находящийся сразу после NUL-драйвера (в цепочке) устанавливался самым последним.


             ЪДДДДДДДДДДДД·         ЪДДДДДДДДДДДД·         ЪДДДДДДДДДДДД·
             і Указатель  є         і Указатель  є         і   Маркер   є
             і на первый  ЗДДДДДДДД>і    на      ЗДДДДДДДД>і последнего є
             і  драйвер   є         і следующий  є         і  драйвера  є
             і            є         і  драйвер   є         і   ( -1 )   є
             ГДДДДДДДДДДДД¶         ГДДДДДДДДДДДД¶         ГДДДДДДДДДДДД¶
             і  Атрибуты  є         і  Атрибуты  є         і  Атрибуты  є
             ГДДДДДДДДДДДД¶         ГДДДДДДДДДДДД¶         ГДДДДДДДДДДДД¶
             і Указатель  є         і Указатель  є         і Указатель  є
       ЪДДДДДґ     на     є   ЪДДДДДґ     на     є   ЪДДДДДґ     на     є
       і     і СТРАТЕГИЙ  є   і     і СТРАТЕГИЙ  є   і     і СТРАТЕГИЙ  є
       і     ГДДДДДДДДДДДД¶   і     ГДДДДДДДДДДДД¶   і     ГДДДДДДДДДДДД¶
       і     і Указатель  є   і     і Указатель  є   і     і Указатель  є
       і  ЪДДґ     на     є   і  ЪДДґ     на     є   і  ЪДДґ     на     є
       і  і  і ПРЕРЫВАНИЙ є   і  і  і ПРЕРЫВАНИЙ є   і  і  і ПРЕРЫВАНИЙ є
       і  і  ГДДДДДДДДДДДД¶   і  і  ГДДДДДДДДДДДД¶   і  і  ГДДДДДДДДДДДД¶
       і  і  і Устройство є   і  і  і  Имя или   є   і  і  і  Имя или   є
       і  і  і    NUL     є   і  і  і   число    є   і  і  і   число    є
       і  і  і            є   і  і  і устройств  є   і  і  і устройств  є
       АДДДД>ГДДДДДДДДДДДД¶   АДДДД>ГДДДДДДДДДДДД¶   АДДДД>ГДДДДДДДДДДДД¶
          і  і Программа  є      і  і Программа  є      і  і Программа  є
          і  і СТРАТЕГИЙ  є      і  і СТРАТЕГИЙ  є      і  і СТРАТЕГИЙ  є
          і   \/\/\/\/\/\/       і   \/\/\/\/\/\/       і   \/\/\/\/\/\/
          і  /\/\/\/\/\/\/\      і  /\/\/\/\/\/\/\      і  /\/\/\/\/\/\/\
          АД>ГДДДДДДДДДДДД¶      АД>ГДДДДДДДДДДДД¶      АД>ГДДДДДДДДДДДД¶
             і Программа  є         і Программа  є         і Программа  є
             і ПРЕРЫВАНИЙ є         і ПРЕРЫВАНИЙ є         і ПРЕРЫВАНИЙ є
              \/\/\/\/\/\/           \/\/\/\/\/\/           \/\/\/\/\/\/
             /\/\/\/\/\/\/\         /\/\/\/\/\/\/\         /\/\/\/\/\/\/\
             ФННННННННННННј         ФННННННННННННј         ФННННННННННННј
                     Рисунок 6-1. Цепочка драйверов устройств.

Не только NUL-драйвер не может быть заменен. Драйверы, работающие с устройствами массовой памяти (например с дисками), также не могут быть заменены. Вы можете добавить драйверы для новых дисков, но не удалить или заменить уже существующие. Это ограничение возникает по той причине, что имена драйверам дисковых устройств (A,B,C и т.д.) назначает MS-DOS при загрузке. Невозможно присвоить конкретному дисководу уникальное имя, соответственно нельзя и заменить его.


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz