Название: Операционные системы - Методические указания (В.Г. Качальский)

Жанр: Информатика

Просмотров: 1290


Аннотация

№ 2997

004

O-609

 

ОПЕРАЦИОННЫЕ СИСТЕМЫ

Часть 1: Операционная

система MS-DOS

 

Методические указания

к лабораторным работам для студентов II и III курсов

АВТФ (направление 230100)

дневного и заочного отделений

 

новосибирск

2005

 

Министерство образования и науки Российской Федерации

Новосибирский государственный техниЧеский университет

004                                                                                                      № 2997

О-609

 

ОПЕРАЦИОННЫЕ СИСТЕМЫ

Часть 1: Операционная

система MS-DOS

 

Методические указания

к лабораторным работам для студентов II и III курсов

АВТФ (направление 230100)

дневного и заочного отделений

 

Новосибирск

2005

УДК 004.451(076.5)

         О-609

 

Составители: В.Г. Качальский, канд. техн. наук, доц.,

Е.Н. Павенко, ст. преп.

 

Рецензент В.А. Астапчук, канд. техн. наук, доц.

 

Работа подготовлена на кафедре

автоматизированных систем управления

 

© Hовосибиpский госудаpственный

технический  унивеpситет,  2005

 

Операционные системы

 

Часть 1: Операционная система

MS-DOS

 

Методические указания

 

Редактор  Н.В. Городник

Технический редактор  Г.Е. Телятникова

Компьютерная верстка  И.П. Брованова

_________________________________________________________________________________

Подписано в печать 05.10.2005. Формат 60 × 84  1/16. Бумага офсетная. Тираж 100 экз.

Уч.-изд. л.  1,16.   Печ. л.  1,25.   Изд. №  207.  Заказ №           Цена договорная

_________________________________________________________________________________

Отпечатано в типографии

Новосибирского государственного технического университета

630092, г. Новосибирск, пр. К. Маркса, 20

 

 

Способы обращения к ОС 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.cx = 1;

               reg.x.dx = 0;

     int86x(0x25, &reg, &reg, &segreg);

     ...

где buff – адрес буфера, в который считывается (записывается) логический сектор.

     Замечание. после вызова прерывания должна обязательно следовать команда:

          asm    POP   AX

Порядок выполнения лабораторной работы

Изучение логической структуры диска MS-DOS.

Составление программы, читающей загрузочный сектор диска и выводящей на экран основные характеристики диска из BPB.

Содержание отчета

Цель работы.

Описание логической структуры диска MS-DOS.

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

Контрольные вопросы

Принципы записи информации на дисковые накопители.

Методы разделения дискового пространства между пользователями («справочник файлов»).

Методы распределения дискового пространства для файлов.

Логическая структура диска MS-DOS.

Литература

Дейтел Г. Введение в операционные системы. – М.: Мир, 1987. – Т. 1, 2.

Фролов А.В., Фролов Г.В. MS-DOS для программиста. – М.: Диалог-МИФИ, 1995. – (Библиотека системного программиста. – Т. 19).

Лабораторная работа № 2

Исследование таблицы размещения файлов

(FAT-таблицы) ОС MS-DOS

Цель работы – изучение структуры и назначения FAT-таблицы ОС MS-DOS.