2. Оперативная память

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

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

При небольшом объеме оперативной памяти возможно резкое замедление работы программ. Большинству программных средств требуется минимальный объем оперативной памяти в котором они могут нормально работать. Например, Microsoft Access (СУБД для Windows) требует как минимум 4-х Мбайт оперативной памяти.

2.1. Что такое стандартная, расширенная и дополнительная память

Обычно основную оперативную память компьютера разделяют на стандартную, верхнюю, дополнительную и расширенную память.

Cтандартная и верхняя память

Первый персональный компьютер фирмы IBM был собран на основе центрального процессора Intel 8086. Процессор Intel 8086 имеет непосредственный доступ к 1024 килобайтам памяти. Первые 640 килобайт памяти отведены для операционной системы и программ пользователей. Эти 640 килобайт оперативной памяти называются стандартной памятью.

Стандартная память входит в состав компьютеров, выполненных на процессорах 8088, 8086, 80186, 80286, 80386, 80486, Pentium.

Оставшиеся 384 килобайта адресного пространства процессора зарезервированы фирмой IBM и называются областью верхней памяти (Upper Memory Area - UMA). В верхней памяти располагаются:

Незадействованная верхняя память может состоять из одной или нескольких частей. Эти части верхней памяти называются блоками верхней памяти (Upper Memory Blocks - UMBs).

Блоки верхней памяти могут использоваться для доступа к дополнительной памяти (смотри ниже). Процессоры Intel 80386, 80486 и Pentium могут также использовать свободные блоки верхней памяти для размещения загрузки драйверов и резидентных программ в расширенную память (смотри ниже).

Расширенная память

По мере развития программного обеспечения компьютеров, была разработана новая элементная база. Фирма Intel выпустила новый процессор Intel 80286. Центральный процессор 80286 уже имеет возможность адресовать 16 мегабайт оперативной памяти. Однако, чтобы получить к ней доступ, процессор должен работать в защищенном режиме. Процессор Intel 8086 не имеет защищенного режима, поэтому все программное обеспечение (в том числе и операционная система MS-DOS), разработанное на момент появления Intel 80286 не могло использовать новые возможности процессора Intel 80286.

Для совместимости с процессором Intel 8086 и созданным на тот момент программным обеспечением процессор Intel 80286 сразу после включения питания работает в реальном режиме. В реальном режиме процессор Intel 80286 становится улучшенным аналогом старого процессора Intel 8086, и может адресовать только первые 1024 килобайта памяти.

Память компьютера, расположенная за первыми 1024 килобайтами, называется расширенной памятью. Расширенную память могут иметь компьютеры с процессорами Intel 80286, 80386, 80486, Pentium. Компьютеры IBM PC и IBM XT, имеющие процессоры Intel 8086 и 8088 расширенной памяти не содержат.

Начальный участок расширенной памяти от 1024 до 1088 килобайт называется областью старшей памяти (High Memory Area - HMA). Эти первые 64 килобайта расширенной памяти операционная система MS-DOS начиная с версии 5.0 может использовать для размещения части своего ядра, области данных и буферов. При этом процессор все время остается в реальном режиме.

Для того чтобы использовать таким образом область старшей памяти надо добавить две строки в файле CONFIG.SYS:

DEVICE=C:\DOS\HIMEM.SYS
DOS=HIGH

Более подробно об области старшей памяти можно прочитать в пятом томе серии "Библиотека системного программиста", который называется "Тонкая настройка и оптимизация MS-DOS".

Остальная расширенная память, которая находится за границей 1088 килобайт, не доступна в реальном режиме процессора. Обычно в компьютерах с процессорами 80286 и выше установлено как минимум 384 килобайта расширенной памяти.

Возможности использования расширенной памяти зависят от конфигурации вашего компьютера. Операционная система MS-DOS может использовать расширенную память для организации электронного диска, кеширования накопителей на магнитных дисках и для размещения части резидентных программ и драйверов.

Операционная система Microsoft Windows 3.1 работает в защищенном режиме процессора и может свободно использовать всю доступную память компьютера, и основную и расширенную, для хранения программ и данных.

Дополнительная память

Дополнительная память расположена на отдельной плате, вставляемой в слот расширения материнской платы компьютера. В стандартную конфигурацию компьютера плата дополнительной памяти не входит, и должна приобретаться отдельно.

Дополнительную память, в отличие от расширенной, можно установить в любой компьютер, даже в IBM PC или IBM XT с процессором Intel 8086 или 8088. Дополнительная память не входит в адресное пространство процессора и не может адресоваться им непосредственно ни в реальном, ни в защищенном режиме.

Для использования дополнительной памяти необходимо установить специальный драйвер, поставляющийся вместе с платой памяти. Драйверы дополнительной памяти используют свободные блоки верхней памяти компьютера для организации доступа к дополнительной памяти. Они располагают там окно размером 64 килобайта, отображаемое с помощью специальной аппаратуры на дополнительную память, установленную на отдельной плате. Программы могут передвигать окно, адресуя через него по частям всю дополнительную память.

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

2.2. Что такое теневая память

Для повышения скорости работы компьютеров, выполненных на процессорах 80386 и 80486, а иногда даже на процессоре 80286, существует возможность перенести содержимое относительно медленной постоянной памяти компьютера, включающей ПЗУ BIOS и ПЗУ видеоадаптера, в оперативную память. При этом специальные схемы контроллера памяти компьютера выполняют перекодирование адресов.

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

Область оперативной памяти, на которую отображаются области ПЗУ называется теневой памятью. Использование теневой памяти уменьшит объем доступной памяти, но зато заметно ускорит работу функций BIOS и видеоподсистемы компьютера.

Будет или не будет использоваться теневая память, определяется содержимым CMOS-памяти. Для изменения содержимого CMOS-памяти необходимо воспользоваться специальной SETUP-программой. SETUP-программа может быть расположена в ПЗУ компьютера или в отдельном файле. Запустить SETUP-программу, записанную в ПЗУ компьютера можно, если в момент загрузки компьютера нажать определенную клавишу. Обычно такой клавишей является клавиша <Esc> или <Del>. SETUP-программа, расположенная в отдельном файле, прилагается к компьютеру на дискете и может быть запущена из командной строки MS-DOS.

