Читать реферат по информационному обеспечению, программированию: "Операционная система MS-DOS" Страница 7

назад (Назад)скачать (Cкачать работу)

Функция "чтения" служит для ознакомления с работой. Разметка, таблицы и картинки документа могут отображаться неверно или не в полном объёме!

справочной информации об устройстве.

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

С помощью полей clock_dr и con_dr программа может получить доступ соответственно к драйверу CLOCK$ и драйверу консоли CON. Это может понадобиться для организации вызова драйвера непосредственно из программы.

Поле max_btbl содержит размер блока устройств, которые выполняют обмен данными отдельными блоками (для MS-DOS размер блока равен 512 байтам.

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

В поле fcb_tabl находится указатель на таблицу FCB. Размер этой таблицы записан в поле fcb_size и определяется параметром fcbs=xx, расположенном в файле cjnfig.sys.

Поле lastdriv содержит значение параметра lastdrive, расположенного в файле config.sys. Его можно использовать для определения максимального количества дисковых устройств в системе.

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

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

#include

#include

#include

typedef struct

{

unsigned mcb_seg;

void far *dev_cb;

void far *file_tab;

void far *clock_dr;

void far *con_dr;

unsigned max_btbl;

void far *disk_buf;

void far *drv_info;

void far *fcb_tabl;

unsigned fcb_size;

unsigntd char num_bdev;

unsigned char lastdriv;

}CVT;

typedef CVT far* LPCVT;

void main(void)

{

union REGS regs;

struct SREGS sregs;

LPCVT lpCVT;

// Получаем адрес векторной таблицы связи

resgs.h.ah = 0x52h;

indosx(®s, ®s, &sregs);

// Передвигаем указатель на поле mb_seg

lpCVT = (LPCVT)VK_FP(sregs.es, resg.x.bx - 2);

// Выводим адрес векторной таблицы связи

printf(«\nАдрес CVT: %Fp» (LPCVT)lpCVT);

getch();

}

Макрокоманды MR_FP, FP_SEG, FP_OFF описаны и файле dos.h. С помощью макрокоманды MK_FP можно конструировать дальний указатель из значения сегмента и смещения. Макрокоманды FP_SEG и FP_OFF можно выделить из дальнего указателя соответственно сегмент и смещение.

Формат блока MCB

Внутри блока MCB хранится длина описываемого данным МСВ фрагмента памяти. Следующий фрагмент начинается сразу за предыдущим. Все блоки управления памятью связаны в список.

Блоки MCB бывают двух типов M и Z. M - блоки - это промежуточные блоки. Блок типа Z является последним в списке блоков и может быть только один. Блок MCB имеет следующий формат:

Смещениебайт

Размербайт

Имяполя

Описание

0

1

type

Типблока MCB(M или Z)

1

2

owner

Сегментнаякомпонентаадреса владельцаблока

3

2

size


Интересная статья: Основы написания курсовой работы