Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vstup.docx
Скачиваний:
47
Добавлен:
28.09.2019
Размер:
6.42 Mб
Скачать

4.1 Структура системних областей пам’яті (ms-dos).

Вся оперативная память в MS-DOS разделена на фрагменты, перед которыми распложены блоки MCB . Как мы уже говорили в первой главе, эти блоки описывают фрагменты памяти.

Поле векторной таблицы связи mcb_seg содержит сегментный адрес первого блока управления памятью MCB . Блок MCB всегда начинается на границе параграфа, поэтому полный адрес первого блока будет равен mcb_seg:0.

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

Распределение памяти в MS-DOS

Для лучшего понимания механизма управления памятью вспомним распределение памяти в MS-DOS:Диапазон адресов Содержимое

0000:0000 Векторы прерываний

0000:0400 Область данных BIOS

0000:0500 Область данных MS-DOS

xxxx:0000 Область программ MS-DOS.В ней находится расширение BIOS , обработчики прерываний MS-DOS, буферы, внутренние структуры данных MS-DOS, загружаемые драйверы устройств

xxxx:0000 Резидентная порция командного процессора command.com

xxxx:0000 Резидентные программы

xxxx:0000 Запущенные прикладные программы типа COM или exe

xxxx:0000 Транзитная порция command.com

A000:0000 Память EGA , используемая в некоторых видеорежимах

B000:0000 Память монохромного видеоконтроллера

B800:0000 Память видеоконтроллера CGA

C800:0000 Внешнее ПЗУ

F600:0000 ПЗУ интерпретатора BASIC

FE00:0000 ПЗУ BIOS

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

Адреса 0000:0400 - 0000:04FF (или от 0040:0000 до 0050:0000) занимает область данных BIOS . Это так называемые внутренние переменные BIOS . К ним можно обращаться для получения различной информации. При этом необходимо только помнить, что формат этой области может быть различным для различных версий BIOS.

Начиная с адреса 0000:0500 (или с адреса 0050:0000, что одно и то же) следует область данных MS-DOS. Здесь MS-DOS хранит свои внутренние таблицы, переменные и структуры данных. Формат этой области (и ее размер) зависит от версии операционной системы.

Далее следует большая область памяти, используемая MS-DOS. Здесь находятся:

система ввода-вывода MS-DOS (содержимое файла io.sys );

обработчики прерываний MS-DOS, в частности, обработчик прерывания INT 21h (эти обработчики входят в состав файла msdos.sys );

внутренние буферы MS-DOS и внутренние структуры данных;

загружаемые драйверы (перечисленные в файле config.sys ).

После драйверов располагается резидентная порция командного процессора command.com . Она, в частности, обрабатывает прерывания INT 22h, INT 23h и INT 24h .

Следующая область памяти занимается резидентными программами.

После резидентных программ находится выполняющаяся в настоящий момент программа (запущенная из файла с расширением имени .com или .exe). Она может занимать всю оставшуюся память до адреса A000:0000 или только ее некоторую часть.

Нижнюю часть адресного пространства (до адреса A000:0000) занимает транзитная часть command.com . Она может перекрываться выполняющейся программой. Если программа перекроет транзитную часть command.com, то после завершения выполнения программы эта часть командного интерпретатора будет загружена заново.

Область адресов от A000:0000 до C800:0000 используется видеоконтроллерами. Каждый тип видеоконтроллера использует эту часть памяти по-своему.

Далее и до конца границы первого мегабайта оперативной памяти идет область ПЗУ. Там расположено ПЗУ базовой системы ввода/вывода BIOS , ПЗУ интерпретатора BASIC (если такое ПЗУ есть, что совсем не обязательно), расширение BIOS (например, расширение для видеоконтроллера или контроллера диска). Кроме того, в этой области могут находиться порты ввода/вывода некоторых устройств, обращение к которым выполняется аналогично обращению к памяти (устройства, имеющие ввод/вывод, отображенный на память).

Диапазон адресов свыше первого мегабайта используется для машин класса не ниже AT. Это так называемая расширенная память (Extended Memory). Она используется операционной системой MS-DOS для организации "электронного" диска, кэш -памяти для дисков, для загрузки резидентных программ и драйверов (совместно с драйвером emm386.exe ).

Некоторые прикладные программы хранят в этой области свои данные.

Непосредственная адресация расширенной памяти возможна только в защищенном режиме работы процессора. Этот режим используется в операционных системах Windows, Windows NT , OS/2, UNIX и т. п.

С расширенной памятью не следует путать дополнительную память (Expanded Memory ). Эта память отображается с помощью специальной аппаратуры и драйверов в область адресного пространства, лежащую ниже границы первого мегабайта основной оперативной памяти. MS-DOS может использовать эту память аналогично расширенной памяти.

Зона памяти, начиная с области программ MS-DOS и до видеопамяти разбита на фрагменты. Перед каждым таким фрагментом находится блок управления памятью MCB .

Сегментный адрес первого блока MCB , как мы уже говорили, находится в векторной таблице связи в поле mcb_seg.

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

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

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

Приведем формат блока MCB :Смещение, байт Размер, байт Имя поля Описание

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

1 2 owner Сегментная компонента адреса владельца блока; этот блок всегда выровнен на границу параграфа (если 0, то блок описывает сам себя)

3 2 size Число параграфов в этом блоке

5 11 reserve Зарезервировано

Напомним, что параграф имеет размер 16 байт.

Для удобства работы с блоком MCB определим тип MCB:

typedef struct

{

unsigned char type;

unsigned owner;

unsigned size;

char reserve[11];

} MCB ;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]