2.3. Что такое память CMOS

Компьютеры IBM AT содержат микросхему часов реального времени. Кроме часов реального времени эта микросхема содержит еще несколько десятков байт памяти с низким энергопотреблением. Эта память реализована с использованием технологии CMOS (Complement Metal Oxide Semiconductor - комплементарные пары метал-оксид-полупроводник, отечественная аббревиатура - КМОП).

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

Обычно на системной плате компьютер расположен небольшой аккумулятор или батарейка, которая питает память CMOS при выключенном питании. В некоторых случаях этот аккумулятор расположен внутри микросхемы, которая содержит часы реального времени и память CMOS.

CMOS-память компьютеров IBM AT на базе процессоров 80286 хранит сведения о конфигурации компьютера, например, тип подключенного винчестера и дисководов для флоппи-дисков, объем оперативной памяти, текущую дату и время. Некоторые компьютеры IBM AT 286 имеют расширенную CMOS-память. В ней дополнительно может задаваться возможность переноса части функций BIOS в оперативную память (так называемый режим теневой памяти) и некоторые другие параметры.

В компьютерах на базе процессоров 80386 и 80486 размер CMOS-памяти значительно больше. Там хранится значение тактовой частоты процессора, количество тактов ожидания при обращении к оперативной памяти и другие значения, сильно влияющие на производительность компьютера.

Некоторые компьютеры хранят в CMOS-памяти пароль, запрашиваемый сразу при включении питания. Задав пароль вы можете ограничить доступ к компьютеру. Вам надо быть очень осторожным при задании пароля. В случае, если вы его забудете вам придется повозиться, чтобы загрузить компьютер. Для удаления пароля и для заполнения CMOS-памяти значениями, принятыми по умолчанию (они хранятся в ПЗУ), можно отключить питание (аккумулятор) от микросхемы часов, содержащей CMOS-память. Однако если аккумулятор расположен непосредственно в микросхеме часов, вам остается только отправить компьютер в ремонт.

После изменения конфигурации компьютера (например после замены видеоадаптера или дисковода), для изменения текущей даты, времени, пароля необходимо обновить содержимое CMOS-памяти. Для этого предназначена специальная программа, часто называемая SETUP-программой или программой установки конфигурации.

SETUP-программа может запускаться при включении компьютера (если нажать определенную клавишу, обычно Del), или она может поставляться вместе с компьютером на отдельной дискете в виде обычной программы для MS-DOS. Более подробно об CMOS-памяти и SETUP-программе вы можете прочитать только в документации на материнскую (основную) плату компьютера.

Будете осторожны при экспериментах с содержимым CMOS-памяти. Изменяйте только те параметры, о которых имеете полное представление.

2.4. Чем отличаются микросхемы памяти DIP, SIMM и SIP

Аппаратно микросхемы памяти могут быть выполнены в различных корпусах. Наиболее распространены так называемые микросхемы памяти DIP, SIMM и SIP.

Микросхемы памяти в корпусе DIP представляют из себя небольшие параллепипеды, с плоскими выводами, расположенными с двух сторон и загнутыми вниз. Оперативная память в таких корпусах устанавливалась на компьютеры ранних выпусков. Как правило микросхемы памяти в корпусе DIP вставляются в специальные панельки, расположенные на материнской плате компьютера. Микросхемы памяти в корпусе DIP обладают небольшой емкостью и их требуется огромное количество. В результате на материнской плате компьютера имеется большое число механических соединений, а это влечет за собой уменьшение надежности всей системы в целом.

В новых компьютерах IBM PC/AT микросхемы памяти выполнены в виде микросборок двух типов SIMM и SIP. Каждая микросборка представляет собой небольшую плату, на которой расположено несколько (обычно 8 или 9) микросхем памяти. Эта плата имеет разъем, вставляемый в ответные части на материнской плате компьютера.

Микросборки SIMM и SIP внешне различаются по виду разъема, используемого для подсоединения к компьютеру. Микросборки типа SIMM имеют плоские разъемы. Микросборки типа SIP имеют разъемы с выводами в виде маленьких штырей.

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

2.5. Как определить объем имеющейся оперативной памяти

Если вас интересует не только общий объем оперативной памяти, а также другие ее характеристики, можно воспользоваться командой MS-DOS MEM. С помощью команды MEM вы можете получить информацию об общем объеме и объеме свободной части основной и расширенной памяти, получить список загруженных в память драйверов и программ, а также получить некоторую другую информацию. Рассмотрим задачи, решаемые с помощью команды MEM.

Как определить объем доступной памяти

Чтобы определить общий объем основной и расширенной памяти, установленной на компьютере, а также узнать, сколько и какой памяти свободно в данный момент, нужно выполнить команду MEM без параметров.

Команда MEM выведет на экран таблицу, строки которой представляют основную память, область верхних блоков памяти, зарезервированную и расширенную память. Для каждого вида памяти отображается ее общий объем, объем используемой части и объем свободной части.

После этой таблицы отображается общий объем оперативной памяти и объем памяти, расположенной ниже первого мегабайта. Затем команда MEM сообщает максимальный размер программы, которая может быть загружена, размер наибольшего свободного блока верхней памяти и представляет данные об использовании MS-DOS блоков верхней памяти.

После выполнения на нашем компьютере, команда MEM отобразила на экране дисплея следующую информацию:

Memory Type        Total =  Used  +  Free
----------------  ------   ------   ------
Conventional        640K     265K     375K
Upper               179K     179K       0K
Adapter RAM/ROM       0K       0K       0K
Extended (XMS)    14925K   13901K    1024K
----------------  ------   ------   ------
Total memory      15744K   14345K    1399K
Total under 1 MB    819K     444K     375K
Largest executable program size       375K  (383696 bytes)
Largest free upper memory block         0K       (0 bytes)
MS-DOS is resident in the high memory area.

