Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Структура и принципы работы MS-DOS.doc
Скачиваний:
59
Добавлен:
02.05.2014
Размер:
379.9 Кб
Скачать

Работа с файловой системой

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

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

Управление программами

MS-DOS предоставляет программам возможность организовать запуск других программ или загрузку и выполнение программных оверлеев. Для этого служит функция 4Bh.

Для завершения работы программа должна также использовать одну из специальных функций MS-DOS. Функция 4Ch, завершая работу программы, позволяет передать операционной системе некоторое число, называемое кодом завершения программы. Это число может быть затем проанализировано в пакетном файле командой IF ERRORLEVEL. Если одна программа запускает другую, то первая может получить код завершения второй с помощью функции 4Dh.

Для того чтобы завершающаяся программа осталась в оперативной памяти (т. е. стала резидентной), она должна вызвать прерывание INT 27h или воспользоваться функцией 31h.

В нашей книге мы приведем различные примеры запуска программ из программ и научимся составлять резидентные программы.

Управление памятью

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

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

Драйвер himem.sys предоставляет программе доступ к расширенной памяти, расположенной в адресном пространстве выше границы первого мегабайта. Так как в реальном или виртуальном режиме процессор не может непосредственно адресовать блоки расширенной памяти, для выполнения такой адресации необходимо пользоваться программным интерфейсом драйвера himem.sys.

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

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

Другие функции

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

1.6. Обработка ошибок

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

Перечислим коды ошибок, возвращаемые программе через регистр AX.

Код

Описание

01

Указан неправильный код функции

02

Файл не найден

03

Путь не найден

04

Слишком много открытых файлов

05

Доступ запрещен

06

Неправильный идентификатор

07

Разрушен блок управления памятью

08

Недостаточно памяти

09

Неправильный адрес блока памяти

0Ah

Неправильная среда

0Bh

Неправильный формат

0Ch

Неправильный доступ

0Dh

Неправильные данные

0Eh

Зарезервировано

0Fh

Ошибка при указании диска

10h

Невозможно удалить текущий каталогтекущий каталог

11h

Другое устройство

12h

Больше нет файлов

Для MS-DOS версии 3.0 и более поздних версий обработка ошибок значительно расширена. Введена функция 59h, предназначенная для получения дополнительной информации об ошибках.

При вызове этой функции регистр BX должен содержать индикатор уровня анализа ошибок, который должен быть равен 0. Кроме расширенного кода ошибки, возвращаемого в регистре AX, программа может получить класс ошибки (регистр BH), код предполагаемых действий (регистр BL), локализацию ошибки (регистр CH).

К сожалению, эта функция разрушает содержимое регистров CL, DX, SI, DI, BP, DS, ES. Программа, использующая функцию 59h прерывания INT 21h, должна позаботиться о сохранении содержимого этих регистров.

Расширенный код ошибки, возвращаемый в регистре AX, может принимать значения, указанные ниже. Коды от 1 до 12h эквивалентны кодам, рассмотренным ранее и второй раз не приводятся.

Код

Описание

13h

Выполнена попытка записи на защищенный от записи диск

14h

Указан неизвестный идентификатор устройства

15h

Диск не готов

16h

Неизвестная команда

17h

Ошибка циклического кода проверки

18h

Неправильная длина структуры запроса

19h

Ошибка при поиске

1Ah

Неизвестен тип среды носителя данных

1Bh

Сектор не найден

1Ch

Кончилась бумага в принтере

1Dh

Ошибка записи

3Eh

Ошибка чтения

1Fh

Общая ошибка

20h

Ошибка при доступе к совместно используемому файлу

21h

Нарушение блокировки файла

22h

Неправильный диск

23h

FCBFCB недоступен (слишком много блоков FCB)

24h

Переполнился буфер, предназначенный для совместного доступа к файлам

25h

Несоответствие кодовых страниц

26h

Ошибка при обработке конца файла

27h

Переполнение диска

28h - 31h

Зарезервировано

32h

Сетевая функция не поддерживается

