Кафедра МОП ЭВМ Драйвер управления расширенной памятью HIMEM,SYS, страница 12

Поясним это на примере. Пусть при инициализации операционной системы из файла AUTOEXEC.BAT запускаются две программы. Одна изних использует 10 килобайт из области НМА и запускаетсяпервой (в регистре DX функции 0lhэта программа указывает значение 10240).Вторая запускаемая программа использует40килобайт и запускаетсяпосле первой. Очевидно, что втораяпрограмма использует область НМА более эффективно. Но т. к. область НМАуже распределена первойпрограмме, вторая программа не сможет ее использовать.

Задавая параметр /HMAMIN=40, мы запретимраспределение области НМАтем программам, которые используют вней меньше 40килобайт. Теперь перваяпрограмма не получит доступ к области нма, даже если она будет запускаться до второй, использующей40 килобайт памяти из области НМА.

Освободить область НМА:

На входе:                     АН    = 02h.

На выходе:                   AX    = 000lh - если функция выполнена успешно,

0000h - если произошла ошибка.

Ошибки:                      BL= 80h, 81h, 90h,93h.

Программы, которые запрашивали областьНМА, должны освободить ее с использованием этой функции.При этом данные, которые находились в этой области, будутпотеряны.

После тогокак программа освободила область НМА, эта область становится доступнойдругим программам.

Глобальное открывание линии А20

На входе:                     АН = 03h.

Навыходе:                   AX = 000lh - если функция выполнена успешно,

0000h - если произошла ошибка.

Ошибки:                      BL    = 80h, 81h, 82h.

Эта функция предназначена длятех программ, которые будут использоватьобласть НМА.Она разрешает работу заблокированной по умолчанию 21-йадресной линии процессора. Перед возвратом управлениясистеме программа должна закрытьлинию А20 с помощью функции 04h.

Следует отметить, что на многихтипах компьютеров переключение линии А20 достаточно медленная операция.

Глобальное закрывание линии. А20

На входе:                     AH = 05h

На выходе:                   AX = 000lh - если функция выполнена успешно,

0000h - еслипроизошла ошибка.

Ошибки:                      80h, 81h, 82h, 94h.

Эта функцияпредназначенадля тех программ, которые используют область НМА. Онадолжна выполняться перед завершением работы такой программы.

Локальное открывание линии А20

На входе:                     АН    = 05h.

На выходе:                   АХ    = 000lh -если функция выполнена успешно,

0000h - если произошлаошибка.

Ошибки:                      BL  = 80h,81h, 82h.

Этафункция предназначенатолько для техпрограмм, которые непосредственно управляют расширеннойпамятью. Перед завершением работы программа должна закрыть линию А20 при помощифункции 06h.

Локальное закрывание линии А20

На входе:                     АН = 06h.

На выходе:                   АХ = 000lh - если функция выполнена успешно,

0000h - если произошла ошибка.

Ошибки:   BL    = 80h, 81h, 82h, 94h.

Функция отменяет разрешениелинии А20, запрошенное предыдущей функцией. Она предназначена только для тех программ, которые непосредственно управляютрасширенной памятью.

Определение состояния линии А20

На входе:                     AH = 07h.

На выходе:                   AX = 0001h - если линия А20 открыта;

0000h - если линия А20 закрыта.

Ошибки:                      BL = OOh, 80h, 81h.

Функция выполняет попытку адресоваться за границу 1 мегабайта памяти и проверяет, не происходит ли при этом обращение в начало памяти (т. е. "свертка памяти").

Определение размера свободной расширенной памяти:

На входе:                     AH = 08h.

На выходе:                             AX = размер наибольшего свободного блока расширенной памяти в килобайтах;

DX = общий размер свободной расширенной памяти в килобайтах.

Ошибки:                      BL = 80h, 81h, AOh.

При определении размера свободной расширенной памяти в возвращаемое значение не включается 64 килобайта области НМА, даже еслиэта область не используется программами.

Получить блок ЕМВ