
- •1. Управление памятью
- •1.1 Типы памяти
- •1.2 Стандартная память
- •Р ис. 2. Цепочка блоков памяти
- •1.3 Отображаемая память
- •1.4 Расширенная память
- •1.5 Высокая память
- •1.6 Верхняя память
- •2. Использование средств управления памятью
- •2.1. Общие положения
- •2.2. Драйвер himem.Sys: управление расширенной и высокой памятью
- •3. Использование драйвера himem.Sys для программирования.
- •3.1. Проверка подключения драйвера
- •3.2. Получение адреса управляющей программы
- •3.3. Описание функции драйвера h1mem.Sys
- •Локальное открывание линии а20
- •Локальное закрывание линии а20
- •Освободить область umb
- •3.4. Коды ошибок
- •3.5. Ограничения при использовании области нмa
- •4. Примеры использования драйвера himem.Sys.
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).
Принцип действии отображаемой памяти основан на техническом приеме, известном как переключение страниц памяти: внутри UMA, используемой не полностью. Выделяется 64 - Кбайт окно, в котором отображаются четыре произвольных 16-Кбайт страницы дополнительной памяти, необходимые в данный момент. Тем самым микропроцессор «вводится и заблуждение», поскольку с помощью виртуальной адресации он обращается к хранимым в окне данным, хотя на самом деле их физические адреса даже не принадлежат адресному пространству микропроцессора. Отображение страниц памяти в окне можно интерпретировать как отображение логических адресов в физические. Естественно, соответствие логических адресов физическим в любой момент можно изменить, на основе чего и обеспечивается доступ ко всему содержимому отображаемой памяти.
Таким образом, отображаемую память можно рассматривать как ленту, протягиваемую змейкой через четырех секционное окно в UMA.
Спецификация LIM EMS 4.0 допускает страницы нестандартного размера (большие или меньшие 16 Кбайт, но такие, чтобы в одной нестандартной странице содержалось целое число стандартных, или чтобы в одной стандартной странице содержалось целое число нестандартных страниц).
EMS может поддерживаться на любых IBM-совместимых ПК, включая машины класса XT
Для этого в компьютерах класса XT или AT надо иметь специальную плату памяти, удовлетворяющую требованиям EMS: и программный драйвер, который управляет отображаемой памятью. Платы для ПK класса XT и AT различаются. При выборе платы дополнительно к этому всегда надо учитывать соотношение ее быстродействия и тактовой частоты микропроцессора ПК. Некоторые платы отображаемой памяти (обычно аппаратно) могут быть сконфигурированы и таким образом, что размещенная на них память будет непосредственно рассматриваться как память с адресами свыше 1 М, то есть как расширенная память. Драйвер, управляющий отображаемой памятью и поэтому называемый администратором отображаемой памяти (EMM – Expanded Memory Manager), поставляется н комплекте с платой и в состав DOS не входит, поскольку сильно «привязан» к конкретному оборудованию, то есть к самой плате.
ПК с микропроцессорами 80386 (SX или DX) и выше не требуют специальных плат, так как обладают встроенными возможностями отображения логических (виртуальных) адресов в физические. Поэтому при наличии в таком ПК расширенной памяти достаточного размера и подключении к DOS специального драйвера можно осуществить эмуляцию отображаемой памяти. В состав DOS входит реализованный в виде драйвера администратор (диспетчер, менеджер) памяти EMM386.ЕХЕ, решающий эту задачу. Эмуляция отображаемой памяти требует переключения микропроцессора в защищенный режим.
Отображаемая память используется исключительно специально разработанными для этого, причем только устаревающими, системными и прикладными программами, а не любыми программами автоматически. Для управления отображаемой памятью EMM предлагает в распоряжение программистам набор функций, доступных по прерыванию 21Н.
Аналогично стандартной, отображаемая память выделяется блоками. Выделение блока осуществляется по запросу от программы, в котором указывается число требуемых страниц. Программы, выдавшая такой запрос, получает в свое распоряжение обработчик, или манипулятор (handle) выделенного для неё блока, и этот обработчик используется ею во всех операциях чтения из блока и записи в него. Манипулятор представляет собой небольшую информационную структуру, хранящую все необходимые сведения о блоке памяти. Таким образом, обмен данными между стандартной и отображаемой памятью на логическом уровне реализуется аналогично обмену между стандартной и внешней памятью. Первый блок отображаемой памяти используется самим EMM для своих собственных нужд.
Отображаемая память весьма медлительна, поскольку требуется частое переключение страниц. В настоящее время она уже вышла из моды, так как на рынке стали доминировать ПК с микропроцессором 80386, которые могут быть снабжены расширенной памятью. А расширенную память использовать предпочтительнее.
Отображаемую память, удовлетворяющую спецификации LIM EMS, точнее следовало бы назвать EMS памятью. Однако другие спецификации, основанные на отображении страниц, не получили сколько-нибудь широкого распространения, поэтому использование термина «отображаемая память» можно считать вполне приемлемым.