G.5.12. Этап 9b. Ручная оптимизация памяти.

Программа MemMaker.exe поставляется только с MS-DOS версий 6.xx. Ни в ранних версиях MS-DOS, ни в более поздних версиях (MS Windows 95/98) этой утилиты нет. Программа же Optimize оптимизирует память только при установленном драйвере Quemm386.sys. Поэтому если Вы используете драйверы расширенной памяти Himem и дополнительной памяти Emm386, а возможность запуска программы MemMaker отсутствует, то Вам придется проводить оптимизацию вручную.

Для оптимизации памяти "вручную" Вам потребуется программа Mem.exe, поставляемая в составе операционных систем MS-DOS версий 5.0 и выше, е также Microsoft Windows 95/98. В случае ее отсутствия (некомплекта системы), можно воспользоваться программами Mapmem.com ("карта памяти") и Mft.exe ("Манифест"). В дальнейшем будет в основном описываться ручная оптимизация с помощью программы mem.exe.

Для оптимизации памяти вручную вначале надо собрать следующую информацию о резидентных программах и драйверах;

1. Истинный размер каждой из программ.

2. Размер каждой из программ, занимаемый ею в оперативной памяти.

3. Размер сегментов в каждой программе, отводимых под ее код, окружение и данные.

Истинный размер программы определяется с помощью команды DIR, вызванной из командной строки MS-DOS. Можно также воспользоваться файловыми оболочками, указав в опциях просмотра содержимого директории "Full" ("Полный список").

Размер, занимаемый программой в памяти, определяется с помощью программы mem с ключом /C, mapmem и mft. Эти программы также сообщат, какое количество базовой, расширенной и дополнительной памяти занимают эти программы, а какое количество памяти остается свободным. И только следующая команда:

mem /M <имя модуля>

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

(* Конечно,если Вы не программист или хакер, во всю использующий программы-отладчики типа debug, CodeView, TurboDebuger и т.п. В Windows 95/98 сегментные адреса, но не их размер (придется поупражняться в шестнадцатеричной арифметике), можно также определить, выбрав из контекстного меню файла с резидентной программой пункт "Properties " ("Свойства"). Там же содержится другая, менее интересная информация.)

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

1. Загрузка командой install в файле Config.sys - лучше применять в случае, если программа не имеет сегмента с данными. Например, когда программа полностью переопределяет прерывание. Также необходимо соблюдать последовательность загрузки - смотри раздел, посвященный минимизации базовой памяти.

2. Загрузка командой lh (loadhi для драйвера Quemm386.sys) в область старших адресов памяти. Она эффективна в случае присутствия и сегмента кода, и сегмента данных, причем и тот, и другой расположены "компактно", без лишних промежутков. В противном случае необходима загрузка в два или более блока старших адресов.

3. Загрузка программ в верхнюю память с помощью программы loadfix. Как правило, в описании таких программ есть пункт, рекомендующий такую загрузку. Таким образом нельзя загружать сжатые и упакованные программы*!

(* Например, с помощью программ pklite, lzexe и exepack).

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

(** Автор считает такой стиль написания резидентных программ самым безграмотным и вредным).

Выяснив, куда лучше разместить каждый из требуемых к загрузке модулей, напишите соответствующую строку в файлах Config.sys и Autoexec.bat. Все драйверы (кроме указанных особо: Himem.sys, Emm386.exe, Quemm386.sys, Smartdrv) следует загружать командой DEVICEHIGH.

Если Вы решили использовать загрузку резидентных программ в область старших адресов (UMB), предварительно запустите программу mem с ключом /F. Эта команда выведет листинг свободных блоков старшей памяти. Требования к загрузке в старшие адреса следующие:

1. Несколько программ, загруженных программой lh, не могут использовать одну и ту же область адресов.

2. Резидентная программа может занимать либо часть блока старших адресов, либо весь блок, либо несколько блоков, но никак иначе (то есть запрещена фрагментация старшей памяти.)

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

4. Программе по умолчанию предоставляется весь блок старшей памяти. Чтобы программа не заняла под себя весь блок, поставьте после команды lh ключи /L с параметрами и /S. (Параметры смотри в книге Фигурнова или в On-line - овом руководстве по MS-DOS.)

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

Оптимизация памяти в ручную - процесс длительный. Вам не раз придется вызывать программу mem с различными параметрами, прежде чем Вы добьетесь нужного результата. Зато результат будет превосходным с первого раза! Опции, необходимые для программ lh MemMaker и т.п. смотри в приведенных здесь перепечатках.

Удачи Вам в оптимизации памяти! Good Luck!

Назад | Содержание