Управление памятью

П2.1. Управление памятью

Поддерживаемые MS-DOS 5.0 средства управления памятью представляют среди других преимуществ этой системы наибольший интерес.         

Наряду с уменьшением накладных расходов по управлению памятью MS-DOS 5.0 обеспечивает:

1) размещение большей части ядра DOS в НМА-памяти;

2) загрузку драйверов устройств и резидентных программ в UMB-память. Перемещение постоянно находящихся в памяти системных программных кодов из стандартной (640-Кбайт) в верхнюю (НМА— и UMB-) память ведет к тому, что прикладным программам может быть выделено больше оперативной памяти, чем ранее.  

Две названные функции по управлению памятью реализуются различными аппаратными и программными средствами.

Размещение ядра DOS в НМА-памяти возможно только на машинах класса AT и старше при наличии расширенной памяти, Для этого необходимо:

1) подключить к системе драйвер расширенной памяти, поместив в файл CONFIG.SYS строку вида

DEVICE=HIMEM.SYS

2) явно указать DOS, что ее ядро необходимо разместить в НМА-памяти, для чего задать в файле CONFIG.SYS команду

DOS = HIGH

Драйвер HIMEM.SYS выделит для ядра DOS первые 64 Кбайт расширенной памяти (которые станут НМА-памятью), а также обеспечит доступ ко всей остальной расширенной памяти в соответствии со спецификацией XMS 2.0 (последнее нас сейчас не интересует). После интерпретации команды DOS=HIGH ядро DOS будет реально размещено в подготовленной НМА-памяти. По умолчанию же, независимо от того, подключен ли драйвер HIMEM.SYS, принимается команда DOS = LOW. Она обеспечивает размещение ядра DOS в нижней памяти, т.е. в начале стандартного ОЗУ. При размещении ядра DOS в НМА-памяти в стандартной Памяти остаются занятыми всего около 20 Кбайт. Таким образом, по сравнению с DOS 3.3 освобождается примерно 40 Кбайт, а по сравнению с DOS 4.0 — 56 Кбайт памяти.

Загрузки драйверов и резидентных программ в UMB-память, как правило, возможна только на ПЭВМ с МП 80386(SX) или 80486(SX), конечно, при наличии расширенной памяти. Для реализации этого необходимо подключить драйвер, управляющий такой загрузкой, и затем исполь­зовать соответствующие команды DOS для ее производства.  

MS-DOS содержит внешний драйвер EMM386.EXE (усовершенствованный вариант драйвера EMM386.SYS), который как раз и обеспечивает управление UMB-памятью, но только для машин класса 386(SX) и старше. Чтобы его подключить, достаточно в CONFIG.SYS поместить строку вида

DEVICE=EMM386.EXE RAM

Этот драйвер наряду с управлением UMB-памятью обеспечивает также:

— эмуляцию отображаемой памяти в расширенной памяти на ПЭВМ с МП -80386(SX) или 804S6(SX) в соответствии со стандартом LIM EMS 4.0;

— поддержку сопроцессора плавающей точки фирмы Weitek.

Команда DEVICE= для подключения драйвера EMM386.EXE имеет следующий формат

DEVICE = [dir\]ЕММ38б.EХЕ [ON| OFF| AUTO] s

[W=ON|OFF] [/X=m-n]... [/I = r-q] ... [/Mx] [/FRAME=f] [/Ph = t]

[/B=b] [/L*l] [/A=a] [/H=e] [/D=c]

[/Y=file] [RAM] [NOEMS]

Драйвер EMM386.EXE может быть также запущен из командной строки как обычная про­грамма для оперативного реконфигурирования DOS:

EMM386 [ON| OFF| AUTO] [W=ON|OFF]

Аргументы и переключатели интерпретируются следующим образом:

ON                              — активизировать отображаемую память;

OFF                            — дезактивировать отображаемую память;

AUTO                         — активизировать отображаемую память по запросу из программы;

s                                  выделить для использования драйвером с целью эмуляции отображаемой памяти s Кбайт расширенной памяти. Допустимы значения в диапазоне 16 — 32768, а по умолчанию принимается 256. Заданное число округляется до значения, кратного 16-ти. Если указан размер, превышающий емкость доступной расширенной памяти, то на экране будет отображено ее значение, которое впоследствии можно будет использовать;

W=ON|OFF               — включить (ON) или отключить (OFF) поддержку сопроцессора плавающей точки фирмы Weitek;