Как определить объем свободной памяти

Вы можете использовать команду MEM для получения подробной информации о свободной памяти компьютера. Для этого выдайте следующую команду:

MEM /FREE
   или
MEM /F

Сначала на экране будет отображен список с перечислением свободных участков основной памяти. Для каждого участка указывается его сегментный адрес и размер. После этого списка отображается общий размер свободной памяти. На нашем компьютере команда MEM определила наличие трех свободных участков основной памяти с общим объемом 375 Kбайт:

Free Conventional Memory:
Segment        Total
-------   ----------------
 04244         208    (0K)
 04251       88608   (87K)
 057F3      295104  (288K)
Total Free: 383920  (375K)

После списка свободных участков основной памяти выводится список свободных блоков верхней памяти:

Free Upper Memory:
Region   Largest Free     Total Free      Total Size
------  --------------  --------------  --------------
    1         0   (0K)        0   (0K)     3136   (3K)
    2         0   (0K)        0   (0K)   180240 (176K)

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

Как получить список загруженных программ

Команда MEM может быть полезна для получения списка драйверов и программ, загруженных в оперативную память компьютера. Для получения этой информации необходимо выполнить следующую команду:

MEM /CLASSIFY
   или
MEM /C

Данная команда выводит на экран список загруженных в оперативную память драйверов и программ, а также сообщает для каждой программы, сколько памяти она использует. На нашем компьютере команда MEM /C вывела следующий список загруженных модулей:

Modules using memory below 1 MB:
Name           Total       =   Conventional   +   Upper Memory
--------  ----------------   ----------------   ----------------
MSDOS        15933   (16K)      15933   (16K)          0    (0K)
HIMEM         1152    (1K)       1152    (1K)          0    (0K)
EMM386        3120    (3K)       3120    (3K)          0    (0K)
SMARTDRV     30800   (30K)       2480    (2K)      28320   (28K)
COMMAND       2912    (3K)       2912    (3K)          0    (0K)
win386       56672   (55K)      15856   (15K)      40816   (40K)
WIN           2224    (2K)       2224    (2K)          0    (0K)
MOUSE        17088   (17K)      17088   (17K)          0    (0K)
BREQUEST     29392   (29K)      29392   (29K)          0    (0K)
NCMAIN      178192  (174K)     178192  (174K)          0    (0K)
COMMAND       3120    (3K)       3120    (3K)          0    (0K)
SWAKEYB       1040    (1K)          0    (0K)       1040    (1K)
SETVER         816    (1K)          0    (0K)        816    (1K)
STACKER      44992   (44K)          0    (0K)      44992   (44K)
LSL           3808    (4K)          0    (0K)       3808    (4K)
NE2000        3872    (4K)          0    (0K)       3872    (4K)
IPXODI       15968   (16K)          0    (0K)      15968   (16K)
NETX         43744   (43K)          0    (0K)      43744   (43K)
Free        383712  (375K)     383712  (375K)          0    (0K)

В этом списке перечислены имя программы - "Name", общий объем занимаемой ей памяти - "Total", объем занимаемой основной памяти "Conventional" и объем занимаемой верхней памяти - "Upper Memory". В последней строке этого списка показаны размеры свободной памяти компьютера.

После списка загруженных программ, команда MEM выдает общую информацию о оперативной памяти (см. предыдущий раздел):

Memory Summary:
Type of Memory          Total       =       Used        +       Free
----------------  -----------------   -----------------   -----------------
Conventional        655360   (640K)     271648   (265K)     383712   (375K)
Upper               183376   (179K)     183376   (179K)          0     (0K)
Adapter RAM/ROM          0     (0K)          0     (0K)          0     (0K)
Extended (XMS)    15283120 (14925K)   14234544 (13901K)    1048576  (1024K)
----------------  -----------------   -----------------   -----------------
Total memory      16121856 (15744K)   14689568 (14345K)    1432288  (1399K)
Total under 1 MB    838736   (819K)     455024   (444K)     383712   (375K)
Largest executable program size         383696   (375K)
Largest free upper memory block              0     (0K)
MS-DOS is resident in the high memory area.

Как узнать размер памяти, используемый программой

Если вы желаете узнать объем оперативной памяти, который использует конкретная программа, введите следующую команду:

MEM /MODULE modulename
   или
MEM /M modulename

Параметр /MODULE указывает, что вы желаете получить информацию о памяти, используемой программой modulename. Команда MEM /MODULE выдает список областей памяти, используемых программой, адрес и размер каждой области.

Например, введите следующую команду:

MEM /MODULE SMARTDRV

MEM выведет на экран данные о памяти, используемой драйвером SMARTDRV:

SMARTDRV is using the following memory:
Segment  Region       Total        Type
-------  ------  ----------------  --------
 00275               2464    (2K)  Installed Device=SMARTDRV
 0D72E       2      28320   (28K)  Program
                 ----------------
Total Size:         30784   (30K)

2.6. Почему программам не хватает оперативной памяти

Программам, разработанным для MS-DOS, часто не хватает оперативной памяти. Например, вы загрузили резидентные программы русификации видеоадаптера и клавиатуры, установили драйвера дискового кеша, загрузили резидентный калькулятор и базу данных Norton Guide. После загрузки в стандартную память компьютера такого количества драйверов и резидентных программ у вас может остаться свободным всего 400-500 Килобайт стандартной памяти. Многим программам такого объема оперативной памяти будет явно недостаточно.

Конечно, вы можете отказаться от загрузки ряда драйверов и резидентных программ, однако существует более грамотное решение. Если на вашем компьютере установлен MS-DOS версии 5.0 или 6.0, то вы имеете возможность загрузить в область старшей памяти некоторые модули, буфера и рабочие области самой операционной системы. Смотри раздел "Как использовать область старшей памяти (HMA)"

