Операционные системы
ОПЕРАЦИОННАЯ СИСТЕМА MS-DOS
Методические указания к лабораторным работам для студентов 2 и 3 курса
Способы обращения к ОС MS-DOS
Программы, составленные на языке С, обращаются к прерываниям MS-DOS с помощью таких функций как intdos, int86, intdosx и т.д.
Для передачи параметров используются структуры REGS, WORDREGS, BYTEREGS, SREGS, описанные в файле dos. h. Программа записывает параметры в поля структуры, соответствующие регистрам процессора, а затем вызывает одну из перечисленных выше функций, передавая ей адрес структуры. После выполнения прерывания результат записывается в эту же или другую структуру. Например: union REGS inregs, outregs; struct SREGS segregs;......
inregs. h. ah. = 0x3a; segregs. ds = FP_SEG(dir_name) ; inregs. x. dx = FP_OFF(dir_name) ; intdosx(&inregs, &outregs, &segregs) ;.....
В этом фрагменте кода вызывается функция 3Ah прерывания INT 21h, для чего используется функция intdosx, которая входит в стандартную библиотеку системы разработки С++. Номер функции записывается в поле h. ah объединения inregs, параметры функции (передаваемые через регистры DS: DX) соответственно поле ds структуры segregs и в поле x. dx объединения inregs. Функция intdosx записывает содержимое регистров процессора поле выполнения программного прерывания в объединение outregs.
Объединение REGS определено в файле dos. h следующим образом: UNION REGS { struct WORDREGS x; struct BYTEREGS h; }; В нем имеется две структуры - WORDREGS и BYTEREGS.
Первая из этих структур предназначена для работы с 16-зфззядными регистрами. Она определена так: struct WORDREGS { unsigned int ax, bx, cx, dx, si. di, cflag, flags; }; В этой структуре поля ax, bx, cx, dx, si, di соответствуют одноименным регистрам центрального процессора. Значение флага переноса записывается в переменную cflag, поле flags предназначено для остальных флагов процессора.
С помощью структуры BYTEREGS можно задавать и определять содержимое 8-разрядных регистров процессора: struct BYTEREGS { unsigned char al, ah, bl, bh, cl, ch, dl, dh; }; Для работы с сегментными регистрами предназначена структура SREGS, определенная следующим образом: struct SREGS { unsigned int es; unsigned int cs; unsigned int ss, unsigned int ds; }; Для использования перечисленных выше структур программа должна одержать следующую строку: #include <dos. h> Поле вызова программного прерывания программа должна проверить флаг переноса, который сохраняется в поле cflag. Проверка поля cflag может быть выполнена, например, следующим образом: union REGS inregs, outregs;.....
intdos(&inregs, &outregs) ; if(outregs. x. cflags! = 0) error() ;......
Код ошибки при этом записывается в переменную outregs. x. ax.
Лабораторная работа № 1 Исследование логической структуры диска в MS-DOS Цель работы Изучение логической структуры диска ОС MS-DOS Общие положения Диски ОС MS-DOS организованы по довольно жесткой схеме. Каждый диск включает в себя помимо области файлов еще несколько управляющих областей фиксированного размера. Первый сектор логического диска (сектор 1, дорожка 0, головка 0) содержит загрузочную запись - программу начальной загрузки ОС. Кроме программы начальной загрузки в загрузочной записи находятся параметры, описывающие характеристики данного логического диска. Эти параметры располагаются в самом начале сектора.
Формат загрузочной записи
Смещение байт
Размер байт
Содержание

0
3
Команда JMP xxxxx - ближний переход на программу начальной загрузки

3
8
Название фирмы-изготовителя ОС и версия.

11
25
Расширенный блок параметров BIOS

36
1
Физический номер устройства (0 - НГМД, 80h - НМД)

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

