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

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

 

В среде DOS вся оперативная память ПЭВМ логически делится на стандартную и дополни­тельную.

Стандартной (обычной) памятью считается память в диапазоне адресов от 0 до 640К — 1 в стандартном 1-Мбайт адресном пространстве. Очевидно, ее размер не может превышать 640 Кбайт, что для ряда приложений явно недостаточно.

Дополнительной является вся оперативная память, не удовлетворяющая указанному для стан­дартной памяти ограничению.

Данный пункт мы посвятим рассмотрению особенностей управления этими двумя разновид­ностями памяти.

Стандартная память

 

Стандартная память может использоваться DOS для хранения как выполняемых программ, так и данных любой природы без каких-либо ограничений. Вы уже знаете, в частности, что сама DOS размещается тоже в этой памяти.

Стандартная память распределяется блоками.

Блоком памяти называется ее непрерывный фрагмент, выделяемый для хранения загружаемой программы или данных во время выполнения программы. Первые 16 байт каждого блока памяти отводятся под блок управления памятью (Memory Control Block — МСВ). МСВ описывает размер блока памяти и его владельца, а также содержит ссылку на начало следующего блока памяти. Таким образом, все МСВ, а следовательно, и блоки памяти, связаны в цепочку, что обеспечивает возможность управления памятью (в частности, ее выделения и освобождения).

Когда DOS запускает программу, она сначала выделяет блок памяти для копии своего окружения, а затем — весь остаток памяти для самой программы, о чем мы уже вскользь упоминали. Эти блоки связываются в цепочку так, как показано на рис. 5.8, и не обязательно должны быть смежными. Блоки памяти всегда выделяются в начале свободной области ОЗУ, поэтому, если память не фрагментирована, блок с окружением и блок с кодом программы будут соприкасаться. Вспомним, что вместе с окружением выполняемой программе передается полная спецификация программного файла, которая подстыковывается в конец окружения. Поэтому размер копии окружения не совпадает с размером оригинала. Программа в ходе выполнения может уменьшить размер выделенного ей блока, а резидентная программа просто обязана это сделать (иначе не смогут выполняться другие программы). После завершения нерезидентной программы занимаемые ею блоки памяти освобождаются. Однако если программа завершается с тем, чтобы остаться резидентной, блоки с ее окружением и кодом остаются в памяти. Они будут освобождены только в результате явного удаления такой программы из ОЗУ.

 

 

Рис 5.8. Цепочка блоков памяти

 

Удаление из ОЗУ резидентной программы, которая загружена не последней, ведет к фрагментации памяти. Следствием фрагментации памяти фактически является уменьшение свободной области для размещения новых программ, так как в образовавшуюся «дыру» удастся лишь скопировать окружение. Поэтому установку резидентов нужно тщательно планировать заранее, чтобы, по крайней мере, уменьшить (если не удастся полностью исключить) фрагментацию памяти.

Фрагментация памяти может возникнуть также и при выполнении такой последовательности действий, как:

1) временный выход на уровень DOS из выполняемой программы (в результате этого запу­скается вторичная копия КП);

2) установка резидентной программы;

3) возврат в выполняемую программу по команде EXIT;

4) завершение выполнения этой программы.

DOS обеспечивает возможность динамического управления памятью для размещения инфор­мационных объектов выполняемой программы. Программа может запросить:

— выделение блока памяти заданного размера или определение размера наибольшего неза­нятого блока (по функции 48Н прерывания 21Н);

— освобождение блока памяти (по функции 49Н прерывания 21Н);

— изменение размера уже выделенного блока памяти как в сторону увеличения, конечно при возможности этого, так и в сторону уменьшения (по функции 4АН прерывания 21Н).

Дополнительная память

 

Последние версии DOS в совокупности с соответствующими внешними драйверами обеспе­чивают поддержку следующих видов дополнительной памяти (если не принимать во внимание виртуальные диски):

— отображаемой (expanded) памяти;

— расширенной (extended) памяти;

— верхней (high) памяти.

Независимо от вида памяти требуемые области в ней выделяются блоками (аналогично стандартной памяти), но каждый блок памяти управляете своим обработчиком.

Для того чтобы доступ к дополнительной памяти оказался возможным, необходимо иметь в ПЭВМ избыток памяти и, возможно, специальное оборудование.

Концепцию отображаемой памяти предложили и реализовали совместно три фирмы — Lotus, Intel и Microsoft. Ее спецификация обозначается как L/I/M EMS (Lotus/Intel/Microsoft Expanded Memory Specification — спецификация отображаемой памяти упомянутых фирм) или просто как LIM EMS. Средства EMS позволяют предоставлять дополнительную память для хранения данных с целью их использования выполняемыми программами и осуществлять доступ к этим данным путем задания адреса. Хранение же выполняемых программ в отображаемой памяти невозможно. L/I/M EMS допустима, начиная с DOS 3.3, и поддерживает дополнительную память до 8 Мбайт (EMS 3.2) или даже до 32 Мбайт (EMS 4.0) путем обеспечения видимости ее фрагментов через созданное в стандартном (1-Мбайт) адресном пространстве окно.

Принцип действия отображаемой памяти основан на техническом приеме, известном как заме­щение страницу или как переключение блоков памяти: внутри адресного пространства, отведенного под ПЗУ и видеопамять, но DOS используемого не полностью, выделяется 64-Кбайт окно, в которое отображаются четыре произвольных 16-Кбайт страницы дополнительной памяти, необходимые в данный момент. Тем самым МП «вводится в заблуждение», поскольку с помощью виртуальной адресации он обращается к хранимым в окне данным, хотя на самом деле их физические адреса могут быть смещены в дополнительной памяти относительно окна на несколько Мбайт.

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

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