Кроме того, если в компьютере используется процессоры 80386 и 80486, а в некоторых случаях даже 80286, можно поместить в расширенную память некоторые резидентные программы и драйверы. Смотри разделы "Как можно загрузить программы в расширенную память" и "Как использовать пакет UMB_DRVR".

После выполнения этих действий, программ останется уже порядка 600-620 килобайт памяти. Если и теперь вам не хватает нескольких десятков килобайт и на компьютере установлен видеоадаптер EGA или VGA, то отказавшись от использования графических режимов можно отвести часть видеопамяти для загрузки программ. Смотри раздел "Как использовать видеопамять для загрузки программ".

Помимо расширенной памяти, для увеличения доступного DOS-программам пространства оперативной памяти предназначена дополнительная память. Для компьютеров IBM PC/XT с процессорами Intel 8088 и 8086 использовании дополнительной памяти по существу является единственным способом увеличения доступного программам пространства оперативной памяти. При подключении дополнительной памяти в слот расширения вставляется специальная плата памяти и загружается драйвер дополнительной памяти. Драйвер дополнительной памяти будет с помощью аппаратуры платы памяти отображать участки дополнительной памяти в окна, расположенные в блоках верхней памяти. Следует отметить, что непосредственно использовать дополнительную память могут только программы, разработанные с учетом этой возможности.

2.7. Как использовать область старшей памяти (HMA)

Область старшей памяти, представляющая собой первые 64 Кбайта расширенной памяти, может быть использована компьютерами с процессорами 80286, 80386, 80486, Pentium (то есть всеми компьютерами на которых можно установить расширенную память) для переноса в нее модулей ядра операционной системы, ее буферов и рабочих областей. При этом для программ MS-DOS дополнительно освобождается несколько десятков килобайт.

Данная возможность появилась в MS-DOS начиная с версии 5.0. Поэтому если у вас установлена более ранняя версия MS-DOS необходимо заменить ее на версию 5.0 или лучше сразу на версию 6.0.

Для использования области старшей памяти вам надо расположить в файле конфигурации всего две команды:

DEVICE=C:\DOS\HIMEM.SYS
DOS=HIGH

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

Вторая команда настраивает MS-DOS на использование области старшей памяти для хранения модулей ядра операционной системы, ее буферов и рабочих областей.

Отметим, что при размещении в файле CONFIG.SYS данных команд порядок их вызова не важен. Однако желательно подключить драйвер HIMEM.SYS в самом начале файла конфигурации CONFIG.SYS.

Если вы выполнили установку MS-DOS версии 6.0 на компьютере, укомплектованном расширенной памятью, вызовы данных команд будут автоматически включены в формируемый файл CONFIG.SYS.

2.8. Как загрузить программы в расширенную память

В случае, если у вас компьютер с процессорами 80386, 80486 или Pentium, вы легко можете увеличить свободное пространство стандартной оперативной памяти, доступное для программам MS-DOS. Для этого вы можете, используя специальные средства MS-DOS, перенести большинство драйверов и резидентных программ из стандартной памяти в расширенную.

Более того, при использовании MS-DOS версии 6.0 этот перенос и последующая оптимизация использования оперативной памяти могут быть выполнены автоматически с помощью программы MemMaker. Автоматизация переноса драйверов и резидентных программ, из стандартной памяти в расширенную описана в разделе "Что такое MemMaker".

Еще одной возможностью использования расширенной памяти на компьютерах с процессорами 80386 и 80486 является эмуляция дополнительной памяти. Эта возможность неоценима, в случае, если вы работаете с программами, нуждающимися в дополнительной памяти, а у вас на компьютере она не установлена.

Для реализации возможности использования расширенной памяти предназначен драйвер EMM386.EXE, входящий в комплект MS-DOS. Для подключения драйвера EMM386.EXE разместите в файле CONFIG.SYS после команды загрузки драйвера HIMEM.SYS следующую команду:

DEVICE=C:\DOS\EMM386.EXE [параметры]

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

DEVICE=C:\DOS\EMM386.EXE 1024

Если вы не укажите размер эмулируемой дополнительной памяти, будет использовано значение по умолчанию - 256 килобайт.

Для того, чтобы полностью отключить эмуляцию дополнительной памяти, укажите при загрузке драйвера EMM386.EXE параметр NOEMS:

DEVICE=C:\DOS\EMM386.EXE NOEMS

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

Однако, даже если вы подключите драйвер EMM386.EXE, ваши резидентные программы и драйверы не попадут автоматически в расширенную память. Для того, чтобы разместить драйверы и резидентные программы в расширенной памяти, вам необходимо сделать следующее:

Для примера приведем образец файла CONFIG.SYS, в котором подключен драйвер EMM386.EXE:

DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE 1024
DOS=HIGH,UMB
DEVICEHIGH=C:\DOS\HYPER386.EXE
DEVICEHIGH=C:\DOS\ANSI.SYS

Первая команде загружает драйвер HIMEM.SYS, необходимый для управления расширенной памятью. Вторая команда подключает драйвер EMM386.EXE, используемый для эмуляции одного мегабайта дополнительной памяти, а также для загрузки резидентных программ и драйверов в расширенную память. Третья команда указывает, что MS-DOS должен быть загружен в область старшей памяти, и должна быть использована возможность размещения драйверов и резидентных программ в расширенной памяти.

В последних двух командах драйвер дискового кеша - HYPER386.EXE и эмулятора ANSI терминала - драйвер ANSI.SYS, загружаются в расширенную память. Обратите внимание, что для загрузки драйверов в расширенную память используется не команда DEVICE, а команда DEVICEHIGH. Также обратите внимание, что драйвер HIMEM.SYS и драйвер EMM386.SYS загружены в основную память командой DEVICE.

Для загрузки в расширенную память резидентных программ воспользуйтесь командой LOADHIGH или сокращенно LH. Приведем фрагмент файла AUTOEXEC.BAT, в котором выполняется загрузка резидентных программ в расширенную память:

LOADHIGH C:\CYRYLLIC\CYRKEYB C
LH C:\MOUSE.COM

Первая строка демонстрирует загрузку в расширенную память драйвера клавиатуры, вторая - драйвера мыши.

