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

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

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

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

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

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

Когда DOS запускает программу, система сначала выделяет блок памяти для копии своего окружения (Environment), которая передается программе, а затем – весь остаток памяти для самой программы. Связь между этими и другими блоками организуется так, как показано на рис. 2.


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

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

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

-  определение размера наибольшего блока, который можно выделить, программе;

-  выделение блока памяти заданного размера;

-  освобождение блока памяти;

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

Функции управления стандартной памятью неотъемлемо присущи DOS.

1.3 Отображаемая память

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