Глава 39. Использование оперативной памяти в DOS Загрузка DOS в НМА
Диспетчеры памяти Оптимизация
использования
памяти личные настройки компьютера для разных режимов работы и перезагружая компьютер
для перехода от одного режима к другому (как это делается, описано в и. 40.14). Но
это не так уж удобно, да и слишком сложно для большинства пользователей. Первые признаки улучшения ситуации появились, когда различные независимые раз-
работчики научились перемещать (с помощью специальных драйверов) часть кода DOS
в первые 64 Кбайта расширенной памяти. Это позволило освобождать 30-40 Кбайт
обычной памяти на компьютерах с процессором Intel-80286 или старше. А с появлением микропроцессора Intel-80386 данную проблему стало возможно решит!.
кардинально. Этот микропроцессор оснащен средствами управления оперативной па-
мятью, с помощью которых можно назначить любому блоку физической памяти нуж-
ный логический адрес. Тем самым оказалось возможным как бы поместить блоки опе-
ративной памяти в адреса, не используемые BIOS и контроллерами, то есть в
"пустоты" между участками памяти, занятыми BIOS и контроллерами. Естественно,
при этом количество расширенной памяти компьютера несколько уменьшалось (ведь
общее количество физической памяти в компьютере от переназначения адресов не
изменилось), но расширенная память Ч это значительно менее дефицитный ресурс. Различные фирмы (Quarterdesk, Qualitas и др.) разработали так называемые диспет-
черы памяти (QEMM и 386МАХ), которые реализовывали эту возможность, позволяя
помещать блоки оперативной памяти в адреса верхней памяти и загружать драйверы и
резидентные программы в эти блоки верхней памяти. В 1990 г. соответствующая воз-
можность была включена и в DR DOS 5.0 фирмы Digital Research, что стало угрожать
позициям фирмы Microsoft на рынке DOS. Поэтому фирма Microsoft напряглась и в
1991 г. выпустила MS DOS 5.0, в которую были включены аналогичные возможности:
драйвер EMM386, обеспечивающий доступ к верхней памяти и команды DeviceHigh и
LoadHigh, выполняющие загрузку драйверов и программ в верхнюю память. Кроме
того, MS DOS 5.0 поддерживала и перемещение ядра DOS в первые 64 Кбайта расши-
ренной памяти. Итак, с помощью диспетчеров памяти EMM386 из MS DOS, QEMM, 386МАХ и др.
стало возможным загружать драйверы и резидентные программы не в обычную, а в
верхнюю память, тем самым освобождая столь драгоценную обычную память для при-
кладных программ. При этом значительно увеличился и общий объем памяти, который
мог отводиться для драйверов и резидентных программ: ведь типичный объем свобод-
ных участков верхней памяти составляет от 100 до 200 Кбайт (на разных компьютерах
Ч по разному). Однако проблема наилучшего использования верхней памяти оказалась не такой-то
простой. Ведь доступная для размещения программ и драйверов верхняя память не
представляет собой один непрерывный кусок, а состоит из нескольких фрагментов
(обычно называемых регионами), расположенных в "дырах" между адресами памяти,
используемыми BIOS и контроллерами. Поэтому для наилучшего использования верх-
ней памяти необходимо для каждой резидентной программы или драйвера решить, в
какой регион верхней памяти лучше ее поместить (или, может быть, оставить в обыч-
ной памяти). Это совсем не простая комбинаторная задача, и часто здесь приходится
рассматривать десятки вариантов в поисках наилучшего. Ясно, что возлагать на пользователя заботу об эффективном использовании верхней
памяти было бы неправильно. Пользователь должен решать свои проблемы, а не ком-
бинаторные задачи по наилучшей укладке программ и драйверов в регионы верхней
памяти. Тем более что при любом изменении конфигурации компьютера (добавлении
нового контроллера, изменении версии драйвера и т.д.) эту задачу надо решать заново.
Поэтому для решения этой задачи были созданы специальные программы Ч оптими-
заторы использования памяти. Эти программы впервые появились в диспетчерах
памяти независимых разработчиков (Optimize в диспетчере QEMM фирмы
Quarterdesk, Maximize в диспетчере 386МАХ фирмы Qualitas и т.д.). В MS DOS 6.0
также был включен оптимизатор MemMaker, который рассматривается главе 41. Оп-
тимизаторы выявляют потребности используемых драйверов и резидентных программ в
оперативной памяти, определяют, как наилучшим образом можно разместить эти про-
граммы и драйверы в регионах верхней памяти и вносят все необходимые изменения в
файлы конфигурации DOS Ч CONFIG.SYS и AUTOEXEC.BAT. Этот процесс требует
минимальных усилий от пользователя и выполняется за пару минут.
Часть 7. DOS для опытного пользователя [Т] 39.6' I fr'' !)'^.Х'^""-"-<>."{. ^ уl\Х1Mf^f.^^ Il4<,' ,//- ii .1 li-U.'
:t) И":Х1(^l". i'Ч^^^ll.ХХ^" Для получения суммарных данных об использовании оперативной памяти можно вве-
сти команду MEM. На экран будет выдана следующая таблица: Размеры различных
видов памяти Размеры свободных
блоков памяти Использование НМА Если имеется
EMS-память Memory Type Conventional
Upper
Reserved
Extended (XMS) Total memory
Total under 1 MB Total 40K 600K
143K OK
384K OK
173K 64 196K
740K 64 796K
182K 600K
600K OK (614 688 (0 bytes) bytes)
Хmo ry area. 640K
143K
384K 64 369K 65 536K
783K Largest executable program size
Largest free upper memory block
MS-DOS is resident in the high memory Здесь для каждого типа памяти (Conventional Ч обычная память, Upper Ч верхняя
память. Reserved Ч зарезервированная память, то есть память, занятая для специаль-
ных целей, скажем, создания теневого BIOS, то есть копии BIOS в оперативной памя-
ти, Extended (XMS) Ч расширенная память) приводится общий размер данного типа
памяти (столбец Total), размер использованной памяти (столбец Used) и размер сво-
бодной, то есть незанятой памяти данного типа (столбец Free). Ниже в строке Total
memory данные сведения приводятся для всех видов памяти в сумме, а в строке Total
under I MB Ч суммарные данные для обычной и верхней памяти. После этого программа МЕН приводит наибольший размер программы, который может
поместиться в обычную память, то есть размер наибольшего непрерывного блока
обычной памяти (строка Largest executable program size), и размер наибольшего не-
прерывного блока верхней памяти (строка Largest free upper memory block). Если модули DOS загружены в первые 64 Кбайта расширенной памяти (НМА) с по-
мощью команды файла CONFIG.SYS DOS=HIGH), то в конце выдачи сообщается об этом:
MS-DOS is resident in the high memory area (MS DOS находится в НМА). Если драй-
вер расширенной памяти запущен, и первые 64 Кбайта расширенной памяти свободны,
то выдается другое сообщение: The high memory area is available (НМА свободна). Если драйвер EMM386 эмулирует EMS-память, то после надписи Extended (XMS)
будет выведена звездочка Ч символ примечания. А само примечание будет приведено
чуть ниже: EMM386 Is using XMS memory to simulate EMS memory as needed.
Free EMS memory may change as free XMS memory changes.
(EMM386 использует расширенную память для имитации EMS-памяти
при наличии потребности в ней. Размер свободной EMS-памяти может изменяться
при изменении количества свободной расширенной памяти). А еще до этого в выдаче будут сообщены общий размер EMS-памяти (Total Expanded)
и размер свободной EMS-памяти (Free Expanded)'. Total Expanded (EMS)
Free Expanded (EMS)* 32 064 (32 833 536 bytes)
31 376 (32 129 024 bytes) " ) Г Х/1"," 11'
1-1(^101If Х.iUII^ХH Hi.'
/ 1НМЯ 1И ! lpOl /.)- 'MM:МИ Чтобы узнать, какие программы и драйверы находятся в памяти и сколько памяти они
занимают, введите команду MEM /С /Р . Здесь режим /С указывает желаемый тип
выдачи, а режим /Р заставит программу Mem делать паузы при заполнении экрана
(для продолжения выдачи надо будет нажать любую алфавитно-цифровую клавишу).
Вот фрагмент выдачи программы Mem в этом режиме (для экономии места часть строк
заменена строкой с многоточием): Глава 39. Использование оперативной памяти в DOS Modules using memory below 1 MB:
Name Total Conventional Upper Memory SYSTEM 33 264 (32K) 9 632 (9K) 23 632 (23K)
HIMEM 1 168 (1K) 1 168 (1K) 0 (OK)
EMM386 4 320 (4K) 4 320 (4K) 0 (OK)
DBLBUFF 2 448 (2K) 2 448 (2K) 0 (OK)
ASPIDISK 9 472 (9K) 9 472 (9K) 0 (OK)
SETVER 832 (1K) 0 (OK) 832 (1K)
KEYB 6 944 (7K) 0 (OK) 6 944 (7K)
Free 614 704 (600K) 614 704 (600K) 0 (OK) C)l4f;1 О СИПООДНОИ
пцмч1И Здесь в столбце Name приводится имя программы или драйвера (исключения: System
означает память DOS, a Free Ч свободную память). В столбце Total сообщается об-
щее количество занятой программой (драйвером, DOS и т.д.) памяти, а в столбцах
Conventional и Upper Memory уточняется, сколько из этого количества памяти со-
ставляет обычная память {conventional) и сколько верхняя память (upper). Вслед за приведенной таблицей приводятся суммарные данные об использовании па-
мяти (см. пункт "Суммарные данные об использовании памяти" выше). 3, iMi'i. iiinr Для подробного изучения можно вывести данный отчет в файл. Например,
команда MEM /С > MEM.LST помещает выдаваемый программой MEM отчет в файл MEM.LST. Если Вы хотите узнать более подробные, чем в сводном отчете, сведения о свободных
участках оперативной памяти, введите команду MEM /F . Программа выдает отчет о
блоках свободной памяти. Сначала приводятся данные о блоках свободной обычной
памяти (Free Conventional Memory): Free Conventional Memory:
Segment Total Свободные блоки
обычной памяти OOB9F
0142D
01436
029FO 80 (OK)
144 (OK)
88 992 (87K)
482 544 (471K) Total Free: 571 760 (558K) Здесь сначала приводятся данные о блоках свободной обычной памяти (Free Conven-
tional Memory). Для каждого блока указывается сегментный адрес начала блока (в
шестнадцатеричном виде, столбец Segment) и размер блока (столбец Total). В строке
Total Free приводится общее количество свободной обычной памяти. 3.:1М<"чяпис. Приводимые сведения не вполне корректны, так как программа выводит све-
дения о блоках, занятых самой программой MEM, как о свободных, но не объединяет их эти
блоки с блоком оставшейся свободной памяти. Это может ввести пользователя в заблужде-
ние: вместо одного большого свободного блока памяти он увидит три блока поменьше. Так,
приведенный выше отчет о блоках свободной обычной памяти правильнее выглядел бы так: Segment Total
OOB9F
0142D 80
571680 (OK.)
(558K) Свободные блоки Ниже приводится отчет о блоках свободной верхней памяти (Free Upper Memory):
верхней памяти pree Upper Memory:
Region Largest Free Total Free Total Size 41 488
65 520 (41 К)
(64K) 41 488
65 520 (41 K)
(64K) 76 624
65 520 (75K)
(64K) Подробные сведения
Для каждого региона (непрерывного блока) верхней памяти приводится номер региона
(столбец Region), максимальный размер свободного непрерывного участка памяти в
этом регионе верхней памяти (столбец Largest Free), общее количество свободной
памяти в регионе (столбец Total Free) и размер всего этого региона верхней памяти
(столбец Total Size). Чтобы вывести наиболее подробные сведения о блоках памяти, занятых DOS, про-
граммами и драйверами, следует ввести команду MEM /D /Р . Здесь режим /D указы-
вает желаемый тип выдачи, а режим /Р заставит программу Mem делать паузы при
заполнении экрана (для продолжения выдачи надо будет нажать любую алфавитно-
цифровую клавишу). Часть 7. DOS для опытного пользователя Блоки
обычной памяти В выдаваемом программой отчете сначала приводятся данные о блоках обычной памяти
(Conventional Memory Details), ниже Ч о блоках верхней памяти (Upper Memory
Details). Для экономии места часть строк заменена строкой с многоточием: Conventional Memory Detaij:
Segment Total Name Type 00000 1 039 (1K) Interrupt Vector
00040 271 (OK) ROM Communication Area
00050 527 (1K) DOS Communication Area
00070 2 864 (3K) 10 System Data
CON System Device Driver
AUX System Device Driver
COM3 System Device Driver
COM4 System Device Driver
00123 5 536 (5K) MSDOS System Data
0027D 34 672 (34K) 10 System Data
1 152 (1K) XMSXXXXO Installed Device=HIMEM
3 104 (3K) EMMOXXXO Installed Device^EMM386
13 184 (13K) SCSIMGR$ Installed Device^ASPIBMV
896 (1K) FILES=20
256 (OK) FCBS=4
10 640 (10K) BUFFERS=20
2 288 (2K) LASTDRIVE=Z
3 008 (3K) STACKS', 256
OOAF4 80 (OK) MSDOS System Program
OOAF9 2 656 (3K) COMMAND P rog ram
OOB9F 80 (OK) MSDOS -- Free -
OOBA4 272 (OK) COMMAND Environment
00В В 5 144 (OK) MEM Environment
OOBBE 11 408 (11K) KEYRUS P год ram
OOE87 88 992 (87K) MEM Program
02441 505 824 (494K) MSDOS -- Free Ч
Upper Memory Detail:
Segment. Region Total Name Type
OC94A 1 35 120 (34K) 10 System Data
35 088 (34K) DBLSYSH$ installed Device=-DRVSPACE
OD1DD 1 -144 (OK) MOUSE Environment
OD1E6 1 14 464 (14K) MOUSE Program
OD56E 1 26 912 (26K) MSDOS -- Free -- Имена программ и
драйверов Виды блоков памяти Блоки памяти
программы Здесь для каждого блока памяти указывается сегментный адрес начала блока (в шест-
надцатеричном виде, столбец Segment), размер блока (столбец Total), имя программы
или опознавательное обозначение драйвера, которым принадлежит блок памяти
(столбец Name), и назначение блока (столбец Type). Для блоков верхней памяти со-
общается также номер региона верхней памяти (столбец Region). В столбце Name обозначения драйверов приводятся с отступом, чтобы их нельзя было
спутать с именами программ. Для свободных блоков памяти (-- Free -- в столбце
Type) в столбце Name (имя программы Ч хозяина блока) приводится MSDOS. В столбце Type назначение блоков может быть следующим: Interrupt Vector Ч табли-
ца векторов прерываний, ROM Communication Area Ч область параметров, исполь-
зуемая BIOS, DOS Communication Area Ч область параметров, используемая DOS,
System Data Ч системные данные MS DOS, System Device Driver Ч встроенный в
DOS драйвер, Installed Device Ч драйвер, установленный с помощью команды DEVICE
или DEVICEHIGH файла CONFIG.SYS, FILES=..., FCBS=..., BUFFERS=..., LAST-
DRIVE^..., STACKS=... Ч области, в которых хранятся данные, соответствующие
указанным командам файла CONFIG.SYS, Program Ч программа, Environment Ч
переменные окружения программы, -- Free Ч Ч свободный блок памяти. Ниже приводится сводная информация об использовании памяти, в которую дополни-
тельно включаются сведения о количестве памяти сверх 1 Мбайта, не занятой драйве-
ром расширенной памяти (Memory accessible using Int 15h), а также о поддерживаемых
версиях стандартов EMS-памяти (EMS version) и расширенной памяти (XMS version),
а также о версиях обеспечивающих эти виды памяти драйверов. Замечание. Для подробного изучения можно вывести данный отчет в файл. Например,
команда MEM /С > MEM. LST помещает выдаваемый программой MEM отчет в файл НЕМ. LST. Для того чтобы вывести сведения только о блоках памяти, принадлежащих резидент-
ной программе или драйверу, введите команду MEM /М имя-программы-или-драйвера .
Например, MEM /М MOUSE выведет данные по программе или драйверу MOUSE.
Часть 8 Настройка
конфигурации DOS В этой части мы расскажем о настройке конфигурации DOS. В главе 40
описывается как процесс настройки конфигурации на новом компьютере,
так и внесение в нее изменений. Подробно рассматривается русификация
компьютера, кэширование дисков, использование памяти. Затем даются
рекомендации по написанию файлов конфигурации CONFIG.SYS и
AUTOEXEC.BAT. В конце главы рассказывается о том, как использовать
диалоговые файлы конфигурации и как приспособить их для выполнения 1'
периодических работ на компьютере (например, для проверки дисков). В главе 41 описывается применение программы MemMaker, с помощью
которой можно оптимизировать файлы конфигурации CONFIG.SYS и
AUTOEXEC.BAT так, чтобы высвободить большее количество оперативной
памяти для прикладных программ. ХОГЛАВЛЕНИЕ ЭТОЙ ЧАСТИ Глава 40. Настройка конфигурации DOS ................................................. 440
|