Из-за ограниченного объема книги мы не можем рассказать вам о всех возможностях драйвера EMM386.EXE. Для получения дополнительной информации обратитесь к документации по операционной системе MS-DOS версии 6.0 или Microsoft Windows версии 3.1.

2.9. Как можно использовать расширенную память

Для того, чтобы задействовать всю расширенную память, в новых версиях MS-DOS появились драйверы электронного диска RAMDRIVE.SYS и кэша дисковой памяти SMARTDRV.EXE.

Драйвер электронного диска предназначен для организации быстродействующего электронного диска. Этот диск ведет себя так же, как и обычный, но за счет того, что данные пересылаются в оперативную память, такой диск работает очень быстро. Об организации электронного диска вы можете прочитать в разделах "Что такое электронный диск" и "Как создать электронный диск".

Использование драйвера SMARTDRV.EXE позволяет организовать дисковый кеш, который значительно увеличит производительность дисковой подсистемы компьютера. Вопросы организации дискового кеша рассмотрены в разделах "Что такое дисковый кеш и зачем он нужен" и "Какие существуют программы кеширования диска".

Организация электронного диска и дискового кеша только увеличат производительность компьютера. Объем памяти, доступной программам MS-DOS, не приспособленным для использования расширенной памятью, не увеличится, а даже несколько уменьшится, так как драйвера электронного диска и дискового кеша будут загружены в основную память компьютера.

Операционная система MS-DOS версии 5.0 и 6.0 может использовать расширенную память для освобождения дополнительного пространства в стандартной памяти компьютера.

В начальной части расширенной памяти, размером около 64 килобайт (области старшей памяти) могут располагаться модули, буфера и рабочие области операционной системы. Если в компьютере используется процессоры 80386, 80486 или Pentium, то можно освободить больше стандартной памяти, разместив в расширенной памяти резидентные программы и драйверы. Если у вас компьютер с процессором 80286 и контроллер оперативной памяти поддерживает теневую память, то воспользовавшись специальным программным обеспечением, например драйвером UMB_DRVR, вы (также как на компьютерах с процессорами 80386, 80486) можете использовать расширенную память для размещения резидентных программ и драйверов.

Если резидентные программы и драйверы расположить в блоках верхней памяти, то для программ останется порядка 600-620 килобайт памяти. Это на 100-140 килобайт больше, чем при использовании версий MS-DOS более ранних, чем 5.0.

Особенно интересной представляется возможность эмуляции дополнительной памяти с помощью расширенной. Такая возможность окажется очень полезной в случае, если ваш компьютер оснащен расширенной памятью, но не имеет дополнительной памяти. Если программное обеспечение, используемое вами, предполагает наличие на компьютере дополнительной памяти, то вам нужно либо покупать отдельную плату дополнительной памяти, либо воспользоваться возможностью ее эмуляции с помощью расширенной памяти.

Для выполнения эмуляции дополнительной памяти можно воспользоваться драйверами HIMEM.SYS и EMM386.EXE, входящими в состав MS-DOS.

Однако наиболее полно расширенную память можно использовать только в операционной системе Microsoft Windows. При работе в Windows для программ не делается различий между основной и расширенной памятью компьютера. Windows может использовать для хранения данных как основную, так и расширенную память.

2.10. Как использовать пакет UMB_DRVR

Драйвер UMB_DRVR.SYS версии 5.22 предназначен для использования на компьютерах, контроллер памяти которых обеспечивает режим теневой памяти. При этом драйвер может использовться как на компьютерах с процессорами 80386 и 80486, так и на компьютерах с процессором 80286.

С помощью драйвера UMB_DRVR.SYS MS-DOS версий 5.0 и 6.0 может загружать резидентные программы и драйвера в расширенную память. При этом процессор постоянно остается в реальном режиме.

Интересной особенностью драйвера UMB_DRVR.SYS является то, что он позволяет загружать в расширенную память практически любые драйверы и резидентные программы. Даже драйвер расширенной памяти HIMEM.SYS может быть загружен в расширенную память.

Драйвер UMB_DRVR.SYS распространяется в виде архива, содержащего кроме данного драйвера, драйвер эмуляции дополнительной памяти - umb_ems4.sys и файлы документации. Получить данный архив вы можете на некоторых электронных досках объявлений (BBS).

2.11. Как получить дополнительную память

Если программное обеспечение, используемое вами, предполагает наличие на компьютере дополнительной памяти, то вам нужно либо покупать отдельную плату дополнительной памяти, либо воспользоваться возможностью ее эмуляции с помощью расширенной памяти.

Эмуляцию дополнительной памяти с помощью расширенной можно выполнить при помощи драйвера EMM386.EXE, входящего в состав MS-DOS. Кроме драйвера EMM386.EXE для эмуляции дополнительной памяти можно использовать драйверы из пакета QEMM. Возможности использования пакета QEMM рассмотрены в разделе "Что такое драйвер расширенной памяти QEMM-386". В этом разделе мы рассмотрим только драйвер EMM386.

Для подключения драйвера EMM386.EXE разместите в файле CONFIG.SYS после команды загрузки драйвера HIMEM.SYS следующую команду:

DEVICE=C:\DOS\EMM386.EXE [параметры]

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

DEVICE=C:\DOS\EMM386.EXE 1024

Если вы не укажите размер эмулируемой дополнительной памяти, будет использовано значение по умолчанию - 256 Кбайт.

Для примера приведем образец файла CONFIG.SYS, в котором подключен драйвер EMM386.EXE:

DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE 1024

Первая команда загружает драйвер HIMEM.SYS, необходимый для управления расширенной памятью. Вторая команда подключает драйвер EMM386.EXE, используемый для эмуляции одного мегабайта дополнительной памяти.

Кроме эмуляции дополнительной памяти, драйвер EMM386.EXE может применяться для загрузки резидентных программ и драйверов в расширенную память. Более подробно о использовании EMM386 для загрузки резидентных программ и драйверов в расширенную память можно прочитать в разделах "Как можно загрузить программы в расширенную память".

