Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

MS-DOS для программиста

© Александр Фролов, Григорий Фролов
Том 18, М.: Диалог-МИФИ, 1995, 254 стр.

[Назад] [Содеожание] [Дальше]

1.3. Состав и общая схема работы MS-DOS

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

Как мы уже говорили, в идеальном случае программа MS-DOS обращается к портам аппаратуры компьютера при помощи многоступенчатой схемы, в которую входит базовая система ввода/вывода BIOS, драйверы и программные прерывания MS-DOS (рис. 1.1).

img00001.gif (3579 bytes)

Рис.1.1. Схема взаимодействия программы с MS-DOS, BIOS и аппаратурой компьютера

Из рис. 1.1 видно, что программа MS-DOS может обращаться к ядру MS-DOS (вызывая программные прерывания MS-DOS), к базовой системе ввода/вывода BIOS, а также непосредственно к портам ввода/вывода аппаратуры. Однако программа не может непосредственно вызывать драйверы MS-DOS.

Ядро MS-DOS вызывает драйверы и прерывания BIOS, а также может работать с аппаратурой. В свою очередь, драйверы могут вызывать программные прерывания BIOS и работают с портами ввода/вывода.

Как правило, ядро MS-DOS разделяют на несколько систем, каждая из которых отвечает за выполнение той или иной задачи. Обычно выделяются следующие системы:

  • файловая;
  • управления памятью;
  • управления программами;
  • связи с драйверами устройств;
  • обработки ошибок;
  • службы времени;
  • ввода/вывода для консоли оператора.

Эти системы общаются с аппаратурой через прерывания BIOS, драйверы или напрямую. Прикладное программное обеспечение может вызывать системы MS-DOS, работать с BIOS или непосредственно с аппаратурой. Еще раз обращаем ваше внимание на то, что прикладные программы могут обращаться к драйверам только через соответствующую систему MS-DOS.

Рассмотрим системы MS-DOS отдельно.

Файловая система

Файловая система является одной из важнейших систем MS-DOS. Она используется как во время загрузки операционной системы, так и в процессе ее работы. Сама операционная система записана на системном диске в виде файлов (io.sys, msdos.sys, command.com, драйверы, внешние команды и т. д.). Все прикладные программы и вообще все программы, а также данные для них хранятся на дисках в виде файлов, поэтому можно сказать, что файловая система - ключевая система MS-DOS (злые языки говорят, что кроме файловой системы в MS-DOS больше ничего нет).

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

Файловая система работает с дисками через драйверы. Драйверы, в свою очередь, пользуются сервисом BIOS.

На уровне BIOS выполняются элементарные операции с диском, такие как чтение/запись секторов, форматирование и т. п. Этот низкий уровень доступен и прикладной программе, но обычно она пользуется функциями прерывания MS-DOS, выполняющими все необходимые действия по обслуживанию каталогов и таблицы размещения файлов (File Allocation Table - FAT). Программы защиты от несанкционированного доступа или копирования вынуждены обращаться к средствам более низкого уровня, вызывая прерывания BIOS, или даже работать с контроллером диска через порты ввода/вывода.

Используя систему MS-DOS, отвечающую за связь с драйверами, прикладные программы могут выполнять элементарные операции с диском, такие как форматирование, с помощью драйвера диска.

Система управления памятью

Эта система MS-DOS используется для распределения памяти запускаемым программам.

MS-DOS управляет памятью с помощью блоков MCB (Memory Control Block). Память разбивается на фрагменты. Каждому фрагменту памяти предшествует MCB, в котором записаны характеристики блока памяти. Для каждой вновь запускаемой программы MS-DOS создает определенное количество фрагментов памяти. При освобождении памяти или при выполнении запросов на получение дополнительной памяти MS-DOS проверяет и соответствующим образом изменяет содержимое блоков MCB.

Все блоки MCB располагаются друг за другом. Адрес первого блока хранится в векторной таблице связи CVT, доступ к которой можно получить с помощью недокументированных средств.

Прикладная программа может заказать для себя дополнительные фрагменты памяти. Для этого она обращается к системе управления памятью, используя функции прерывания INT 21h.

Система управления программами

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

Как известно, в MS-DOS существуют два формата выполняемых программ. Соответствующие файлы имеют расширение имени .com и .exe. Способы запуска этих программ сильно различаются. Система управления программами автоматически распознает их и загружает в память по-разному. Мы еще вернемся к описанию различий между этими типами программ.