33h

Удаленный компьютер не отвечает

34h

Дублирование имени в сети

35h

Сетевое имя не найдено

36h

Сеть занята

37h

Сетевое устройство больше не существует

38h

Слишком много команд

39h

Ошибка в аппаратуре сетевого адаптера

3Ah

Неправильный ответ из сети

3Bh

Непредусмотренная ошибка сети

3Ch

Несовместимый удаленный адаптер

3Dh

Переполнена очередь печати

3Eh

Мало места в очереди печати

3Fh

Печать отменена

40h

Сетевое имя было удалено

41h

Доступ к сетевому ресурсу запрещен

42h

Неправильный тип сетевого устройства

43h

Сетевое имя не найдено

44h

Слишком много сетевых имен

45h

Слишком много сеансов связи

46h

Совместное использование ресурсов в сети временно отменено

47h

Сетевой запрос отвергнут

48h

Переадресация приостановлена

49h - 4Fh

Зарезервировано

50h

Файл уже существует

51h

Дублирование блока FCBFCB

52h

Невозможно создать дескриптор в каталоге

53h

Ошибка обработчика критических ошибок INT 24hINT 24h

54h

Слишком много переназначений

55h

Двойное переназначение

56h

Неправильный пароль

57h

Неправильный параметр

58h

Ошибка при записи данных в сети

59h

Нет такой функции в сети

5Ah

Не установлен необходимый компонент системы

Класс ошибки, передаваемый в регистре BH, содержит информацию, которая поможет вам обработать данную ошибку:

Класс ошибки

Описание

1

Недостаточно ресурсов: блоков FCBFCB, памяти и т. д.

2

Временная ситуация, попробуйте повторить операцию позже

3

Нет прав доступа

4

Внутренняя ошибка MS-DOS

5

Ошибка аппаратуры

6

Системная ошибка MS-DOS

7

Ошибка в прикладной программе

8

Файл или объект не найден

9

Неправильный формат файла или объекта

10

Файл или объект заблокирован

11

Ошибка носителя данных

12

Файл или объект уже существует

13

Прочие ошибки

Код предполагаемых действий, передаваемый через регистр BL, поможет вашей программе правильно обработать ошибку. Приведем список кодов предполагаемых действий:

Код

Рекомендуемые действия

1

Повторить операцию позже. Можно спросить пользователя, желает он повторить операцию или завершить работу программы

2

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

3

Если пользователь вводил какие-то данные для MS-DOS, следует попросить его ввести эти данные еще раз (например, пользователь мог указать неправильный идентификатор диска или путь доступа к файлу)

4

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

5

Немедленный выход из программы без выполнения завершающих действий. Система находится в непредсказуемом состоянии

6

Следует игнорировать ошибку

7

Повторить операцию, после того как пользователь выполнит требуемые действия (установит дискету и т. п.)

Сведения о локализации ошибки передаются в регистре CH. Приведем список кодов локализации:

Код

Место, где произошла ошибка

1

Система не знает, где произошла ошибка

2

В устройстве, выполняющем обмен данными отдельными блоками (диск или магнитная лента)

3

Ошибка связана с сетью

4

В символьном устройстве, например, в принтере

5

Ошибка связана с оперативной памятью

Если ваша программа составлена на языке ассемблера, то после обращения к MS-DOS через прерывание следует проверить состояние флага переноса:

int 21h

jc error

MS-DOS имеет еще одно средство для обработки ошибок - обработчик критических ошибок (Critical Error Handler). Этот модуль вызывается MS-DOS, когда она получает сообщение об ошибке от драйвера устройства.

Модуль выдает на экран хорошо известное вам сообщение:

Abort, Retry, Fail?

Это сообщение обычно появляется тогда, когда вы забываете вставить дискету или начинаете печатать при отключенном принтере.

Прикладные программы могут подключать свой модуль обработки критических ошибок вместо стандартного модуля.

А теперь расскажем более подробно о том, как программа может вызывать прерывания MS-DOS.

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.