2.12. Как использовать дополнительную память

Дополнительная память располагается на отдельной плате, вставляемой в слот расширения материнской платы компьютера. Объем различных плат дополнительной памяти достигает 16 или даже 32 мегабайт.

С помощью схемы, расположенной на плате памяти и драйвера, поставляемого вместе с платой, дополнительная память отображается в область памяти, лежащую ниже границы 1024 килобайт, то есть в стандартную память. Для работы с расширенной памятью выделяются четыре окна в области адресов выше границы 640 килобайт, но ниже 1024 килобайт. Общий размер этих окон составляет 64 килобайта.

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

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

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

Об использовании дополнительной памяти при организации электронного диска и дискового кеша читайте в разделах "Как создать электронный диск" и "Как подключить дисковый кэш HyperDisk".

2.13. Что такое MemMaker

Если вы имеете компьютер с процессорами 80386, 80486 или Pentium и он оснащен расширенной памятью, то с помощью программы MemMaker можно увеличить объем стандартной оперативной памяти, доступной для программ. MemMaker анализирует программное обеспечение, установленное на компьютере и изменяет файлы конфигурации CONFIG.SYS и AUTOEXEC.BAT, таким образом, что драйверы и резидентные программы будут загружаться в верхние блоки памяти.

Как использовать MemMaker

Перед запуском программы MemMaker, убедитесь, что в файлах CONFIG.SYS и AUTOEXEC.BAT не выполняется загрузка неиспользуемых резидентных программ и драйверов. Затем завершите выполнение всех программ, в том числе Microsoft Windows.

Запустите программу MEMMAKER.EXE, расположенную в каталоге операционной системы MS-DOS 6.0. На экране появиться приглашающее сообщение. Для продолжения работы MemMaker нажмите клавишу <Enter>, а для возврата в MS-DOS <F3>. При продолжении работы программы MemMaker, вы должны определить режим, в котором будет происходить оптимизация оперативной памяти компьютера. Возможны два режима - "Express Setup" и "Custom Setup". На экране вы увидите строку:

Use Express or Custom Setup? Express Setup

В режиме "Express Setup" оптимизация памяти происходит практически без участия пользователя. Режим "Custom Setup" позволяет произвести более полную оптимизацию, но требует дополнительного задания различных параметров.

Для запуска оптимизации в режиме "Express Setup" нажмите клавишу <Enter>. Для выбора режима "Custom Setup" сначала клавишу пробела, при этом приведенная выше строка изменится следующим образом:

Use Express or Custom Setup? Custom Setup

Теперь нажмите клавишу <Enter>. Использование программы MemMaker в режиме "Custom Setup" позволит вам: вручную выбирать драйверы и программы, которые будут размещены в блоках верхней памяти; использовать адресное пространство, зарезервированное для монохромных режимов видеоадаптеров, для загрузки программ; оптимизировать использование стандартной памяти при работе с Windows; запретить поиск свободных блоков верхней памяти, расположенных по адресам F000-F7FF.

Ниже мы отдельно рассмотрим оба режима оптимизации оперативной памяти. Сначала будет рассмотрен режим "Express Setup", а затем "Custom Setup".

Оптимизация в режиме "Express Setup"

Если вы выбрали режим "Express Setup", то вы должны ответить на вопрос, желаете ли вы запускать программы, использующие дополнительную память:

Do you use any programs that need expanded memory (EMS)? No

Если вы не используете программы, нуждающиеся в дополнительной памяти, нажмите на клавишу <Enter>. Если вашим программам все-же требуется дополнительная память, сначала нажмите клавишу пробела, а затем <Enter>.

Потом на экране дисплея появится сообщение, что MemMaker собирается произвести перезагрузку операционной системы:

  Remove any disks from your floppy-disk drives and
  then press ENTER. Your computer will restart.

Если в дисководе находится дискета, удалите ее и нажмите на клавишу <Enter>. Произойдет перезагрузка системы. После перезагрузки компьютера в течении нескольких секунд MemMaker выполнит необходимые вычисления и снова отобразит сообщение о необходимости произвести перезагрузку. Еще раз нажмите на клавишу <Enter>. MemMaker выполнит вторую перезагрузку операционной системы. После повторной перезагрузки часть драйверов и резидентных программ будет загружена в верхние блоки памяти.

Затем на экране появиться вопрос о том, правильно ли работает ваша система:

Does your system appear to be working properly? Yes

Если при загрузке все драйвера и резидентные программы были загружены правильно, то есть не было выведено сообщений о ошибках при загрузке, нажмите клавишу <Enter>. В противном случае сначала нажмите на клавишу пробела, а затем на <Enter>.

В случае правильной загрузки драйверов и резидентных программ MemMaker выведет итоговую таблицу, в которой показано как изменился объем доступной оперативной памяти (см. рис. 2.1).

Рис. 2.1. Итоговая таблица оптимизации памяти

Если вы удовлетворены результатами оптимизации, нажмите клавишу <Enter> и вы вернетесь в MS-DOS. Если оптимизация не дала ожидаемых результатов, нажмите клавишу <Esc>, при этом все изменения будут удалены.

Оптимизация в режиме "Custom Setup"

После выбора режима "Custom Setup" вы должны ответить на вопрос, желаете ли вы запускать программы, использующие дополнительную память:

Do you use any programs that need expanded memory (EMS)? No

Если вы не используете программы, нуждающиеся в дополнительной памяти, нажмите на клавишу <Enter>. Если вашим программам все-же требуется дополнительная память, сначала нажмите клавишу пробела, а затем <Enter>.

После этого на экране отображается список дополнительных параметров, с помощью которых вы можете подключать и отключать различные возможности оптимизации (см. рис. 2.2).

Рис. 2.2. Дополнительные параметры