Другая задача, решаемая системой управления программами - запуск программ из программ и загрузка оверлеев (дополнительных модулей программы, загружаемых в память с перекрытием). Если не все модули большого программного комплекса нужны одновременно, вы можете разбить комплекс на несколько модулей. Это могут быть либо несколько отдельных программ, либо несколько оверлейных модулей. Каждый из этих способов имеет свои преимущества и недостатки; оба они пригодны для экономии памяти.

И наконец, последняя функция системы управления программами - работа с резидентными программами. Если вам надо, чтобы после завершения своей работы программа осталась резидентной в памяти, вы, как и в случае завершения обычной программы, обращаетесь к системе управления программами через соответствующую функцию прерывания INT 21h.

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

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

Возможно, что запрет на непосредственный вызов драйверов введен для обеспечения совместимости с будущими версиями операционной системы, в которых механизм вызова драйверов может измениться. Однако используя сведения, приведенные в этой книге, вы сможете обойти этот запрет и обратиться непосредственно к драйверу. При этом вам придется использовать некоторые недокументированные прерывания MS-DOS, что само по себе нежелательно из-за возможной потери совместимости с другими версиями операционной системы.

Для управления состоянием устройства ввода/вывода или состоянием драйвера используется специальная функция 44h прерывания INT 21h. Эта функция предназначена для обмена управляющей информацией между прикладной программой и драйвером.

Система обработки ошибок

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

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

Служба времени

Любой компьютер оборудован системными часами. Это часы с питанием от аккумулятора. Их содержимое не сбрасывается при выключении компьютера.

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

Операционная система MS-DOS ведет подсчет времени и хранит текущие показания часов, а также текущую дату. Программа может опросить часы, обратившись к MS-DOS через одну из функций прерывания INT 21h, или установить новое состояние часов.

В составе операционной системы MS-DOS имеется драйвер устройства CLOCK$. Прикладная программа может обратиться к этому устройству для чтения показания часов или для установки часов.

Работа с консолью оператора

Консоль оператора состоит из двух устройств - клавиатуры и дисплея. Эти два устройства обслуживаются одним драйвером - драйвером консоли CON. Вы можете рассматривать консоль как одно устройство с именем CON.

Операционная система обслуживает консоль с помощью функций прерывания INT 21h, обеспечивающих ввод и вывод символов на устройство CON. Для работы с клавиатурой и видеоконтроллером этот драйвер вызывает прерывания BIOS.

Другие системы MS-DOS

MS-DOS имеет драйверы для работы с параллельными и последовательными портами, которые обеспечивают обмен данными в символьном режиме и управление подключенными к ним устройствами (обычно это принтеры, мышь или факс-модемы).

Кроме того, для печати текста в фоновом режиме в состав MS-DOS входит программа print.com. Эта практически единственная "мультизадачная" программа MS-DOS является примером стандартной резидентной программы. Она позволяет выполнять почти любую работу (такую, например, как редактирование текста или прием файла через модем) параллельно с печатью текста.

Специально следует отметить драйверы электронного диска и кэш-памяти. Драйвер электронного диска называется ramdrive.sys. Этот драйвер организует в расширенной или в дополнительной памяти компьютера быстрый псевдодиск. Можно организовать электронный диск и в основной памяти, но основной памяти всегда мало!

Операционная система MS-DOS версии 6.22 имеет в своем составе систему управления дополнительной и расширенной памятью, которая реализуется драйверами himem.sys и emm386.exe. Эти драйверы позволяет программам, составленным специальным образом, использовать расширенную или дополнительную память для хранения данных и выполнения программ (в некоторых случаях).

С помощью программы memmaker.exe и перечисленных выше драйверов пользователь может в автоматическом режиме освободить первый мегабайт оперативной памяти, переместив драйверы и резидентные программы в расширенную память.

Если подключен драйвер himem.sys, то с помощью драйвера smartdrv.exe можно создать кэш-память (или просто кэш) для жесткого диска. Особенно эффективно применение кэша для работы с базами данных, когда вам периодически требуется одна и та же информация. Если данные были считаны с диска, то в следующий раз, когда они потребуются снова, с большой вероятностью данные будут доступны без повторного обращения к диску.

Такое широко распространенное и ставшее стандартным для любого персонального компьютера устройство, как мышь, не поддерживается операционной системой MS-DOS. Для использования мыши следует подключить драйвер, который обычно поставляется вместе с этим устройством.

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

[Назад] [Содеожание] [Дальше]