Вернуться   Компьютерный форум > Блоги > Базаров
Рейтинг: 1.00. Голосов: 2.

Использование расширенной памяти и "верхней памяти"

Запись от Базаров размещена 16.08.2015 в 03:04

Перемещение DOS в первые 64 Кбайта расширенной памяти
При использовании компьютеров на основе Intel-80286 или более старших моделей, оснащенных не менее чем 1 Мбайтом оперативной памяти, вы можете перенести большую часть программ DOS из обычной памяти в первые 64 Кбайта расширенной памяти (так называемую область НМА), освободив тем самым 30-40 Кбайт обычной памяти для прикладных программ. Для этого надо включить в файл CONFIG.SYS следующие строки:
DEVICE=C:\EXE\MSDOS\HIMEM.SYS
DOS=HIGH
(мы предполагаем, что драйвер HIMEM.SYS находится в каталоге C:\EXE\MSDOS). Данная возможность появилась в MS DOS 5.0 (а до этого - в DR DOS 5.0).
Замечания. 1. Драйвер HIMEM.SYS имеет множество параметров. Из них чаще всего используется параметр /TESTMEM:OFF, отключающий проверку расширенной памяти при запуске драйвера, а остальные параметры применяются крайне редко.
2. Возможность перемещения DOS в первые 64 Кбайта расширенной памяти, как это ни странно, возникла из-за ошибки при создании процессора Intel-80286. Как известно, в микропроцессоре Intel-8088 адреса ячеек памяти задаются с помощью двух двухбайтных чисел - сегмента и смещения по формуле: сегментх16+смещение. При этом, если полученный адрес оказывался большим 1 Мбайта, то "лишний" мегабайт игнорировался - происходило обращение к началу (первым 64 Кбайтам) оперативной памяти. А при реализации обычного (не защищенного) режима работы Intel-80286 последняя особенность в нем не была учтена, в результате чего оказалось возможным в обычном режиме процессора (в котором работает DOS) обращаться к первым 64 Кбайтам (точнее, к 65520 байтам) за пределами первого мегабайта адресов памяти. Сначала эта ошибка рассматривалась как курьез, а потом было осознано, что из нее можно извлечь немалую пользу.
Разрешение использования верхней памяти
На компьютерах с процессором Intel-80386 или более старших вы можете разрешить загружать драйвера устройств и резидентные программы в "верхнюю" память (в диапазон адресов от 640 Кбайт до 1 Мбайта), что позволяет освободить обычную память для прикладных программ. Для этого можно включить в файл CONFIG.SYS следующие строки:
DEVICE=C:\EXE\MSDOS\HIMEM.SYS
DEVICE=C:\EXE\MSDOS\EMM386.EXE NOEMS
DOS=HIGH,UMB
Здесь мы опять предполагаем, что драйверы HIMEM.SYS и EMM386.EXE находятся в каталоге C:\EXE\MSDOS.
После этого вы можете размещать программы и драйверы в "верхней" памяти. В файле CONFIG.SYS для этого используется команда DEVICEHIGH (для драйверов), в файле AUTOEXEC.BAT (либо в других командных файлах или в командной строке DOS) - команда LOADHIGH или LH (для резидентных программ). При выполнении этих команд DOS делает попытку загрузить драйвер или программу в "верхнюю" память (в диапазон адресов от 640Кбайт до 1 Мбайта), а если это не удается, загружает их в обычную память.
Примеры
DEVICEHIGH=C:\EXE\MOUSE.SYS (в файле CONFIG.SYS)
LOADHIGH C:\EXE\SMARTDRV.EXE 2048 1024 (в файле AUTOEXEC.BAT)
Замечания. 1. На некоторых компьютерах драйвер ЕММ386 конфликтует с видеоконтроллером или иными контроллерами. В этих случаях обычно следует указать, что драйвер должен использовать отдельные адреса оперативной памяти в диапазоне от 640 Кбайт до 1 Мбайта. В таких случаях надо использовать параметр Х=диапазон-адресов драйвера ЕММ386. Например, чтобы указать драйверу ЕММ386 не использовать 64 Кбайта, начиная с адреса С000h:0, надо указать параметр X=C000-CFFF.
2. Драйвер ЕММ386.ЕХЕ имеет множество других параметров.
3. Перенос программ из обычной памяти в верхнюю память на процессорах 80386 и более старших возможен потому, что эти процессоры имеют функции управления памятью, отсутствовавшие в более ранних процессорах. Для этого с помощью специального драйвера (ЕММ386.ЕХЕ, QEMM и др.) процессор изменяет адреса блоков расширенной памяти, логически "перемещая" их в первый мегабайт, доступный в обычном режиме процессора, и размещает там указанные программы или драйверы.
Применение других диспетчером памяти
Вместо HIMEM.SYS и ЕММ386.ЕХЕ можно применять программы-менеджеры памяти независимых разработчиков, например QEMM или 386Мах. Эти диспетчеры памяти используют оперативную память несколько эффективнее и обладают многими дополнительными возможностями. Впрочем, следует заметить, что встречаются компьютеры и программы, которые с этими диспетчерами не совместимы. Так, при использовании QEMM в файл CONFIG.SYS надо включить следующие строки:
DEVICE=C:\EXE\QEMM\QEMM386.SYS
DOS=HIGH,UMB
Доступ к EMS-памяти
Некоторые старые DOS-программы умеют использовать EMS-память, а расширенную память - нет. К числу таких программ относятся Ventura Publisher 2.0, Microsoft Word 5.0 и 5.5 и др. Если вы применяете такие программы и используете компьютер с процессором Intel-80386 или более старшим, то целесообразно включить режим преобразования расширенной памяти в EMS-память, с которой смогут работать ваши DOS-программы. При использовании драйвера ЕММ386.ЕХЕ для этого следует вместо параметра NOEMS этого драйвера указать параметр RAM. Например, если драйвер ЕММ386.ЕХЕ находится в каталоге C:\EXE\MSDOS, то команда вызова драйвера может быть следующей:
DEVICE=C:\EXE\MSDOS\EMM386.EXE RAM
При этом вся расширенная память (точнее, максимум 32 Мбайта) будет доступна также как EMS-память. Программам будет выделен тот тип памяти, который они запросят, поэтому программы типа SysInfo могут сообщать, что компьютер имеет, скажем, 7 Мбайт расширенной памяти и 7 Мбайт дополнительной, когда всего в компьютере установлено 8 Мбайт.
Ограничение количества EMS-памяти
Если вы хотите ограничить количество расширенной памяти, которая может быть преобразована в EMS-память, укажите в команде количество EMS-памяти в Кбайтах, например:
DEVICE=C:\EXE\MSDOS\EMM386.EXE 2048 RAM
Здесь количество расширенной памяти, преобразуемой в EMS-память, ограничено 2048 Кбайтами (т.е. 2 Мбайтами). Это позволяет обезпечить наличие требуемого количества расширенной памяти,не захваченной DOS-программами, использующими EMS-память.
Ликвидация EMS-окна
Приведенные выше методы доступа к EMS-памяти имеют один недостаток: количество доступной верхней памяти (с адресами от 640 Кбайт до 1 Мбайта) при этом уменьшается на целых 64 Кбайта - там размещается так называемое "окно обмена" с EMS-памятью. За счет этого у вас в верхнюю память могут не поместиться некоторые резидентные программы и драйверы, то есть они будут расположены в обычной памяти. Объем обычной памяти, доступный прикладным программам, при этом уменьшится, что крайне нежелательно.
Однако часто всего этого можно избежать. Дело в том, что окно обмена с EMS-памятью для функционирования драйвера ЕММ386.ЕХЕ не нужно. Оно требуется только для совместимости со старыми диспетчерами EMS-памяти, которые работали с настоящей EMS-памятью, расположенной на специальных платах расширения в компьютере. Большинство программ, работающих с EMS-памятью, в само окно обмена не лезут и работают независимо от того, есть оно или нет. Поэтому можно попробовать совсем убрать окно обмена с EMS-памятью указанием параметра FRAME=NONE, например:
DEVICE=C:\EXE\MSDOS\EMM386.EXE 2048 RAM FRAME=NONE
DEVICE=C:\EXE\MSDOS\EMM386.EXE RAM FRAME=NONE
Если используемые вами программы, работающие с EMS-памятью, не виснут, значит, все в порядке. В противном случае уберите параметр FRAME=NONE.
Замечания. 1. Вы можете также использовать параметр FRAME=адрес для задания в шестнадцатеричном виде адреса сегмента "окна" дополнительной памяти (например, FRAME=E000).
2. Возможность преобразования расширенной памяти в EMS-память в MS DOS 6.0 была усовершенствована. До этого (в MS DOS 5.0) созданная драйвером ЕММ386 TMS-память уже не могла быть использована, как расширенная память, даже если она была свободна. Ясно, что это было очень неудобно.
Размещено в Без категории
Просмотров 4786 Комментарии 0 Отправить другу ссылку на эту запись
Всего комментариев 0

Комментарии

 

Текущее время: 20:25. Часовой пояс GMT +4. Powered by vBulletin® Version 5.8.9
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.