Каждая строка параметра на рисунке 2.2 представлена в виде вопроса, напротив которого располагается ответ "Yes" (да) или "No" (нет). С помощью управляющих клавиш клавиатуры вы можете установить курсор на любой вопрос. Если теперь вы нажмете клавишу пробела, то ответ на данный вопрос измениться с "Yes" на "No" и обратно. Рассмотрим теперь каждый вопрос отдельно.

Specify which drivers and TSRs to include in optimization?

Если вы желаете вручную указать драйверы и резидентные программы, которые будут загружаться в верхние блоки памяти, выберите ответ "Yes". Если какой-либо драйвер или резидентная программа неправильно работает при загрузке в верхние блоки памяти, вы можете использовать режим оптимизации "Custom Setup" и исключить данную программу из процесса оптимизации.

Существует другой способ для исключения программ из процесса оптимизации. Для этого вам надо указать имя программы в файле MEMMAKER.INF. Файл MEMMAKER.INF расположен в том же каталоге, что и файл MEMMAKER.EXE.

В случае, если вы предполагаете загрузить все драйверы и резидентные программы в верхнюю память, выберите ответ "No".

Scan the upper memory area aggressively?

После окончания работы, MemMaker размещает в файле CONFIG.SYS вызов драйвера EMM386. При запуске драйвер EMM386 производит в верхней памяти поиск свободных блоков. Если не указано иное, EMM386 производит поиск свободных блоков верхней памяти в области памяти, с сегментными адресами от C600 до F7FF. На некоторых компьютерах поиск свободных блоков по адресам от F000 до F7FF может вызывать неправильную работу компьютера.

Для исключения этого опасного участка верхней памяти из области поиска свободных блоков, на вопрос "Scan the upper memory area aggressively?" выберите ответ "Yes".

Optimize upper memory for use with Windows?

Если вы предполагаете запускать приложения MS-DOS из операционной системы Windows, то выбрав ответ "Yes" на данный вопрос, вы можете увеличить объем доступной этим приложениям стандартной памяти. Однако если вы не будете использовать Windows, объем свободных блоков верхней памяти несколько уменьшится.

Use monochrome region (B000-B7FF) for running programs?

Если на вашем компьютере установлены видеоадаптер EGA или VGA, то вы имеете возможность использовать 32 Кбайта, зарезервированные для монохромных режимов (расположенные по адресам B000-B7FF), как свободный блок верхней памяти. Для этого вам надо выбрать ответ "Yes". Таким образом, отказавшись от использования монохромных режимов, вы сможете дополнительно использовать 32 Кбайта для загрузки драйверов и резидентных программ.

Keep current EMM386 memory exclusions and inclusions?

Если драйвер EMM386 был установлен до запуска программы MemMaker, то вы можете пожелать сохранить параметры I= и X=, определяющие области верхней памяти в которых будет или не будет производится поиск свободных блоков, без изменения. Для этого выберите ответ "Yes". Если вы ответите "No", MemMaker может изменить значение этих параметров.

Move Extended BIOS Data Area from conventional to upper memory?

MemMaker производит перенос расширенной области данных BIOS (Extended BIOS Data Area - EBDA) в верхнюю память. В некоторых случаях это может вызывать ошибки при работе программного обеспечения. Чтобы отменить перенос EBDA в область верхней памяти, выберите ответ "No".

После того, как вы ответили на все вопросы, нажмите на клавишу <Enter>. Если вы указали на необходимость оптимизации для работы с приложениями MS-DOS в среде Windows, то MemMaker осуществляет поиск каталога с файлами Windows. Затем на экране отображается строка редактирования с полным путем каталога Windows. С помощью клавиатуры вы можете изменить путь каталога Windows. После определения расположения каталога Windows, нажмите клавишу <Enter>. MemMaker может произвести некоторые изменения в файлах конфигурации Windows.

Если вы указали, что желаете самостоятельно выбрать какие из драйверов и резидентных программ загружать в верхнюю память, то MemMaker начнет по очереди запрашивать вас о необходимости загрузки всех программ и драйверов, загружаемых в файлах CONFIG.SYS и AUTOEXEC.BAT (см. рис. 2.3).

Рис. 2.3. Выбор программ для загрузки в UMB

Если вы желаете загрузить очередную программу или драйвер в верхние блоки памяти, нажмите клавишу <Enter>. Для отмены загрузки программы в область верхней памяти сначала нажмите клавишу пробела, а затем <Enter>.

После перебора всех программ и драйверов, загружаемых в файлах CONFIG.SYS и AUTOEXEC.BAT (или сразу, если вы не задали режим индивидуального выбора программ) MemMaker выведет сообщение о необходимости произвести перезагрузку MS-DOS.

  Remove any disks from your floppy-disk drives and
  then press ENTER. Your computer will restart.

Если в дисководе находится дискета, удалите ее и нажмите на клавишу <Enter>. Произойдет перезагрузка системы. После перезагрузки компьютера в течении нескольких секунд MemMaker произведет необходимые вычисления и снова отобразит сообщение о необходимости произвести перезагрузку. Еще раз нажмите на клавишу <Enter>. MemMaker выполнит вторую перезагрузку операционной системы. После повторной перезагрузки часть драйверов и резидентных программ будет загружена в верхние блоки памяти.

Затем на экране появиться вопрос о том, правильно ли работает ваша система:

Does your system appear to be working properly? Yes

Если при загрузке все драйвера и резидентные программы были загружены правильно, то есть не было выведено сообщений о ошибках при загрузке, нажмите клавишу <Enter>. В противном случае сначала нажмите на клавишу пробела, а затем на <Enter>.

В случае правильной загрузки драйверов и резидентных программ MemMaker выведет итоговую таблицу, в которой показано, как изменился объем доступной оперативной памяти (см. рис. 2.4).

Рис. 2.4. Итоговая таблица оптимизации памяти

Если вы удовлетворены результатами оптимизации, нажмите клавишу <Enter>. При этом вы веренетесь в MS-DOS. Если оптимизация не дала ожидаемых результатов, нажмите клавишу <Esc>, при этом все изменения будут удалены.

2.14. Как повысить эффективность использования MemMaker

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

