Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SP_MET_2.DOC
Скачиваний:
13
Добавлен:
02.05.2019
Размер:
689.66 Кб
Скачать
      1. Область памяти umв

Участок адресного пространства процессора по адресам A0000h – FFFFFh носит наименование UMA (Upper Memore Area — верхняя область памяти). Как говорилось выше, на этот участок пространства отображаются видеопамять и постоянная память материнской платы и некоторых устройств, а часть его зарезервирована и не используется. С помощью менеджера памяти на неиспользуемые участки UMА можно отображать реальную оперативную память компьютера и создавать таким образом верхние блоки памяти (UMB — Upper Memory Blocks), которые затем могут использовать DOS-программы. (Отображение памяти на адресный участок означает, по сути, установление соответствия определенных аппаратных ячеек оперативной памяти с некоторыми адресами адресного пространства процессора).

Использование областей памяти UMB целесообразно для резидентных программ, постоянно находящихся в памяти, так как обычная память используется другими процессами более активно.

Функция DOS 58h — Считать/изменить стратегию выделения памяти

Ввод: АН = 58h

AL = 00h — считать стратегию

AL = 01h — изменить стратегию

ВХ = новая стратегия

биты 2-0: 00 — первый подходящий блок; 01 — наиболее подходящий блок; 11 — последний подходящий блок

биты 4-3: 00 — обычная память; 01 — UMB (DOS 5.0+); 10 — UMB, затем обычная память (DOS 5.0+)

AL = 02h — считать состояние UMB

AL = 03h — установить состояние UMB

ВХ = новое состояние: 00 — блоки UMB не используются, 01 — используются

Вывод: CF = 0, АХ = текущая стратегия для AL = 0, состояние UMB для AL = 2

CF = 1, AX = 01h, если функция не поддерживается (если не за­пущен менеджер памяти или нет стро­ки "DOS = UMB" в файле CONFIG.SYS)

Если программа изменяла стратегию выделения памяти или состояние UMB, она обязательно должна их восстановить перед окончанием работы.

      1. Область памяти нма

HMA представляет собой область памяти по адресам от FFFFh:0010h (конец первого мегабайта адресного простанства) до FFFFh:FFFFh (конец адресного пространства в реальном режиме) размером 65520 байт. Эта область может использоваться на компьютерах, оснащенных процессором 80286 или более поздним, так как они имеют расширенную адресную шину (линии А20 и выше). Доступ к области НМА осуществляется с помощью спецификации XMS, причем вся она выделяется целиком одной программе. Если при загрузке системы в память был загружен драйвер HIMEM.SYS и в файле CONFIG.SYS присутствует строка DOS = HIGH, область НМА занимает DOS, освобождая почти 64 Кб в основной памяти. При этом DOS может оставить небольшой участок НМА (16 Кб или меньше) для пользовательских программ, которые могут обращаться к нему с помощью недокументированной функции 4Ah мультиплексного прерывания 2Fh.

INТ 2Fh, AX = 4A01h — Определить размер доступной части НМА (DOS 5.0+)

Ввод: АХ = 4A01h

Вывод: ВХ = размер доступной части НМА в байтах, 0000h, если DOS нe в НМА

ES:DI = адрес начала доступной части НМА (FFFFh:FFFFh, если DOS не в НМА)

INT 2Fh, AX = 4A02h — Выделить часть НМА (DOS 5.0+)

Ввод: АХ = 4A02h

ВХ = размер в байтах

Вывод: ES:DI = адрес начала выделенного блока

ВХ = размер выделенного блока в байтах

В версиях DOS 5.0 и 6.0 нет функций освобождения выделенных таким образом блоков НМА. В DOS 7.0 (Windows 95) выделение памяти НМА было организовано аналогично выделению памяти в обычной памяти и UMB, с функциями изменения размера и освобождения блока.

INT 2Fh, АХ = 4A03h — Управление распределением памяти в НМА (DOS 7.0+)

Ввод: АХ = 4A03h

DL = 0 — выделить блок (ВХ = размер в байтах)

DL = 1 — изменить размер блока (ES:DI = адрес, ВХ = размер)

DL = 2 — освободить блок (ES:DI = адрес)

СХ = сегментный адрес владельца блока

Вывод: DI = FFFFh, если не хватило памяти,

ES:DI = адрес блока (при выделении)

Следует помнить, что область НМА доступна для программ только в том случае, если адресная линия процессора А20 разблокирована. Если DOS не занимает НМА, она почти всегда заблокирована для совместимости с программами, написанными для процессора 8086/8088, которые счита­ют, что адреса FFFFh:0010h — FFFFh:FFFFh всегда совпадают с 0000h:0000h – 0000h:FFEFh. Возможность управления состоянием этой адресной линии предоставляют функции XMS 01-07.

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