Реферат: Операционная система MS-DOS
НовосибирскийГосударственный Технический Университет
ОПЕРАЦИОННЫЕ СИСТЕМЫ
ЧАСТЬ 1. ОПЕРАЦИОННАЯСИСТЕМА MS-DOS
Методические указания
к лабораторным работам длястудентов 2 и 3 курса
Факультета АВТФ(специальность 2202)
дневного и заочногоотделения
Новосибирск
1997
<span Times New Roman",«serif»; mso-fareast-font-family:«Times New Roman»;mso-ansi-language:RU;mso-fareast-language: RU;mso-bidi-language:AR-SA">Составили: к.т.н.,доц. В.Г. Качальский
ст.преп. Е.Н.Павенко
Рецензенты: к.т.н.,доц. В.А. Астапчук
Работа подготовлена кафедрой автоматизированныхсистем управления
<span Times New Roman",«serif»; mso-fareast-font-family:«Times New Roman»;mso-ansi-language:RU;mso-fareast-language: RU;mso-bidi-language:AR-SA">Способы обращения к ОС 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
{
structWORDREGS 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.
<span Times New Roman",«serif»;mso-fareast-font-family:«Times New Roman»;mso-ansi-language: EN-US;mso-fareast-language:RU;mso-bidi-language:AR-SA">Лабораторная работа № 1
Исследование логическойструктуры диска вMS-DOS
Цель работы
Изучение логическойструктуры диска ОС MS-DOS
Общие положения
ДискиОС MS-DOS организованы по довольно жесткой схеме. Каждый дисквключает в себя помимо области файлов еще несколько управляющих областейфиксированного размера. Первый сектор логического диска (сектор 1, дорожка 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.Этот блок содержитнекоторые характеристики логического диска.
Смещение
байт
Размер
байт
Имя поля
Описание
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 программам два прерывания — INT25h (чтениесектора по его логическому номеру) и INT 26h (запись сектора по егологическому номеру). Для вызова этих прерываний используется следующий формат:
INT25h — чтениесектора по его логическому адресу
Навходе:
AL — АдресНГМД или НМД (0-A:, 1-B:, и т.д.
CX — количествосекторов, которые нужно прочитать
DX — логическийномер начального сектора
DS:BX — адресбуфера для чтения
Навыходе:
AH — кодошибки при неуспешном завершении операции
CF 1, если произошла ошибка;
0,если ошибки нет.
INT26h — записьсектора по его логическому номеру
Навходе:
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, ®, ®,&segreg);
...
где buff — адрес буфера, в которыйсчитывается (записывается) логический сектор.
Замечание:после вызова прерывания должна обязательно следовать команда:
asm POP AX
Порядок выполнениялабораторной работы
1. <span Times New Roman"">
Изучить логическую структурудика MS-DOS.2. <span Times New Roman"">
Составить программу,читающую загрузочный сектор диска и выводящую на экран основные характеристикидиска из BPB.Содержание отчета
1.<span Times New Roman"">
Цель работы.2.<span Times New Roman"">
Описание логическойструктуры диска MS-DOS.3.<span Times New Roman"">
Характеристики логическогодиска, полученные в результате работы составленной в ходе выполнениялабораторной работы программы.Контрольные вопросы
1.<span Times New Roman"">
Принципы записи информациина дисковые накопители.2.<span Times New Roman"">
Методы разделения дисковогопространства между пользователями («справочник файлов»).3.<span Times New Roman"">
Методы распределениядискового пространства для файлов.4.<span Times New Roman"">
Логическая структура диска MS-DOS.Литература
1.<span Times New Roman"">
Г. Дейтел. Введение в операционные системы. Том 1,2. М: Мир, 1987.2.<span Times New Roman"">
А. В. Фролов, Г.В. Фролов MS-DOS для программиста. Библиотекасистемного программиста, Том 19, М: ДИАЛОГ-МИФИ, 1995.<span Times New Roman",«serif»; mso-fareast-font-family:«Times New Roman»;mso-ansi-language:RU;mso-fareast-language: RU;mso-bidi-language:AR-SA">Лабораторная работа №2
Исследование таблицыразмещения файлов (FAT — таблицы) ОС MS-DOS
Цель работы
Изучить структуру иназначение FAT-таблицы ОС MS-DOS
Общие положения
Сразувслед за загрузочным сектором на логическом диске находятся секторы, содержащиетаблицу размещения файлов(FAT- таблица). FAT- таблица используется для хранения информациио распределении файлам секторов диска. Сектор диска — это часть диска, вкоторой обычно хранится 512 байт информации, относящейся к файлу. Весь дискразбивается операционной системой на участки одинакового размера, называемыекластерами. Кластер может одержать несколько смежных секторов. Для каждогокластера в FAT- таблицеесть своя индивидуальная ячейка, в которой хранится информация об использованиикластера, т.е. FAT- таблица — это массив, содержащий информацию о кластерах. Размер этого массива равенобщему количеству кластеров на логическом диске.
В FAT- таблице находятся списки кластеров,распределенных файлам… Таким образом, если файл занимает несколько кластеровна диске, то эти кластеры связаны в список. При этом элементы FAT- таблицы содержат номера следующихиспользуемых данным файлом кластеров. Конец списка отмечен в таблицеспециальным значением. Номер первого кластера, распределенного файлу, хранится в элементе каталога, описывающегоданный файл.Пример использования FAT- таблицы приведен на рис.1.
Корневой каталог диска C:
Имя файла
...
Номер первого кластера, распределенного файлу
<img src="/cache/referats/1187/image001.gif" " v:shapes="_x0000_s1029"><img src="/cache/referats/1187/image002.gif" " v:shapes="_x0000_s1028">autoexec.bat
...
11
<img src="/cache/referats/1187/image003.gif" " v:shapes="_x0000_s1033"><img src="/cache/referats/1187/image004.gif" " v:shapes="_x0000_s1032">config.sys
...
12
...
...
...
<img src="/cache/referats/1187/image005.gif" v:shapes="_x0000_s1027"><img src="/cache/referats/1187/image006.gif" v:shapes="_x0000_s1026">
<img src="/cache/referats/1187/image007.gif" v:shapes="_x0000_s1031"><img src="/cache/referats/1187/image008.gif" v:shapes="_x0000_s1030">FAT- таблица
...
17
13
FFFF
00
00
00
18
FFFF
00
.....
кластер
11
12
13
14
15
16
17
18
19
<img src="/cache/referats/1187/image009.gif" v:shapes="_x0000_s1044"><img src="/cache/referats/1187/image010.gif" v:shapes="_x0000_s1035"><img src="/cache/referats/1187/image011.gif" v:shapes="_x0000_s1043"><img src="/cache/referats/1187/image012.gif" v:shapes="_x0000_s1042"><img src="/cache/referats/1187/image013.gif" v:shapes="_x0000_s1034"><img src="/cache/referats/1187/image014.gif" v:shapes="_x0000_s1041"><img src="/cache/referats/1187/image015.gif" v:shapes="_x0000_s1040"><img src="/cache/referats/1187/image016.gif" v:shapes="_x0000_s1039"><img src="/cache/referats/1187/image017.gif" v:shapes="_x0000_s1038"><img src="/cache/referats/1187/image018.gif" v:shapes="_x0000_s1037"><img src="/cache/referats/1187/image019.gif" v:shapes="_x0000_s1036">
Рис 1. Пример распределениякластеров для файлов autoexec.bat b config.sys
FAT- таблица может иметь 12- или 16-битовыйформат. При этом в таблице для хранения информации об одном кластере дискаиспользуется соответственно 12 или 16 бит. 12-битовый формат удобен для дискетс небольшим количеством секторов — вся FAT- таблица помещается в одном секторе.
Первыйбайт FAT- таблицы называется описателемсреды. Он имеет такое же значение, как и байт — описатель среды, находящийся взагрузочном секторе дика.
Следующие5 байт для 12-битового формата или 7байт для 16-битового формата всегда содержат значение 0FFh.
Остальная часть FAT- таблицы состоит из 12- или 16-битовых ячеек.Каждая ячейка соответствует одному кластеру диска. Эти ячейки могут содержатьследующие значения:
FAT12
FAT16
Тип кластера
000h
0000h
Свободный кластер
FF0h-FF6h
FFF0h-FFF6h
Зарезервированный кластер
FF7h
FFF7h
Плохой кластер
FF8h-FFFh
FFF8h-FFFFh
Последний кластер в списке
002h-FEFh
0002h-FFEFh
Номер следующего кластера в списке
ОбычноFAT — таблица располагается после загрузочного сектора. Для точногоопределения начального сектора FAT — таблицы следует прочитать впамять загрузочный сектор и проанализировать содержимое блока параметров BIOS. Вполе ressect записано количество зарезервированных секторов,которые располагаются перед FAT.Поле fat_size содержитразмер FAT в секторах.Кроме того, следует учитывать, что на диске можетнаходиться несколько копий FAT. Операционная системаиспользует только первую копию FAT, но обновляет вторую.Вторая копия нужна для утилит восстановления содержимого диска. Количествокопий FAT находится в поле fat_cnt загрузочного сектора.
Общаясхема использования FAT такова:
·<span Times New Roman"">
Получаем номер первогокластера файла, для которого необходимо определить его расположение на диске.·<span Times New Roman"">
Используем номер первогокластера как индекс в FAT — таблице для извлеченияномера следующего кластера.·<span Times New Roman"">
Повторяем предыдущуюпроцедуру до тех пор, пока извлеченное из FAT- таблицызначение не будет соответствовать концу файла.Процедураизвлечения номера кластера из FAT — таблицы зависит от формата FAT — таблицы.
16-битовуюFAT — таблицу можно представить как массив 16-битовых чисел. Для определенияномера следующего кластера надо просто извлечь 16-битовое значение из FAT — таблицы,использовав в качестве индекса номер предыдущего кластера.
Для12-битовой FAT — таблицы процедура значительно сложнее. Необходимовыполнить следующие действия:
·<span Times New Roman"">
умножить номер начальногокластера на 3;·<span Times New Roman"">
разделить результат на 2;·<span Times New Roman"">
прочитать 16-битовое словоиз FAT — таблицы, используя в качестве смещения значение, полученное последеления на 2;·<span Times New Roman"">
если номер начальногокластера четный, на выбранное из FAT слово нужно наложить маску0FFFh,оставив младшие 12 бит; если же номер начального кластера нечетный, выбранноеиз FAT значение необходимо сдвинуть вправо на 4 бита, оставив старшие 12 бит;·<span Times New Roman"">
полученный результат — этономер следующего кластера в цепочке.Используяописанную выше процедуру можно определить для каждого файла цепочку занимаемыхим кластеров.
Длянахождения первого кластера, распределенного файлу необходимо прочитатьинформацию из каталога., в котором содержится данный файл. Для этого необходимосначала прочитать корневой каталог, а затем все подкаталоги из пути каталогов кданному файлу.
Корневойкаталог находится сразу за последней копией FAT. Перед корневым каталогомнаходится один загрузочный сектор и fat_cnt*fat_sizeсекторов FAT — таблицы.Размер корневого каталога можно определить исходя из значения поля root_size.При форматировании дика в это поле записывается максимальное количество файлови каталогов, которые могут быть в корневом каталоге. Для каждого элемента вкаталоге отводится 32 байта, поэтому корневой каталог имеет длину 32*root_size байт.Корневой каталог занимаетнепрерывную область фиксированного размера.
Любойкаталог одержит 32-байтовыу дескрипторы, описывающие файлы и другие каталоги.Дескриптор имеет следующий формат:
Смещение
байт
Размер
байт
Содержание
8
Имя файла или каталога, выровненное на левую границу и дополненное пробелами
8
3
Расширение имени файла, выровненное на левую границу и дополненное пробелами
11
1
Байт атрибутов файла
12
10
Зарезервировано
22
2
Время создания файла или время его последней модификации
24
2
Дата создания файла или дата его последней модификации
26
2
Номер первого кластера, распределенного файлу
28
4
Размер файла в байтах
Влюбом каталоге, кроме корневого, два первых дескриптора имеют специальноеназначение. Первый дескриптор содержит в поле имени строку
«. ». Этот дескриптор указывает наодержащий его каталог, т.е. каталог имеет ссылку на самого себя.
Второйспециальный дескриптор содержит в поле имени строку «.. ». Это дескриптор указывает на каталогболее высокого уровня
Еслив поле номера первого занимаемого кластера для дескриптора с именем «.. » находится нулевое значение, этоозначает, что данный каталог содержится в корневом каталоге.
Порядок выполнения работы
1.<span Times New Roman"">
Изучить структуру FAT — таблицы и структуру корневого каталога логического дика ОС MS-DOS.2.<span Times New Roman"">
Расширить возможностипрограммы из лабораторной работы № 1 таким образом, чтобы она выводила на экранномера всех кластеров, распределенных файлу, указанному преподавателем.Содержание отчета
1.<span Times New Roman"">
Цель работы.2.<span Times New Roman"">
Структура FAT — таблицыи дескриптора файлов и каталогов.3.<span Times New Roman"">
Результаты выполнениялабораторной работы.Контрольные вопросы
1.<span Times New Roman"">
Распределение дисковогопространства с использованием цепочки блоков.2.<span Times New Roman"">
Распределение дисковогопространства с использованием цепочкииндексных блоков.3.<span Times New Roman"">
Распределение дисковогопространства с использование таблиц отображения файлов.4.<span Times New Roman"">
Организация каталогов ОС MS-DOS.Литература
1.<span Times New Roman"">
Г. Дейтел. Введение в операционные системы. Том 1,2. М: Мир, 1987.2.<span Times New Roman"">
А. В. Фролов, Г.В. Фролов MS-DOS для программиста. Библиотекасистемного программиста, Том 19, М: ДИАЛОГ-МИФИ, 1995.<span Times New Roman",«serif»; mso-fareast-font-family:«Times New Roman»;mso-ansi-language:RU;mso-fareast-language: RU;mso-bidi-language:AR-SA">Лабораторная работа № 3
Исследование векторнойтаблицы связи MS-DOS
Цель работы
Изучить назначение иструктуру векторной таблицы связиосновных управляющих блоковОС MS-DOS.
Общие положения
Операционнаясистема MS-DOS содержит векторную таблицу связи основныхуправляющих блоков. Зная адрес этой таблицы, можно получить доступ к внутреннимструктурам данных операционной системы.
Основныеструктуры данных ОС МS-DOSорганизованы в виде дерева.Корнем этого дерева является векторная таблица связи, которая содержит адресавсех остальных структур: список блоков управления памятью MCB,список блоков управления устройствамиMS-DOS, таблицу файлов, дисковыебуферы и т.д. Информация, содержащаяся в векторной таблице связи открываетдоступ практически ко всем внутренним структурам данных операционной системы.
Поля векторной таблицы связи
Смещение
байт
Размер
байт
Имя поля
Описание
-2
2
mcb_seg
Сегмент первого блока памяти
4
dev_cb
Указатель на первый блок управления устройствами
4
4
file_tab
Указатель на таблицу файлов MS-DOS
8
4
clocr_dr
Указатель на драйверCLOCK$
12
4
con_dr
Указатель на драйвер CON
16
2
max_btbl
Максимальный размер блока (в байтах) для устройств, выполняющих передачу данных отдельными блоками
18
4
disk_buf
Указатель на структуру, описывающую дисковые буферы
22
4
drv_info
Указатель на массив информации об устройствах
26
4
fcb_tabl
Указатель на таблицу FCB
30
2
fcb_size
Размер таблицы FCB
32
1
num_bdev
Число устройств, выполняющих передачу отдельными блоками
33
1
lastdriv
Значение LASTDRIVE в файле config.sys
34
?
null_dr
Начало драйвера NUL. Этот драйвер всегда первый в списке драйверов MS-DOS
Функция 52h возвращаетадрес поля dev_cb. Для того чтобы получить адрес слова, содержащегосегмент первого блока памяти MCB, необходимо уменьшитьзначение смещения, полученного отфункции на 2.
Полеmcb_seg содержит сегментную компоненту адреса первого блокаMCB.Зная это значение можно проследить и изменить структуру блоков памяти.
Вполе dev_cb векторной таблицы связи хранится указатель на списокблоков управления дисковыми устройствамиMS-DOS. Каждыйтакой блок содержит описание характеристик устройства, а также указатель надрайвер, обслуживающий устройство. Программа может использовать блок управлениядисковыми устройствами для доступа к диску на низком уровне или для получениясправочной информации об устройстве.
Полеfile_tab содержит адрес таблицы файлов MS-DOS. В этой таблице для каждогооткрытого файла хранится разнообразная информация, такая, как количествоназначенных файлу идентификаторов( т.е.сколько раз файл был открыт), режим использования файла, номер первого кластерадиска, распределенного