Для более полного использования ОЗУ большой емкости на компьютерах класса AT и старше совсем недавно была предложена спецификация расширенной памяти (XMSextended Memory Specification). Программный драйвер, ее реализующий, позволяет пересылать данные из ОЗУ в расширенную память и обратно. Одним из наиболее известных таких драйверов является HIMEM.SYS, входящий в комплект поставки MS-DOS, начиная с версии 4.0. Способ использования дополнительной памяти, принятый в XMS, отличается как от EMS, так и от подхода, воплощенного в концепции виртуального диска

Различия спецификаций EMS и XMS проиллюстрированы на рис. 5.9.

Технически доступ к расширенной памяти осуществляется путем переключения МП из реального в защищенный режим работы, где вся память ПЭВМ может адресоваться без каких-либо трудностей. Основная проблема заключается в другом, а именно, в возврате в реальный режим работы. Это сделать немного сложнее, чем начальный переход. Реализованный в XMS-драйвере способ трудоемок и не отличается высокой надежностью, в связи с чем загрузка выполняемых программ в расширенную память не допускается.

Доступ к отображаемой и расширенной памяти осуществляется через аппарат прерываний DOS.

Верхней называется память в диапазоне адресов от 640К до IM — 1. Эта область стандартного адресного пространства, как известно, зарезервирована для видеопамяти и ПЗУ, однако обычно в ней остаются «дыры». Одна из 64-Кбайт «дыр» может задействоваться под окно отображаемой памяти. Наряду с этим «дыры» можно использовать как обычную память, если обеспечить отображение их адресов на какие-либо модули оперативной памяти.

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

 

 

б) спецификация XMS

Рис. 5.9. Распределение памяти ПЭВМ в соответствии со спецификациями EMS и XMS

 

Первая разновидность верхней памяти поддерживается благодаря использованию различий МП 80286 и старше, с одной стороны, и прибора 8086/88, с другой стороны, при работе в реальном режиме. В МП 8086/88 адресация 64-Кбайт сегмента, начинающегося с последнего параграфа стандартного 1-Мбайт адресного пространства, невозможна, так как старший разряд адреса отбрасы­вается. При проектировании же прибора 80286 была допущена ошибка, в результате которой адресация в данной ситуации производилась к первым 64 Кбайт памяти, находящейся за 1-Мбайт границей (точнее — к первым 64 Кбайт — 16 байт, так как первый параграф остается в стандартном адресном пространстве). Дkя исключения описанного несоответствия в ПЭВМ класса AT и старше устанавливается специальный узел. Имеются драйверы, блокирующие его и тем самым обеспечивающие свободный доступ к указанной области памяти. В качестве примеров таких драйверов назовем уже упомянутый драйвер HIMEM.SYS, а также HIDOS.SYS, входящий в комплект поставки DR DOS 5.0. Данная разновидность верхней памяти может использоваться только специально разработанными программами. В нее помещаются, в частности, резидентные модули DOS 5.0, высвобождая тем самым стандартную память для прикладных программ. Таким образом, для увеличения стандартной памяти на 64 Кбайт за счет верхней памяти необходима ПЭВМ класса AT и старше с повышенной емкостью ОЗУ, а также соответствующий драйвер. Рассмотренную разновидность верхней памяти обычно называют НМА - памятью (НМА — High Memory Area — область верхней памяти).

Вторая разновидность верхней памяти поддерживается преимущественно на ПЭВМ с МП 80386(SX) и 80486(SX) путем отображения логических адресов памяти в физические, находящиеся за 1-Мбайт границей. В данном случае «дыры» в области видеопамяти и ПЗУ «заполняются» избыточной оперативной памятью. Эта техника аналогична реализации отображаемой памяти, но имеет два отличия:

— невозможно использовать память, превышающую размеры «дыр» (т.е. механизм переклю­чения страниц не поддерживается);

— в верхнюю память можно загружать программы.

Обычно в верхнюю память второй разновидности помещают драйверы и резидентные про­граммы, частично освобождая тем самым стандартную память. Поддержку такой загрузки обес­печивает только DOS 5.0.

В качестве драйвера для управления загрузкой программ в верхнюю память второй разно­видности можно выбрать:

— драйвер 386МАХ или Blue Мах фирмы Qualites;

— драйвер ОЕММ версии 5.0 или более поздней, выпускаемый компанией Quarterdeck;

драйвер HIDOS.SYS фирмы Digital Research.

Подчеркнем, что драйвер HIMEM.SYS не обеспечивает выполнение рассматриваемой функции. Тем не менее в комплект MS-DOS 5.0 входит драйвер EMM386.EXE, решающий эту задачу. Новейшие драйверы способны обеспечить отображение адресов даже на ПЭВМ класса AT. Таким образом, если Вы имеете ПЭВМ класса AT, снабженную платой EMS 4.0 и избыточной памятью, то все же можете обеспечить возможность загрузки драйверов и резидентных программ в верхнюю память, подключив к системе одну из следующих пар драйверов:

— драйверы MOVE-ЕМ версии 1.02 или более поздней, предлагаемый фирмой Qualitas, и HIMEM.SYS;

— драйверы QRAM и QEXT компании Quarterdeck.

Вторую разновидность верхней памяти часто обозначают как UMB (Upper Memory Blocks — блоки верхней памяти).