/Х—п                   исключить использование в качестве окна отображаемой памяти области стан­дартного адресного пространства, границы которой определяются значениями тип.Это шестнадцатеричные числа (без явного указания Н) в терминах параграфов;

/I=r-q                         разрешить использование в качестве окна отображаемой памяти области стандартного адресного пространства, границы которой определяются значениями г и q. Это шестнадцатеричные числа (без явного указания Н) в терминах параграфов;

x                             — разместить окно отображаемой памяти по адресу, закодированному числом х (см. описание драйвера EMM386.SYS в п. 5Д0.3);

/FRAME =f                 разместить окно отображаемой памяти по адресу /, заданному в терминах пара­графов в шестнадцатеричной системе счисления (без явного указания Н). Допу­стимо число в диапазоне 8000 — 9000 или С000 — Е000 с шагом 400;

/Ph=t                          разместить страницу h по адресу t, заданному в терминах параграфов в шестнадцатеричной системе счисления (без явного указания Н). Допустимы те же значения, что и в предыдущем переключателе;

/В=b                            — специфицировать наименьший допустимый адрес для свопинга страниц отображаемой памяти. Число Ъ задается в шестнадцатеричной системе счисления (без Н) в терминах параграфов, причем в диапазоне 1000 — 4000. По умолчанию принимается 4000;

/L=l                             — оставить после подключения драйвера минимум I Кбайт расширенной памяти (по умолчанию — 0);

/А=a                            — создать a банков быстрых регистров для смены страниц отображаемой памяти (банки быстрых регистров используются в случае многозадачного режима ра­боты). Допустимо число в диапазоне 0 — 254, по умолчанию принимается 7. Каждый банк увеличивает размер резидентной части DOS примерно на 200 байт;

/Н=e                            — сформировать е обработчиков отображаемой памяти, которыми может пользоваться драйвер. Число е должно принадлежать диапазону 2 — 255. По умолчанию принимается 64;

/D=c                            — сформировать буфер для прямого доступа к памяти размером с Кбайт;

/Y = file                      указать посредством file полную спецификацию файла с драйвером EMM386.EXE;

RAM                           — обеспечить доступ как к отображаемой, так и к UMB-памяти;

NUBMS                      — запретить использование отображаемой памяти, выделив для UMB-памяти максимальное число «дыр».

Драйвер EMM386.exe следует подключать к системе непосредственно за драйвером HIMEM.SYS, чтобы исключить конфликт»! с другими драйверами.

Запуск EMM386.EXE как программы без аргументов и переключателей обеспечивает отобра­жение информации о статусе драйвера.

Одного лишь подключения данного драйвера недостаточно; чтобы использование UMB-памяти стало действительно возможным, необходимо в CONFIG.SYS включить еще одну команду, а именно:

DOS=UMB

По умолчанию вместо UMB действует NOUMB, запрещая доступ к UMB-памяти. Команды DOS = HIGH и DOS = UMB можно совместить в одной строке. Вообще формат команды DOS= следующий:

DOS = [HIGH | LOW][,UMB | NOUMB]

Если ни HIGH, ни LOW не указано, то запятую можно опустить.

Загрузка драйверов в UMB-память осуществляется командой конфигурирования DEVICEHIGH=, которая имеет формат, аналогичный команде DEVICE=:

DEVICEHIGH = file [arglist] [переключатели]

или

DEVICEHIGH SIZE=s file [arglist] [переключатели]

Вторая форма дополнительно к первой специфицирует размер необходимой для драйвера памяти в s байтов, заданный в шестнадцатеричной системе счисления. Необходимость в этом возникает тогда, когда драйвер при своей инициализации дополнительно (динамически) запра­шивает память. В (случае размещения драйвера в UMB-памяти ее может не хватить, что приведет к краху системы. Для решения данной проблемы сначала загрузите драйвер в стандартную память И определите реальный его размер, выдав команду MEM /PROGRAM Затем укажите требуемое значение при установке драйвера в UMB-память.

Загрузка в UMB-память резидентных программ может быть выполнена:

1) командой конфигурирования INSTALLHIGH= (полный синтаксический аналог команды INSTALL=);

2) командой LOADHIGH (LH), допустимой в командной строке, в частности, в командном файле, и имеющей формат

LOADHIGH file

Заметим, что расширение в аргументе file задавать необязательно, а справа можно приписать требуемые аргументы и переключатели.

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

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