Тонкая настройка и оптимизация MS-DOS© Александр Фролов, Григорий ФроловТом 4, М.: Диалог-МИФИ, 1993, 236 стр. 4.3. Опытному пользователюЕщё об оперативной памятиДля более эффективного использования памяти в компьютерах на базе процессоров 80386 или 80486 необходимо полное понимание механизма, позволяющего загружать драйверы и резидентные программы в расширенную память. Для этого мы вновь вернёмся к карте распределения памяти. Расскажем подробнее об использовании различных участков оперативной памяти операционной системой MS-DOS версии 5.0 при её загрузке в старшие адреса памяти указанием DOS=HIGH в файле CONFIG.SYS. Область от 0 до 640 килобайтЭто так называемая стандартная память. В области стандартной памяти располагаются вектора прерываний, часть ядра операционной системы, резидентные программы, драйверы. В эту же область загружаются запущенные на выполнение программы. В результате оптимизации нам было бы желательно максимально расширить пространство, доступное программам, переместив ядро операционной системы, драйверы и резидентные программы в расширенную память. Область от 640 до 1024 килобайтЭта область зарезервирована фирмой IBM для аппаратного обеспечения. В ней находятся:
Память с адресами от 640 до 1024 килобайт - это зарезервированная память, она играет ключевую роль в механизме, используемом для расположения драйверов и резидентных программ в расширенной памяти. Эта память также используется драйверами дополнительной памяти. Как правило, зарезервированная память задействована не полностью, в ней есть свободные области. Эти свободные области и используются при работе с расширенной или дополнительной памятью. Драйвер EMM386.EXE отображает свободные области на расширенную память, пользуясь виртуальным режимом работы процессоров 80386 или 80486 (.i.режим виртуального процессора 8086;). К сожалению, в этой книге нет места для детального описания виртуального режима работы. Для нас важно, что процессор, находясь в виртуальном режиме при использовании драйвера EMM386.EXE адресуется к свободным областям зарезервированной памяти. При этом процессор использует механизм адресации, соответствующий реальному режиму работы. Однако на эти свободные области зарезервированной памяти отображаются участки расширенной памяти, находящиеся выше границы 1024 килобайта. Если поместить в свободные участки зарезервированной памяти, отображаемые на расширенную память, драйверы или резидентные программы, физически они окажутся в расширенной памяти. Но сами они об этом не будут знать ничего, продолжая работать так, как будто они находятся в стандартной памяти ниже границы 1024 килобайта. Драйверы дополнительной памяти также используют свободные участки зарезервированной памяти. Они располагают там окно размером 64 килобайта, отображаемое с помощью специальной аппаратуры на дополнительную память, установленную на отдельной плате. Дополнительная память не входит в адресное пространство процессора и не может адресоваться им непосредственно ни в реальном, ни в защищенном режиме. Она отображается в окно, расположенное в зарезервированной памяти и программы адресуются к ней только через это окно. Разумеется, программы могут передвигать окно, адресуя через него по частям всю дополнительную память. Область от 1024 килобайт и вышеЭто расширенная память. Её начальный участок от 1024 до 1088 килобайт - область старшей памяти (High Memory Area - HMA). Именно в эту область MS-DOS версии 5.0 может помещать значительную часть своего ядра и области данных. Интересной особенностью области HMA является то, что она доступна для процессора, работающего в реальном режиме, то есть как раз в том режиме, который использует MS-DOS. Как такое может быть? Для того, чтобы это понять, необходимо вспомнить механизм сегментной адресации памяти, используемый всеми процессорами серии Intel 80XXX. Физический адрес получается из двух компонент - сегментного адреса и смещения. Каждая компонента - двухбайтовая. Для вычисления адреса в реальном режиме работы процессора к сегментной компоненте, сдвинутой влево на четыре бита, прибавляется компонента смещения. Например, пусть у нас имеется логический адрес 1234:0005 (при работе с адресами обычно используются шестнадцатеричные числа). Сегментный адрес равен 1234, а смещение - 0005. Сдвигаем сегментный адрес влево на четыре бита, получаем 12340. Затем прибавляем смещение 0005 и получаем физический адрес 12345. Задавая какое-нибудь значение сегментного адреса и меняя смещение, мы можем адресоваться к любым 64 килобайтам памяти в пределах первого мегабайта. А что получится, если задать сегментный адрес FFFF, то есть самое большое значение для сегментного адреса? Очевидно, что конец области оперативной памяти, простирающейся от 0 до 1024 килобайт, имеет адрес FFFF:000F, так как этому логическому адресу соответствует физический адрес FFFFF. Адрес FFFFF - это самый большой адрес, который может быть задан при использовании 20-разрядной адресации. А реальный режим работы процессора использует именно 20-разрядную адресацию. Зададим себе вопрос: что произойдёт, если, например, при записи в память будет указан логический адрес FFFF:0010? Если в вашем компьютере установлен процессор 8086 или 8088, то произойдет запись в самую первую ячейку оперативной памяти, имеющую физический адрес 00000, так как перенос из 19-го разряда в двадцатый будет игнорирован (адресные разряды в процессоре 8086 или 8088 нумеруются от 0 до 19). Процессоры 80286, 80386 и 80486 имеют большее количество адресных линий, поэтому перенос в 20-й разряд не будет потерян. Произойдет адресация памяти за пределами первого мегабайта! За счёт двадцатого разряда адресной шины процессор в реальном режиме получает доступ к памяти в диапазоне адресов от FFFF:0010 до FFFF:FFFF. Это почти 64 килобайта (без шестнадцати байт). Именно эти 64 килобайта MS-DOS версии 5.0 может использовать для размещения своего ядра и областей данных. Всё что вам нужно для того чтобы использовать таким образом область старшей памяти HMA - это две строки в файле CONFIG.SYS: DEVICE=C:\DOS\HIMEM.SYS DOS=HIGH Драйвер расширенной памяти QEMM-386 Для тех, кто желает использовать все возможности по оптимизации использования памяти в компьютерах с процессорами 80386 и 80486, мы расскажем о драйвере расширенной памяти QEMM-386 фирмы Quarterdeck. Мы рассмотрим версию 6.0. Этот драйвер выполняет все функции драйвера EMM386.EXE, но делает это лучше и быстрее. Вы можете использовать QEMM-386 для решения следующих задач.
Мы опишем только основные возможности драйвера QEMM-386. Тех, кто хочет использовать все возможности QEMM-386, мы адресуем к документации, поставляющейся вместе с этим драйвером. Установка драйвера QEMM-386Вы можете установить драйвер двумя способами - с помощью специальной программы INSTALL, имеющейся на дистрибутивной дискете, либо вручную. Программа INSTALL переписывает все файлы с дистрибутивной дискеты в каталог, указываемый при установке драйвера QEMM-386. Затем она подключает драйвер в файле CONFIG.SYS и настраивает параметры драйвера. Если у вас нет проблем с английским языком, мы рекомендуем вам именно этот способ установки драйвера. Установка драйвера вручную также несложна. Создайте на диске каталог с именем, например, QEMM, и скопируйте в него все файлы с дистрибутивной дискеты. Затем подключите драйвер QEMM.SYS. Например, если вы установили драйвер в каталог QEMM на диске C:, добавьте в файл CONFIG.SYS следующую строку: device=c:\qemm\qemm.sys [параметры] Учтите, что драйвер QEMM.SYS должен располагаться в первой строке файла CONFIG.SYS. Кроме того, вы должны отключить драйвер HIMEM.SYS, так как драйвер QEMM.SYS выполняет сам все функции по управлению расширенной памятью. После того, как вы подключили драйвер QEMM.SYS и перезагрузили компьютер, запустите программу OPTIMIZE, входящую в состав QEMM-386. Эта программа должна находиться в каталоге QEMM. Программа OPTIMIZE исследует файлы CONFIG.SYS и AUTOEXEC.BAT и пытается сама перенести все драйверы и резидентные программы в свободные области зарезервированной памяти, отображаемые на расширенную память. В процессе своей работы программа модифицирует файлы CONFIG.SYS и AUTOEXEC.BAT и два раза выполняет перезагрузку операционной системы. Проследите за тем, чтобы перед запуском OPTIMIZE в файле AUTOEXEC.BAT не производился запуск таких программ, как Norton Commander, DOSSHELL или WINDOWS. OPTIMIZE настраивает параметры драйвера QEMM.SYS, модифицирует строки файла CONFIG.SYS, в которых подключаются драйверы. После завершения процесса оптимизации выдайте команду MEM и убедитесь в том, что свободной памяти стало гораздо больше. Настройка параметров драйвера QEMM-386Приведём таблицу некоторых, самых важных на наш
взгляд, параметров драйвера QEMM.SYS:
Всего же драйверу QEMM.SYS можно указывать десятки параметров, с помощью которых можно выполнить тонкую настройку драйвера практически для любой конфигурации программных и аппаратных средств. Мы научим вас использовать только основные возможности драйвера QEMM.SYS, остальные сведения вы сможете найти в документации на драйвер. Начните с того, что поместите в самое начало файла CONFIG.SYS следующую строку: device=c:\qemm\qemm.sys RAM NOEMS В этом случае драйвер QEMM.SYS будет использоваться только для управления областью старшей памяти HMA и размещения драйверов и резидентных программ в расширенной памяти. Эмуляция дополнительной памяти выполняться не будет. Далее запустите программу QEMM.COM, которая находится в каталоге QEMM и входит в состав дистрибутивной дискеты. Эта программа нужна для правильной настройки параметров драйвера QEMM-386. После запуска программа QEMM.COM выведет на экран карту использования оперативной памяти: Current Mode = ON Expanded Memory Available = 0K Page Frame Address = None Expanded memory is being used. г===================================¬ ¦ Area Size Status ¦ ¦ 0000 - 0FFF 64K Excluded ¦ ¦ 1000 - 9FFF 576K Mappable ¦ ¦ A000 - AFFF 64K Video ¦ ¦ B000 - B7FF 32K High RAM ¦ ¦ B800 - BFFF 32K Video ¦ ¦ C000 - C7FF 32K ROM ¦ ¦ C800 - C9FF 8K High RAM ¦ ¦ CA00 - CAFF 4K ROM ¦ ¦ CB00 - CBFF 4K Split ROM ¦ ¦ CC00 - CFFF 16K Adapter RAM ¦ ¦ D000 - EFFF 128K High RAM ¦ ¦ F000 - F7FF 32K ROM ¦ ¦ F800 - F8FF 4K Mapped ROM ¦ ¦ F900 - FFFF 28K ROM ¦ L===================================- Области памяти, отмеченные как "High RAM", доступны для размещения в них драйверов и резидентных программ. Оказывается, у вас есть 168 килобайт памяти для драйверов и резидентных программ! Теперь о том, как же эту память использовать. Запустите другую программу, входящую в состав пакета QEMM-386 - программу LOADHI.COM. На экран будет выведена таблица областей зарезервированной памяти, доступных для загрузки драйверов и резидентных программ: г=============================================¬ ¦ Region Area Size Status ¦ ¦ 1 B001 - B7FD 31K Available ¦ ¦ 2 C801 - C9FD 7.7K Available ¦ ¦ 3 D001 - EFFF 133K Available ¦ L=============================================- В данном случае имеется три доступные области с номерами 1, 2 и 3. Эти области имеют размер, соответственно, 31, 7.7 и 133 килобайта. Для загрузки драйверов в одну из областей используйте драйвер LOADHI.SYS, указав ему в качестве параметра путь загружаемого драйвера и параметры этого драйвера, например: device=c:\qemm\loadhi.sys c:\dos\ansi.sys Для загрузки в расширенную память резидентных программ используйте программу LOADHI.COM. Для этого расположите её в файле AUTOEXEC.BAT и укажите ей путь загружаемой резидентной программы и её параметры: c:\qemm\loadhi cyrkeyb c Разумеется, что вы можете одновременно загружать в расширенную память несколько драйверов и резидентных программ. После запуска программы OPTIMIZE запустите программу LOADHI ещё раз. Вы увидите, что драйверы и резидентные программы разместились в разных областях зарезервированной памяти: г=============================================¬ ¦ Region Area Size Status ¦ ¦ 1 B001 - B207 8.1K Used (DISPLAY) ¦ ¦ 1 B208 - B30E 4.1K Used (ANSI) ¦ ¦ 1 B30F - B370 1.5K Available ¦ ¦ 1 B371 - B57A 8.1K Used (EP) ¦ ¦ 1 B57B - B7FD 10K Available ¦ ¦ 2 C801 - C848 1.1K Used (RAMDRIVE) ¦ ¦ 2 C849 - C8AD 1.5K Used (SJDRIVER) ¦ ¦ 2 C8AE - C8F3 1K Used (SWAKEYB) ¦ ¦ 2 C8F4 - C9FD 4.1K Available ¦ ¦ 3 D001 - DBE7 47K Used (STACKER) ¦ ¦ 3 DBE8 - E78F 46K Used (DISKREET) ¦ ¦ 3 E790 - E7A1 0.2K Available ¦ ¦ 3 E7A2 - EB4A 14K Used (MOUSE) ¦ ¦ 3 EB4B - EFFF 18K Available ¦ L=============================================- Во всех областях имеется свободное пространство, в которое можно загрузить драйверы или резидентные программы (свободные области отмечены словом Available). Для оптимального использования свободных областей зарезервированной памяти вы должны знать, сколько памяти требует каждый используемый вами драйвер или резидентная программа. Как это определить? Запустите программу MFT.COM, которая находится в каталоге QEMM. С её помощью вы можете определить размер памяти, нужный для резидентных программ и драйверов. Выберите из меню "First Meg" слово "Programs". На экран будет выведен список всех загруженных программ с указанием в столбце Size требуемой для них памяти:
Аналогично для драйверов выберите из меню "DOS" слово "DRIVERS". На экран будет выведен список всех загруженных драйверов с указанием в столбце Size требуемой для них памяти:
Далее исходя из размеров областей зарезервированной памяти определите, как лучше распределить по этим областям нужные вам драйверы и резидентные программы. Программа LOADHI и драйвер LOADHI.SYS допускают явное указание номера области, в которую необходимо загрузить, соответственно, резидентную программу и драйвер. Номер области указывается с помощью параметра /r:. Например, для загрузки драйвера мыши в область с номером 3 в файле AUTOEXEC.BAT используйте такую строку: c:\qemm\loadhi /r:3 c:\mouse\mouse Аналогично для загрузки драйвера ANSI.SYS в первую область в файл CONFIG.SYS необходимо поместить следующую строку: device=c:\qemm\loadhi.sys /r:1 c:\dos\ansi.sys Программа OPTIMIZE сама определяет требуемый для используемых резидентных программ и драйверов размер оперативной памяти и сама располагает их оптимальным способом в имеющихся свободных областях. При этом для указания номера области она использует параметр /r:. Загрузка программ в видеопамятьВместе с драйвером QEMM-386 поставляется программа VIDRAM.COM. Эта программа позволяет увеличить доступное для программ пространство оперативной памяти на 96 килобайт, при условии, что вы откажитесь от использования графических режимов видеоадаптера. Кроме того, у вас должен быть установлен видеоадаптер EGA или VGA. Программа VIDRAM.COM - резидентная. После запуска вы можете её легко подключать или отключать. Для отключения VIDRAM.COM (например, перед запуском графических программ) введите команду: vidram off Если вам вновь потребовались дополнительные 96 килобайт памяти для программы, работающей в текстовом режиме, введите команду: vidram on Вы можете использовать программу VIDRAM.COM на любом компьютере, имеющем видеоадаптеры EGA или VGA. Тип процессора, установленного в компьютере, значения не имеет. Когда наиболее целесообразно загружать программы в видеопамять? Например, при работе с такими программами, как dBASE IV или Microsoft WORKS. Эти программы могут работать в текстовом режиме. Для их запуска можно подготовить пакетные файлы, в которых перед запуском, например, WORKS, подключается видеопамять, а после её завершения - отключается: vidram on works vidram off Быстродействие оперативной памятиКак ни мало время, требующееся для записи данных в оперативную память или для чтения данных из памяти, но оно отлично от нуля. Быстрая память - дорогое удовольствие, поэтому часто получается так, что процессор компьютера может обрабатывать данные быстрее, чем они могут быть получены из оперативной памяти. Для согласования скорости работы процессора со скоростью работы оперативной памяти часто приходится искусственно занижать производительность процессора, вставляя специальные такты ожидания во временной цикл работы процессора с памятью. Разумеется, вы не сможете повлиять на быстродействие установленной в вашем компьютере оперативной памяти, не заменив микросхемы памяти на более быстрые. Но в некоторых компьютерах предусмотрена возможность работы как с быстрой памятью, так и с медленной. Для этого в CMOS-памяти необходимо задать количество используемых при работе с памятью тактов ожидания. Мы уже говорили, что в CMOS-памяти хранится конфигурация аппаратных средств компьютера. После изменения конфигурации компьютера необходимо обновить содержимое CMOS-памяти. Для этого предназначена специальная программа, часто называемая SETUP-программой или программой установки конфигурации. SETUP-программа может запускаться при включении компьютера (если нажать определённую клавишу, обычно Del), либо эта программа может поставляться на дискете вместе с компьютером. Если ваш компьютер оснащён быстродействующей памятью, необходимо убедиться в том, что процессор не вставляет циклы ожидания при обращении к памяти. Это особенно необходимо, если в вашем компьютере установлен процессор 80386 или 80486. Такие компьютеры обычно комплектуются быстрой памятью. И если в CMOS-памяти указано, что надо вставлять циклы ожидания при работе с памятью, компьютер не будет работать с максимальной производительностью. Другая возможность повышения скорости работы с памятью, но на этот раз с постоянной памятью (BIOS), часто имеется в компьютерах, выполненных на процессорах 80386 или 80486. Эта возможность заключается в копировании содержимого относительно медленной постоянной памяти в специальную область быстродействующей оперативной памяти с последующим преобразованием адресов. Используемая область памяти имеет специальное название - теневая память. При этом программы, обращаясь по адресам, принадлежащим BIOS, будут работать с быстрой оперативной памятью. Это значительно ускорит выполнение программ, активно обращающихся к BIOS. Будет выполняться копирование BIOS в теневую память или нет - зависит от установки определённой ячейки CMOS-памяти. Для выбора правильного режима вам необходимо воспользоваться SETUP-программой. Если у вас компьютер, имеющий процессор 80386 или 80486 и набор управляющих микросхем фирмы Chips & Technology, при запуске SETUP-программы на экране появляется меню:
В этом меню вам необходимо выбрать выделенную строку. При этом вам будет предоставлена возможность выполнить упрощённую процедуру установки конфигурации компьютера. После выбора первой строки на экран будет выдано предупреждение о том, что неправильная установка конфигурации может привести к зависанию компьютера:
В этом случае необходимо нажать клавишу INS, затем, не отпуская её, выключить питание компьютера и включить его заново. Клавишу INS следует отпустить только после прохождения теста оперативной памяти. После выполнения такой операции в CMOS-память будет записана конфигурация из BIOS. На этом этапе вы можете отказаться от изменения конфигурации, если нажмёте клавишу ESC. Если же вы решили изменить конфигурацию, нажмите клавишу ENTER. Вы увидите на экране следующее меню:
Здесь можно задать конфигурацию памяти (Memory Configuration), параметры тактового генератора (Clock Source), режим теневой памяти и использование чередования при работе с памятью (Shadow RAM/Memory Interleave). С помощью клавиш перемещения курсора вы можете переключаться с одной области параметров на другую. Изменение значения параметров выполняется клавишами PgUp и PgDn. Когда вы будете нажимать на эти клавиши, в выбранной области будет происходить циклическое изменение значений параметров. Выберите область Waitstate. В этой области задаётся количество тактов ожидания при работе с оперативной памятью. Для увеличения скорости работы установите режим "0 WAIT STATE", при котором такты ожидания не используются. Затем с помощью клавиш перемещения курсора перейдите в область Shadow RAM/Memory Interleave. Установите режим использования теневой памяти ENABLED, как это показано на предыдущем рисунке. После изменения конфигурации нажмите клавишу ESC и выберите в появившемся меню строку "WRITE CMOS REGISTERS AND EXIT". Произойдёт перезгрузка компьютера. Обратите внимание на скорость тестирования оперативной памяти - после изменения её режима работы она может заметно возрасти. Описанная только что SETUP-программа - не
единственная. Вместе с вашим компьютером может
продаваться другая, имеющая больше или меньше
возможностей. Как правило, SETUP-программа
описывается в документации на материнскую плату
компьютера (Motherboard). Возможность изменения
количества тактов ожидания и режим теневой
памяти обычно имеются только в компьютерах,
выполненных на процессорах 80386 и 80486. однако
бывают и исключения - например, модели
компьютеров фирмы SUMMIT, выполненные на основе
процессора 80286, могут работать без тактов
ожидания. В них также имеется возможность
использования теневой памяти. |