Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ВССТ_ПИ.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
897 Кб
Скачать
☆

Лабораторная работа № 2 «Исследование блоков управления памятью»

2.1 Цель работы

Изучение структуры системных таблиц реального режима Windows и организации цепочек блоков памяти, а также формирование компетенции – знакомство с архитектурой ЭВМ и систем (ПК-9).

Контроль над формированием компетенции осуществляется при защите лабораторной работы.

2.2 Организация хранения байтов в памяти

При просмотре памяти имейте в виду, что двухбайтовые слова хранятся в виде {младший байт}{старший байт} – т.е. порядке обратном естественному представлению многоразрядного числа.

То же самое относится к порядку расположения слов в двойном слове – сначала младшее слово, потом старшее. Всегда действует общий принцип – младшее лежит в ячейке памяти с младшим адресом. Таким образом, полный 4-х байтный указатель (например, на таблицу таблиц) 1234:5678H будет в дампе памяти выглядеть как:

78 56 34 12

\ / \ /

| |___ старшее слово с переставленными байтами

|

|_________ младшее слово с переставленными байтами

2.3 Информация о структурах памяти

Это список указателей, каждый из которых представляет собой двойное слово (4 байта). Старшее слово – это сегментный адрес, младшее – смещение в сегменте. Например, для указателя, у которого сегментный адрес=1234H, а смещение 5678H, абсолютный физический адрес ячейки памяти образуется, как сумма сегментного адреса * 16 + смещение (т.е. сегментный адрес сдвинут влево на 1 шестнадцатиричный разряд):

1234 H 0110 H 0112 H

+ 5678H + 0026H + 0006H

-------- -------- ---------

=179B8H =01126H =01126H

Таким образом 0110:0026 – это тоже, что и 0112:0006 !

2.4 Структура таблицы таблиц

Данная структура является НЕДОКУМЕНТИРОВАННОЙ и используется для изучения низкоуровневой информации о структурах памяти.

Смещение

Длина

Содержимое

-2

2

сегментный адрес 1 MCB

0

4

указатель на 1 DPB (Disk Parameters Block )

+ 4

4

указатель на список таблиц открытых файлов

+ 8

4

указатель на первый драйвер DOS (CLOCK$)

…

…

…

2.5 Структура блока управления памятью (mcb)

MCB – Это НЕДОКУМЕНТИРОВАННЫЙ управляющий блок, который используется при распределении, модификации и освобождении блоков системной памяти.

Смещение

Длина

Содержимое

+0

1

'M' (4dH) – за этим блоком есть еще блоки

'Z' (5aH) – данный блок является последним

+1

2

Владелец, параграф владельца (для FreeMem); 0 = владеет собой

+3

2

Размер, число параграфов в этом блоке распределения. Параграф равен 16 байтам

+5

0Bh

Зарезервировано

+10h

?

Блок памяти начинается здесь и имеет длину (Размер*10H) байт

Замечания:

  • блоки памяти всегда выровнены на границу параграфа («сегмент блока»);

  • блоки M-типа: следующий блок находится по (сегмент блока + Размер):0000;

  • блоки Z-типа: (сегмент блока + Размер):0000 = конец памяти (a000H=640K).

В любом MCB указан его владелец – сегментный адрес PSP (префикс программного сегмента) программы владельца данного блока памяти. А в PSP есть ссылка на окружение данной программы, в котором можно найти имя программы – путь ее запуска.

С ледует помнить, что сама программа (и PSP в том числе) и ее окружение сами располагаются в блоках памяти. Поэтому, в MCB блока памяти самой программы в качестве хозяина указан собственный адрес самого себя.

Когда программа в реальном режиме начинает выполнение, DS:0000 и ES:0000 указывают на начало PSP этой программы. Информация PSP позволяет выделить имена файлов и опции из строки команд, узнать объем доступной памяти, определить окружение и т.д.

Использование окружения. Окружение не превышает 32 Kбайт и начинается на границе параграфа. Смещение 2Сh в PSP текущей программы содержит номер параграфа окружения.

Вы можете найти нужное 'имя' серией сравнений строк ASCIIZ (Строка ASCIIZ, используемая во многих функциях DOS и в языке C, представляет собой последовательность символов ASCII, заканчивающуюся байтом 00H), пока не дойдете до пустой строки (нулевой длины), что указывает конец окружения. Обычно 'имя' в каждой строке окружения задано прописными буквами, но это необязательно.

Более подробную информацию о структурах памяти можно получить из справочника TECH Help!