Для того, чтобы сначала происходила загрузка драйверов и программ, которые занимают больший объем оперативной памяти, вы должны определить объем памяти, занимаемой каждой программой, а затем переставить команды в файлах CONFIG.SYS и AUTOEXEC.BAT.

Для определения объема оперативной памяти, которую занимает каждый драйвер и резидентная программа, проведите оптимизацию оперативной памяти с помощью программы MemMaker. При этом вы можете запустить MemMaker в режиме "Express Setup". После окончания работы MemMaker, распечатайте или просто просмотрите на экране файл MEMMAKER.STS. Найдите в этом файле раздел [SizeData]. В этом разделе для каждого драйвера и программы, загружаемого в файлах CONFIG.SYS и AUTOEXEC.BAT расположен блок, состоящий из нескольких строк:

Command=C:\DOS\SETVER.EXE
Line=10
FinalSize=832
MaxSize=12048
FinalUpperSizes=0
MaxUpperSizes=0
ProgramType=DEVICE

Просмотрите все блоки и определите драйверы и резидентные программы, имеющие максимальное число (значение) в строке "MaxSize".

Теперь переставьте команды в файлах CONFIG.SYS и AUTOEXEC.BAT так, чтобы в каждом из этих файлов сначала происходила загрузка драйверов и резидентных программ, которые имеют большее значение в строке "MaxSize".

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

Например, при загрузке сети Nowell NetWare 3.11, программы LSL.COM, NE2000.COM, IPXODI.COM и NETX.COM должны вызываться в определенной посследовательности. В файле CONFIG.SYS загрузка драйверов HIMEM.SYS и EMM386.EXE должна происходить в первую очередь. Драйвер HIMEM.SYS

необходимо загрузить перед драйвером EMM386.EXE.

После изменения расположения команд в файлах CONFIG.SYS и AUTOEXEC.BAT проведите повторную оптимизацию оперативной памяти с помощью программы MemMaker. После повторной оптимизации должно освободится больше стандартной памяти.

2.15. Что такое драйвер расширенной памяти QEMM-386

Пакет QEMM-386 версии 6.0 разработан фирмой Quarterdeck. В пакет QEMM-386 входят средства для управления расширенной памятью. Пакет QEMM-386 включает в себя драйвер QEMM386.SYS, который полностью заменяет драйвера EMM386.EXE и HIMEM.SYS.

Вы можете использовать драйвер QEMM386.SYS для управления областью старшей памяти, для загрузки драйверов и резидентных программ в неиспользуемые области верхней памяти и для эмуляции дополнительной памяти с использованием расширенной памяти. Драйвер QEMM386.SYS может переписать содержимое медленной памяти BIOS в область быстродействующей расширенной памяти. В пакет QEMM-386 входят средства, позволяющие использовать видеопамять адаптеров EGA или VGA для расширения объема оперативной памяти доступной DOS-программам.

2.16. Как установить драйвер расширенной памяти QEMM-386

Процедура установки драйвера QEMM-386 полностью описана в пятом томе серии "Библиотека системного программиста", который называется "Тонкая настройка и оптимизация MS-DOS". В этой книге мы рассмотрим основные параметры драйвера QEMM386.SYS и приведем пример его использования.

Для подключения драйвера QEMM386.SYS разместите в файле конфигурации CONFIG.SYS следующую команду:

DEVICE=C:\QEMM\QEMM386.SYS [параметры]

Приведем таблицу самых важных параметров драйвера QEMM386.SYS, описание остальных параметров вы сможете найти в документации на драйвер:

Параметр Назначение
RAM Параметр RAM указывается в тех случаях, когда необходимо выполнить отображение расширенной памяти на свободные участки верхней памяти. Используйте этот параметр, если вы решили переместить драйверы и резидентные программы в расширенную память
ROM Параметр указывает на то, что содержимое BIOS должно быть скопировано в расширенную память. Используется для увеличения скорости выполнения программ, активно использующих BIOS
NOEMS Если задан этот параметр, драйвер QEMM386.SYS не будет выполнять эмуляцию дополнительной памяти. В этом случае освобождается дополнительно 64 килобайта зарезервированной памяти, в которой могут разместиться драйверы и резидентные программы. Укажите этот параметр, если ни одна из используемых вами программ не нуждается в дополнительной памяти

Приведем пример использования средств QEMM-386 для загрузки драйверов и резидентных программ в неиспользуемые области верхней памяти.

Отключите драйвера HIMEM и EMM386. Затем подключите в первой строке файла CONFIG.SYS драйвер QEMM386.SYS:

DEVICE=C:\QEMM\QEMM386.SYS RAM NOEMS

В данном примере драйвер QEMM386.SYS будет использоваться для управления областью старшей памяти (HMA) и для размещения драйверов и резидентных программ в расширенной памяти. Эмуляция дополнительной памяти выполняться не будет.

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

DEVICE=C:\QEMM\LOADHI.SYS C:\DOS\EGA.SYS

Для загрузки в расширенную память резидентных программ используйте программу LOADHI.COM. Для этого расположите ее в файле AUTOEXEC.BAT и укажите ей путь загружаемой резидентной программы и ее параметры:

C:\QEMM\LOADHI MOUSE.COM

2.17. Как использовать видеопамять для загрузки программ

Если на вашем компьютере установлен видеоадаптер EGA, VGA или SVGA, то с помощью специальных программных средств вы можете использовать часть видеопамяти для увеличения объема доступного программам пространства оперативной памяти.

К таким средствам относится резидентная программа VIDRAM.COM, входящая в состав пакета QEMM-386. Если вам не нужны графические режимы видеоадаптера, то загрузив VIDRAM.COM вы сможете увеличить доступное для программ пространство оперативной памяти на 96 килобайт.

После запуска VIDRAM.COM вы можете ее легко подключать или отключать. Для отключения VIDRAM.COM (например, перед запуском графических программ) введите команду:

VIDRAM OFF

Когда вам опять потребуются расширить доступное для программ пространство памяти, введите команду:

VIDRAM ON