Тонкая настройка и оптимизация MS-DOS


Область от 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 для решения следующих задач.

  • Отображение расширенной памяти на свободные участки зарезервированной памяти компьютера, лежащие в диапазоне адресов от 640 килобайт до 1024 килобайт. Драйвер QEMM-386 выделяет из зарезервированной памяти участки размером 4 килобайта. Расположенные рядом участки объединяются в области. Эти области впоследствии могут быть использованы для загрузки драйверов и резидентных программ.


  • Эмуляция дополнительной памяти с использованием расширенной памяти. Для эмуляции используется участок зарезервированной памяти размером 64 килобайта. Быстродействие дополнительной памяти, созданной драйвером QEMM-386, больше, чем созданной драйвером EMM386.EXE.


  • Драйвер QEMM-386 может переписать содержимое медленной памяти BIOS в область быстродействующей расширенной памяти. Драйвер выполняет отображение этого участка быстродействующей памяти в диапазон адресов BIOS. При этом значительно возрастает скорость выполнения программ, активно использующих BIOS.


  • Если в вашем компьютере установлен видеоадаптер EGA или VGA, и вы не используете графические режимы работы видеоадаптера, драйвер QEMM-386 выделит вашим программам дополнительно 96 килобайт видеопамяти.


  • Мы опишем только основные возможности драйвера QEMM-386. Тех, кто хочет использовать все возможности QEMM-386, мы адресуем к документации, поставляющейся вместе с этим драйвером.


    Содержание раздела