справочной информации об устройстве.
Поле 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 |
Похожие работы
Тема: Операционная система |
Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
Тема: Операционная система. |
Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
Тема: Операционная система |
Предмет/Тип: Отсутствует (Контрольная работа) |
Тема: Making Utilities For MSDOS Essay Research Paper |
Предмет/Тип: Английский (Реферат) |
Тема: Операционная система Unix |
Предмет/Тип: Информатика, ВТ, телекоммуникации (Курсовая работа (п)) |
Интересная статья: Основы написания курсовой работы