Операционная система MS-DOS — страница 8
- Категория Компьютеры и устройства
- Раздел Рефераты
- Просмотров 5839
- Скачиваний 439
- Размер файла 27 Кб
drv_info содержит указатель на массив, в котором хранится информация о дисковых устройствах. В этом массиве можно найти текущий путь доступа для каждого диска, номер первого кластера диска, распределенного каталогу, и адрес соответствующего блока управления дискового устройства. В поле fcb_tabl находится указатель на таблицу FCB. Размер этой таблицы записан в поле fcb_size и определяется параметром fcbs=xx, расположенном в файле cjnfig.sys. Поле lastdriv содержит значение параметра lastdrive, расположенного в файле config.sys. Его можно использовать для определения максимального количества дисковых устройств в системе. В поле num_bdev хранится количество действительно используемых дисковых устройств. Поле nul_dr само по себе не содержит никакой полезной информации. Имеет значение лишь его адрес - в этом месте расположен самый первый в цепочке драйвер MS-DOS. Для получения адреса векторной таблицы связи можно воспользоваться следующей программой на языке С: #include <stdio.h> #include <conio.h> #include <dos.h> 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(« Адрес 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 Число параграфов в этом блоке 5 11 reserve Зарезервировано Параграф имеет размер 16 байт. Для удобства работы с блоком MCB определим тип MCB: typedef struct { unsigned char type; unsigned owner; unsigned size; char reserve[11]; } MCB; Порядок выполнения работы 1.Получить и вывести на экран адрес векторной таблицы связи и значения полей в векторной таблице связи. 2. Получить список всех MCB - блоков с указанием их типов, размеров и владельцев. Содержание отчета 1. Цель работы. 2. Описание полей векторной таблицы связи.
Похожие работы
- Рефераты
- Контрольные