ледние разделы данной главы покажут Вам, как функции LIM EMS 4.0
позволяют передавать большие блоки памяти между расширенной и
обычной памятью и выполнять код в расширенной памяти одним вызо-
вом функции менеджера расширенной памяти.
Менеджер расширенной памяти
Многие программисты и пользователи персональных компьютеров
связывают расширенную память только с набором БИС памяти, уста-
новленных на плате памяти специального типа. Это слишком узкое
представление неудачно, поскольку никакая часть LIM EMS не опре-
деляет чего-либо об оборудовании, используемом для реализации
системы расширенной памяти. Как было кратко упомянуто во введении
к главе, возможно обладать расширенной памятью на компьютере во-
обще без всякого специального оборудования. Мы приведем обоснова-
ние данного смелого заявления в последнем разделе данной главы,
описывающем несколько реализаций расширенной памяти.
Вне зависимости от конструкции системы расширенной памяти
каждый может включать программную компоненту, именуемую менеджер
расширенной памяти, который поддерживает программный интерфейс,
определенный спецификацией расширенной памяти, между прикладной
программой и лежащей ниже системой расширенной памяти.
Программа менеджера расширенной памяти сама упаковывается
внутри драйвера символьного устройства DOS, определенного в
CONFIG.SYS, который загружается и активизируется DOS во время
загрузки. Она отличается от других драйверов устройств DOS в том,
что сообщение между приложением и драйвером устройства менеджера
расширенной памяти не проходит через файловую систему DOS в виде
открытий, закрытий, чтений или записей. Скорее она использует ме-
ханизм прерываний, весьма сходный с используемым DOS, в котором в
регистрах передаются коды функций, параметры и коды возврата на-
зад и вперед. Основная причина того, что менеджер расширенной па-
мяти упакован как драйвер устройства, заключается в том, чтобы
позволить ему загружаться достаточно рано в процессе загрузки,
так чтобы драйверы устройств (например, диски на ОЗУ и устройств
подкачки при печати) могли использовать расширенную память.
Функции менеджера расширенной памяти
Для удовлетворения спецификации LIM EMS 4.0 менеджер расши-
ренной памяти должен реализовывать 28 разных вызываемых пользова-
телем функций, у многих из которых есть много подфункций. Большое
количество функций и подфункций, определенных спецификацией,
представляет значительное препятствие к разумному использованию
расширенной памяти.
- 7-12 -
Сложность LIM EMS 4.0 почти требует от разработчика понима-
ния высшего уровня функций менеджера расширенной памяти. Прежде
чем мы начнем копаться в механике использования этих функций из
программ на ассемблере и языках высокого уровня, мы начнем подхо-
дить к данной задаче с разбиения функций менеджера расширенной
памяти на пять категорий:
Информационные Возвращают состояние менеджера расши-
ренной памяти, а также количества ресур-
сов расширенной памяти, которые доступ-
ны и которые используются приложениями
спецификации расширенной памяти.
Управление данными Управляют размещением, освобождением, пе-
редвижением, отображением и разделением
данных и кодов в расширенной памяти.
Управление Управляют сохранением и восстановлением
контекстов состояния отображения менедже-
ра расширенной памяти драйверами уст-
ройств и программами, резидентными в па-
мяти после завершения.
Ориентированные Управляют переключением состояния отобра-
на операционную жения менеджера расширенной памяти между
систему несколькими,одновременно работающими при-
ложениями при многозадачных средах, та-
ких как Microsoft Windows или
Quarterdeck DeskView.
Зарезервированные Услуги, зависящие от аппаратуры, которые
были удалены из документированной специ-
фикации,когда была объявлена LIM EMS 3.2.
В табл.7-1 представлены функции LIM EMS 3.2 и 4.0, принадле-
жащие к каждому из предшествующих классов (также см. табл.7.2).
Следует отметить, что некоторые функции относятся ко многим клас-
сам и перечислены более, чем в одной категории.
Таблица 7-1
Функции LIM EMS 3.2 и 4.0
ДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДД
¦ Функции EMS 3.2 ¦ Дополнения EMS 4.0
ДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДДДД
Информационные¦ (1)Получить состояние ¦(21)Получить каталог об-
¦ ¦ работчика
¦ (2)Получить адрес стра- ¦(25)Получить массив отоб-
¦ ничного буфера ¦ ражаемых физических
¦ (3)Получить отсчет не- ¦ адресов
¦ размещенной страницы ¦
¦ (7)Получить версию ¦
¦(12)Получить отсчет обра-¦
¦ ботчика ¦
¦(13)Получить страницы об-¦
¦ работчика ¦
¦(14)Получить все страницы¦
¦ обработчика ¦
¦ ¦
Управление ¦(4)Разместить страницы ¦(17)Отображать/Не отобра-
данными ¦(5)Отображать/Не отобра- ¦ жать много страниц об-
¦ жать страницу обработ-¦ работчика
¦ чика ¦(18)Переразместить страницы
- 7-13 -
ДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДД
¦(6)Освободить страницы ¦(19)Получить/Установить
¦ ¦ аттрибуты обработчика
¦ ¦(20)Получить/Установить
¦ ¦ имя обработчика
¦ ¦(22)Изменить отображение
¦ ¦ страницы и перейти
¦ ¦(23)Изменить отображение
¦ ¦ страницы и вызвать
¦ ¦(24)Передвинуть/Обменять
¦ ¦ область памяти
¦ ¦
Управление ¦(8)Сохранить отображе- ¦(16)Получить/Установить
контекстом ¦ ние страницы ¦ частичное отображение
¦(9)Восстановить отобра- ¦ страницы
¦ жение страницы ¦(23)Изменить отображение
¦(15)Получить/Установить ¦ страницы и вызвать
¦ отображение страницы ¦(24)Передвинуть/Обменять
¦ ¦ область памяти
¦ ¦
Ориентиро- ¦ Нет ¦(26)Получить данные об
ванные на ¦ ¦ оборудовании расширен-
операционную ¦ ¦ ной памяти
систему ¦ ¦(27)Разместить стандарт-
¦ ¦ ные/необработанные
¦ ¦ страницы
¦ ¦(28)Сменить набор регист-
¦ ¦ ров отображения
¦ ¦(29)Подготовить аппаратуру
¦ ¦ расширенной памяти для
¦ ¦ загрузки из памяти
¦ ¦(30)Разрешить/Запретить
¦ ¦ функции набора Опера-
¦ ¦ ционной системы/Среды
Зарезерви- ¦(10)Зарезервирована ¦
рованные ¦(11)Зарезервирована ¦
ДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДД
Таблица 7-2
Функции менеджера расширенной памяти
ДДДВДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДД
N ¦ Наименование ¦ Входные регистры ¦ Выходные регистры
ДДД†ДДДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДДДД†ДДДДДДДДДДДДДДДДДДДДД
1 ¦Получить состо- ¦ AH: 40h (код функции) ¦ Нет
¦яние ¦ ¦
2 ¦Получить адрес ¦ AH: 41h (код функции) ¦ BX - адрес сегмента
¦сегмента стра- ¦ ¦ страничного кадра
¦ничного кадра ¦ ¦
3 ¦Получить счетчик¦ AH: 42h (код функции) ¦ BX - кол-во нераз-
¦неразмещенных ¦ ¦ мещенных страниц
¦страниц ¦ ¦
4 ¦Разместить ¦ AH: 43h (код функции) ¦ DX - обработчик
¦страницы ¦ BX: номера страниц для¦
¦ ¦ размещения ¦
5 ¦Отобразить/ ¦ AH: 44h (код функции) ¦ Нет
¦снять отобра- ¦ AL: номер физической ¦
¦жение страниц ¦ страницы ¦
- 7-14 -
¦обработчика ¦ BX: номер логической ¦
¦ ¦ страницы ¦
¦ ¦ DX: обработчик ¦
6 ¦Освободить ¦ AH: 45h (код функции) ¦ Нет
¦страницы ¦ DX: обработчик ¦
7 ¦Получить версию ¦ AH: 46h (код функции) ¦ AL: двоично-дес.код
¦ ¦ ¦ версии менеджера рас-
¦ ¦ ¦ ширенной памяти
8 ¦Сохранить отоб- ¦ AH: 47h (код функции) ¦ Нет
¦ражение страниц ¦ DX: обработчик ¦
9 ¦Восстановить ¦ AH: 48h (код функции) ¦ Нет
¦отображение ¦ ¦
¦страниц ¦ ¦
10 ¦Зарезервировано ¦ ¦
11 ¦Зарезервировано ¦ ¦
12 ¦Получить счетчик¦ AH: 4Вh (код функции) ¦ BX - кол-во обработ-
¦обработчика ¦ ¦ чиков в использовании
13 ¦Получить страни-¦ AH: 4Сh (код функции) ¦ BX - кол-во страниц,
¦цы обработчика ¦ DX: обработчик ¦ размещенных для ука-
¦ ¦ ¦ занного обработчика
14 ¦Получить все ¦ AH: 4Dh (код функции) ¦ BX - кол-во использу-