38
1
Символ “(“- признак расширенной загрузочной записи

39
4
Серийный номер диска, создается во время форматирования

43
11
Метка диска

54
8
Содержит запись ‘FAT12 ‘ или ‘FAT16 ‘, которая идентифицирует формат таблицы размещения файлов (FAT)

Со смещением 11 располагается расширенный блок параметров BIOS. Этот блок содержит некоторые характеристики логического диска.
Смещение байт
Размер байт
Имя поля
Описание

0
2
set_siz
Количество байт в одном секторе диска

2
1
clustsiz
Количество секторов в одном кластере

3
2
res_sect
Количество зарезервированных секторов

5
1
fat_cnt
Количество FAT

6
2
root_siz
Максимальное количество дескрипторов файлов в корневом каталоге диска

8
2
tot_sect
Общее количество секторов на носителе данных

10
1
media
Байт-описатель среды носителя данных

11
2
fat_size
Количество секторов, занимаемых одной копией FAT

13
2
sectors
Количество секторов на дорожке

15
2
heads
Количество магнитных головок

17
2
hidden_1
Количество скрытых секторов, для носителя размером < 32 Мб

19
2
hidden_2
Количество скрытых секторов, для носителя размером > 32 Мб

21
4
tot_sect
Общее количество секторов на логическом диске, превышающим по размеру 32 Мб

Байт описания среды - media может служит для идентификации носителя данных, например, он содержит значение F8h для жесткого диска любой емкости или значение F0h для диска размером 3,5 дюйма и емкостью 1440 Кб.
Прерывания для работы с логическим диском Для работы с логическим диском (или дискетой) на уровне логических номеров секторов MS-DOS программам два прерывания - INT 25h (чтение сектора по его логическому номеру) и INT 26h (запись сектора по его логическому номеру) . Для вызова этих прерываний используется следующий формат: INT 25h - чтение сектора по его логическому адресу На входе: AL - Адрес НГМД или НМД (0-A:, 1-B:, и т.д.
CX - количество секторов, которые нужно прочитать DX - логический номер начального сектора DS: BX - адрес буфера для чтения На выходе: AH - код ошибки при неуспешном завершении операции CF 1, если произошла ошибка; 0, если ошибки нет.
INT 26h - запись сектора по его логическому номеру На входе: AL - Адрес НГМД или НМД (0-A:, 1-B:, и т.д.
CX - количество секторов, которые нужно записать DX - логический номер начального сектора DS: BX - адрес буфера, содержащего данные На выходе: AH - код ошибки при неуспешном завершении операции CF 1, если произошла ошибка; 0, если ошибки нет.
В программах на языке С для работы с указанными прерываниями может быть использован следующий фрагмент программы:...
union REGS reg; struct SREGS segreg; reg. x. ax. = drive; reg. x. bx = FP_OFF (buff) ; segreg. ds = FP_SEG (buff) ; reg. x. x. = 1; reg. x. dx. = 0; int86x(0x25, &reg, &reg, &segreg) ;...
где buff - адрес буфера, в который считывается (записывается) логический сектор.
Замечание: после вызова прерывания должна обязательно следовать команда: asm POP AX Порядок выполнения лабораторной работы
Изучить логическую структуру дика MS-DOS.
Составить программу, читающую загрузочный сектор диска и выводящую на экран основные характеристики диска из BPB.
Содержание отчета
Цель работы. Описание логической структуры диска MS-DOS. Характеристики логического диска, полученные в результате работы составленной в ходе выполнения лабораторной работы программы.
Контрольные вопросы
Принципы записи информации на дисковые накопители. Методы разделения дискового пространства между пользователями (“справочник файлов” ) . Методы распределения дискового пространства для файлов. Логическая структура диска MS-DOS.
Литература
Г. Дейтел. Введение в операционные системы. Том 1,2. М: Мир, 1987.
А. В. Фролов, Г. В. Фролов MS-DOS для программиста. Библиотека системного программиста, Том 19, М: ДИАЛОГ-МИФИ, 1995.
 
 
Лабораторная работа №2
Исследование таблицы размещения файлов (FAT - таблицы) ОС MS-DOS
Цель работы Изучить структуру и назначение FAT таблицы ОС MS-DOS
Общие положения Сразу вслед за загрузочным сектором на логическом диске находятся секторы, содержащие таблицу размещения файлов (FAT - таблица) . FAT - таблица используется для хранения информации о распределении файлам секторов диска. Сектор диска - это часть диска, в которой обычно хранится 512 байт информации, относящейся к файлу. Весь диск разбивается операционной системой на участки одинакового размера, называемые кластерами. Кластер может одержать несколько смежных секторов. Для каждого кластера в FAT таблице есть своя индивидуальная ячейка, в которой хранится информация об использовании кластера, т.е. FAT - таблица - это массив, содержащий информацию о кластерах. Размер этого массива равен общему количеству кластеров на логическом диске.
В FAT - таблице находятся списки кластеров, распределенных файлам.. Таким образом, если файл занимает несколько кластеров на диске, то эти кластеры связаны в список. При этом элементы FAT - таблицы содержат номера следующих используемых данным файлом кластеров. Конец списка отмечен в таблице специальным значением. Номер первого кластера, распределенного файлу, хранится в элементе каталога, описывающего данный файл. Пример использования FAT таблицы приведен на рис. 1.
Корневой каталог диска C:
Имя файла
...
Номер первого кластера, распределенного файлу

 
autoexec. bat
...
11

 
config. sys
...
12

...
...
...

FAT - таблица
...
17
13
FFFF
00
00
00
18
FFFF
00
.....

кластер
11
12
13
14
15
16
17
18
19
 

Пример