Как извлечь максимум из системной памяти DOS в высших адресах
Память в высших адресах DOS
Остановившись коротко на этих вопросах, можем теперь перейти к рассмотрению того, что собственно является предметом данной статьи: использованию памяти в высших адресах DOS. Область памяти в адресах от A000h до FFFFh была зарезервирована IBM для системного аппаратного обеспечения. На многих машинах, однако, используется не вся эта область. Например, если на вашей машине стоит обычная системная BIOS, в случае неграфической монохромной системы может использоваться всего лишь 36 Кбайт из зарезервированных 384 Кбайт, тогда как в случае IBM OS/2, видео адаптера 8514/А и платы сети, возможно, из них будет использоваться свыше 300 Кбайт. Все, что не используется - это адресное пространство, которое "пропадает зря", и куда программы управления памятью компьютера 386 могут поместить действительно используемую память. Рассмотрим позднее особые случаи использования, теперь же остановимся на том, что ваша собственная система оставляет без внимания.
Вы, наверное, считаете, что хитроумная программа управления памятью - QEMM или 386max - способна автоматически обнаружить все выделенные и невыделенные участки памяти. Они действительно постараются это сделать, но с нестандартным аппаратным обеспечением связано слишком много параметров, а практически все компьютеры имеют какие-нибудь нестандартные аппаратные средства, так что вся работа не может быть проделана без вашей помощи.
Итак, возьмите лист бумаги и карандаш, и пометьте три колонки: "Используется", "Точно свободно" и "Возможно свободно". Затем выделите шесть строк для областей от A до F. Теперь мы можем постараться вычислить, какое адресное пространство можно передать программам. Если бумага и карандаш вас не устраивают, воспользуйтесь вашей излюбленной электронной таблицей.
Размещение памяти в высших адресах DOS
Области A и B зарезервированы для видеопамяти, но в большинстве случаев по крайней мере часть их не используется. Оригинальный монохромный адаптер берет из них 4 Кбайт, чтобы разместить 4000 байтов, необходимых для описания текстового экрана (25 строк на 80 столбцов, по 2 атрибута). Эта память начинается с адреса B000h и продолжается почти до адреса B100h. К сожалению, в зависимости от конкретной BIOS вашего компьютера, код простой команды, например, CLS, может занять большую, чем 4 Кбайт, область памяти из отрезка B000h - B100h. AMI BIOS (Northgate) задействует только эти 4 Кбайт, но встроенный AT эффективно использует память от B000h до B200h, а некоторые машины Compaq используют память от B000h до B400h. Следовательно, если у вас монохромный адаптер, вам следует проэкспериментировать.
+------------------+ ¦ ¦ ¦ Бит ¦ ¦ интенсивности ¦ +------------------+ ¦ ¦ ¦ Бит синего цвета¦ г====¦ ¦ ¦ +------------------+ ¦ ¦ ¦ ¦ ¦ Бит зеленого ¦ ¦ ¦ цвета ¦ ¦ +------------------+ ¦ ¦ ¦ B000 -------------------¬ ¦ ¦ Бит красного ¦ ¦ ПЗУ VGA ¦Рис.3. Используя схему коммутации (bankswitching), платы EGA и VGA, имеющие собственную память, могут работать, используя 64-Кбайтное адресное пространство области А.
CGA использует 16 Кбайт, от B800h до BC00h. Хотя это оставляет отрезок BC00h - C000h при наличии CGA в принципе свободным, вы можете пользоваться им только на свой риск, поскольку некоторое программное обеспечение предполагает, что эта неиспользуемая видеопамять доступна. Такие программы прекрасным образом испортят все, что ваша программа управления памятью поместит в эту область. Hercules в графическом режиме задействует всю область B. EGA и VGA используют область B800h - C000h в текстовом режиме и тех графических режимах, которые подражают CGA, а также всю область А для графики с высокой разрешающей способностью. Вас может удивить тот факт, что платы с 256 Кбайт (EGA) или даже 512 Кбайт (некоторые VGA) способны ограничиться использованием адресного пространства области А - т.е., всего 64 Кбайт. Платы используют схему коммутации банков (bankswitching), подобную той, что применяется в программном обеспечении EMS для дополнительной памяти. Вся эта память представляет собой ПЗУ, аппаратным путем подсоединенное к видео-выводу, и таким образом недоступна через карты памяти, как показано на рис. 3. Рис. 4 отражает общую ситуацию для областей A и B.
C000 -------------------¬ C000 -------------------¬ ¦------------------¦ ¦ ¦ ¦------------------¦ ¦ ¦ ¦------------------¦ ¦ ¦ B100 ¦------------------¦ ¦__________________¦ B000 ¦------------------¦ B000 ¦------------------¦ ¦------------------¦ ¦------------------¦ ¦------------------¦ ¦------------------¦ ¦------------------¦ ¦------------------¦ А000 L------------------- А000 L------------------- Монохромный IBM Hercules C000 -------------------¬ C000 -------------------¬ ¦ ¦ ¦ ¦ В800 ¦ ¦ В800 ¦ ¦ ¦------------------¦ ¦------------------¦ ¦------------------¦ ¦------------------¦ B000 ¦------------------¦ B000 ¦------------------¦ ¦------------------¦ ¦ ¦ ¦------------------¦ ¦ ¦ ¦------------------¦ ¦ ¦ L------------------- А000 L------------------- CGA EGA или VGAРис.4. Области А и В могут размещаться рядом с видео-памятью. Многие видео-платы не используют область оперативной памяти, отведенную для них, полностью, несмотря на это видео-память не может использоваться для других целей.
Другой стандартной областью является область F. В ней располагается системная оперативная память. Тем не менее, не все системы полностью занимают весь отведенный участок размером 64 Кбайт, и не все из этих 64 Кбайт нужны после загрузки. Например, в системах с последними версиями AMI BIOS память от F000h до F800h используется программой установки и диагностики, которая может быть вызвана во время загрузки. Поскольку этот участок не используется после загрузки, можно позволить программе управления памятью разместить там что-нибудь другое.
На оригинальном IBM AT память с адресами F600h - FC00h используется под ПЗУ для BASIC, значит, она может быть использована другим образом, если вы готовы пожертвовать BASICA или намерены вместо этого пользоваться GW BASIC. Если вы по натуре авантюрист, можете проэкспериментировать, используя на вашей машине часть этого адресного пространства. Для безопасности скопируйте жесткий диск, прежде чем начнете эксперименты и, разумеется, подготовьте загрузочную дискету. Если окажется, что память, которую вы попытались задействовать другим образом, принадлежит системному ПЗУ и используется, почти наверняка во время загрузки программы управления памятью произойдет крах системы.
На AT область E недоступна, поскольку она аппаратно привязана к пустому гнезду ПЗУ. Для версий QEMM и 386max, настроенных на 386, это не имеет значения, но важно для новых программ, настроенных на 286. Для PS/2 стандартом является 128 Кбайт системного ПЗУ, которое занимает адресные области E и F. На большинстве других машин область E совершенно свободна. Но, только для того, чтобы вы не знали наверняка, некоторые VGA располагают свое ПЗУ по адресу E000h. Более того, некоторые компьютеры Zenith размещают ОЗУ с C000h по C800h и с E000h по E800h. Это требует ключа в командной строке программ управления памятью, который сообщит им, что в этих областях находится ОЗУ.
Области C и D запутаны больше всего. В системах EGA и VGA видео ПЗУ обычно находится на дне области C; при наличии плат IBM для многих разновидностей EGA видео ПЗУ располагается с C000h по C400h, но в некоторых других VGA используется область с C000h по C800h. VGA Video7, Paradise и Compaq используюи ПЗУ в адресах C000h - C600h. Но платы Video7 и Paradise кроме того используют ПЗУ в области C600h C800h. Более ранние версии QEMM и 386max по умолчанию используют эти области, так что при переключении на определенные видео режимы произойдет крах системы. В результате возникновения этой проблемы технической поддержки последние версии программ управления памятью не станут использовать память с C600h по C800h в случае, если они обнаружат ПЗУ в адресах C000h - C600h. Если у вас Compaq VGA, проверьте, использует ли ваша программа управления памятью эту область и, если не использует, дайте команду
USE C600-C800 (386max)или командуI=C600-C800 (QEMM).Платы сети или SCSI/ESDI ПЗУ обычно размещаются где-нибудь в другом месте в пределах областей C и D.
Проиллюстрируем, как все это работает, на примере конкретной системы. Система включает Video7 VRAM, которая целиком занимает область памяти А, область B800h - C000h для видео оперативной памяти и область C000h - C800h для видео ПЗУ и специального ОЗУ. Установлена также монохромная плата памяти, использующая память в адресах с B000h по B100h. По умолчанию обе программы управления памятью будут избегать всей области B000h - B800h, если обнаружат монохромную плату, значит, нам придется указать им явным образом, чтобы они использовали эту память.
В системе имеется также SCSI ПЗУ, которое может быть помещено в разные участки, манипулируя его ключами DIP. Установим его в область C800h - CC00h, чтобы не разбивать на фрагменты оперативную память в высших одресах. В высших адресах DOS больше не размещается ничего, кроме системного ПЗУ. Поскольку последнее имеет тип AMI, можно освободить область с F000h по F800h. С учетом вышесказанного, командная строка QEMM выглядит так:
DEVICE=C:\QEMM.SYS RAM ROM I=B100-B7FF I=F000-F7FF FRAME=CC00Ключевые слова RAM (ОЗУ) и ROM (ПЗУ) указывают QEMM постараться наилучшим образом заполнить пустое адресное пространство логическим ОЗУ и перенести все ПЗУ в быструю память. Две команды I указывают память, которую следует использовать. Команда FRAME касается особенности Ventura, которая будет описана позднее. Для 386max команды выглядят так:
DEVICE=C:\386MAX.SYS USE=B100-B800 USE=F000-F800 FRAME=CC00Ключевые слова RAM и ROM при обращении к 386max не нужны, посокльку они подразумеваются по умолчанию. Для старых версий QEMM необходимо добавить
EXCLUDE=C600-C7FFа для старых версий 386max добавитьRAM=C600-C800Известные проблемы
Существуют некоторые особенности, о которых следует знать. Aristocad производит несколько программ, которые обеспечивают большую виртуальную страницу в Ventura Publisher, Microsoft Windows или Excel (SoftKicker, SoftKicker Plus и ExcelMore). Все они используют EGA и VGA в особом режиме, при котором осуществляется доступ ко всей области A000h - C000h, включая участок B000h - B800h, который обычно свободен для систем, использующих только EGA/VGA. Таким образом, вы теряете 32 Кбайт места для резидентных программ и должны удостовериться, что ваша программа управления памятью не пытается их задействовать.
В продукте Ventura 2.0 Professional Edition есть недочет, который служит причиной выдачи частых сообщений об ошибке в том случае, когда рамка страницы дополнительной памяти начинается выше E000h. По умолчанию программы управления памятью расположат рамку страницы как можно выше. Поэтому, если область F000h - F800h может быть использована, и в вашей системе имеется Professional Edition, необходимо разместить рамку страницы как можно ниже. Это поможет избежать конфликта и, кроме того, предотвратит разбиение на фрагменты памяти в высших адресах. Именно для этого служит команда FRAME=CC00 в примерах.
Наконец, существует общая проблема (не связанная с этими двумя программами управления памятью), которая касается области памяти в высших адресах DOS и 16-битовых плат VGA. Спецификация шины ISA заставляет шину управлять каждым участком ОЗУ размером 128 Кбайт либо целиком в режиме 8 бит, либо целиком в режиме 16 бит. Следовательно, все области A и B должны быть одного типа, C и D по возможности разного типа, E и F одинакового типа.
Video 7 делает платы VGA с ОЗУ и ПЗУ, пригодные для 16-битовых операций; Paradise включает 16-битовое ПЗУ. При инициализации плат происходит поиск 8-битовой памяти, а затем переключение на необходимый режим. Таким образом, в системе, которую мы выбрали для примера, VRAM обнаруживает 8-битовый монохромный адаптер в адресах B000h B100h и переключает все свое видео-ОЗУ на 8-битовый режим; обнаруживает ПЗУ адаптера SCSI в адресах C800h - CC00h и переключает ПЗУ на 8 -битовый режим.
Замедление ПЗУ не играет роли, поскольку программа управления памятью 386 помещает его в 32-битовое ОЗУ. Это возможно, поскольку перемещение происходит на логическом уровне, а спецификация шины заботится только о физическом уровне.
Однако, замедление видео-операций в результате 8-битового режима неприятно и может повлечь за собой другие проблемы. Следует принимать во внимание то, что некоторые платы - особенно определенные адаптеры сети - инициализируют свое встроенное ОЗУ только после того, как загрузится система. Таким образом, может возникнуть проблема, если это новое ОЗУ 8-битовое, а расположено в области, которую видео-плата привела в 16-битовый режим. Решение не особенно приятно: вам придется использовать ключи DIP для переключения видео-плат в 8-битовый режим.
Как только вы разберетесь, какие области памяти могут быть использованы для резидентных программ, следующей задачей будет их размещение. Вы должны будете побеспокоиться о том, сколько памяти нужно каждой резидентной программе, когда она уже загружена, а также о том, что она, возможно, потребует дополнительной памяти во время загрузки. Например, SideKick Plus занимает всего лишь 70 Кбайт, когда загружен, но требует более 200 Кбайт во время загрузки. Это делает данную программу непригодной для загрузки в память в высших адресах. Возможно, перспектива расчета всех комбинаций вас напугает - к счастью, как QEMM, так и 386max могут вам помочь. Недавно к их возможностям прибавились режимы, автоматизирующие такие операции.
Установка этих программ оптимальным образом может потребовать значительных усилий, но помните, что вам понадобится сделать это только один раз, зато в результате вы можете получить десятки килобайтов драгоценного места в оперативной памяти. Через несколько лет, когда большинство из нас будет работать в OS/2, мы будем оглядываться назад и смеяться над тем, что десятки килобайт ОЗУ быль столь ценны, но пока мы ограничены 640 Кбайт, это так.
Следующим шагом для вас будет решиться воспользоваться программами, которые позволят получить доступ к памяти DOS в высших адресах. Помните, что кроме управления памятью в высших адресах программы, предлагаемые Quarterdeck и Qualitas, также управляют расширенной памятью и имитируют дополнительную память, позволяя вам конфигурировать вашу систему таким образом, чтобы она работала с максимальной производительностью. Мы надеемся, что объяснение нескольких частей головоломки памяти, которое мы дали, и подробное рассмотрение высших адресов памяти DOS поможет вам в этом оптимизационном процессе. Вам остается только заняться этим.
Назад