Если на компьютере с микропроцессором 80286 или выше имеются области памяти с адресами выше 1024-1088 Кбайт и выше 1088 Кбайт, то их можно использовать соответственно как высокую и дополнительную память. Это позволяет драйвер MS-DOS HIMEM.SYS. Если же микропроцессор компьютера 80386 и выше, то драйвер MS-DOS EMM386.EXE позволит использовать блоки верхней памяти, а также конфигурировать часть дополнительной памяти как расширенную.
HIMEM.SYS
Драйвер HIMEM.SYS обеспечивает стандарт XMS 3.0 для доступа к дополнительной памяти и области высокой памяти на компьютерах с микропроцессором 80286 и выше. Чтобы установить драйвер HIMEM.SYS, обычно достаточно команды CONFIG.SYS вида DEVICE = C:\DOS\ HIMEM.SYS. Без параметра /V HIMEM.SYS не будет отображать стандартное сообщение. Параметр /TESTMEM: OFF отключает тестирование дополнительной памяти. Если HIMEM.SYS не может правильно определить тип компьютера, то необходимо указать правильное значение для параметра /MACHINE: xxxx. На компьютерах с 32 разрядной шиной и объёмом памяти более 16 Мбайт следует устанавливать HIMEM.SYS с параметром /EISA. По умолчанию HIMEM.SYS использует дополнительную память не выше адреса 16.384 Кбайт. Если при установке HIMEM.SYS изменяется скорость хода системных часов; следует обратиться к параметру /CPUCLOCK: ON. Этот параметр может восстановить нормальную работу часов, но при его использовании замедляется обращение к дополнительной памяти. При помощи параметра /HMAMIN = m можно указать минимальное количество требуемой памяти, при котором программе будет предоставляться область ИМА. m может приписывать значения от 0 до 63 Кбайт. По умолчанию m = 0. Параметр /NUMHANDLES = n определяет максимальное количество одновременно используемых обработчиков блоков дополнительной памяти. Возможны значения 1-128. По умолчанию используется значение 32.
EMM386.EXE
Драйвер EMM38.EXE – это диспетчер расширенной памяти, который можно использовать на компьютерах с микропроцессорами 80386 и выше. Драйвер EMM368.EXE выполняет две основные функции:
1) использует память XMS, поставляемую драйвером HIMEM.SYS для эмуляции расширенной памяти.
2) обеспечивает программам DOS доступ к части верхней памяти.
Чтобы загрузить драйвер EMM386.EXE достаточно поместить в CONFIG.SYS команды вида: DEVICE = C:\DOS\ HIMEM.SYS. DEVICE = C:\DOS\ EMM386.EXE. Установка параметра ON активизирует драйвер EMM386.EXE сразу после его загрузки. Параметр OFF приостанавливает работу драйвера. Если драйвер загружен с параметром AUTO, то он будет активизирован, когда в этом появится необходимость, например, когда какой-либо программе потребуется UMB или EMS. По устанавливается параметр ON. EMM386.EXE позволяет указать максимальное и минимальное количество памяти, которая может быть отведена для поддержки EMS. По умолчанию минимум – 256 Кбайт, максимальное количество соответствует объёму XMS памяти в системе. Для указания минимального значения используется параметр MIN = размер. Например, чтобы инструктировать EMM386.EXE использовать от 0.5 до 8 Мбайт расширенной памяти, команда загрузки EMM386.EXE должна выглядеть так: DEVICE = C:\DOS\ EMM386.EXE 8192 MIN = 512. Существует и другой способ ограничения максимального объема EMS – памяти – указание минимального объема XMS – памяти, который обязательно должен остаться. Это делается указанием параметра L = минимум XMS, где минимум XMS – значение в килобайтах, по умолчанию = 0.
Эмуляцию расширенной памяти можно и запретить. Параметр NOEMS запрещает доступ к EMS – памяти. Обычно часть кода EMM386.EXE загружается в верхнюю память. Параметр NOHI запрещает использование CIMB драйвером EMM386.EXE. Кроме того EMM386.EXE по умолчанию использует верхнюю память для копии данных BIOS, находящихся в базовой памяти. Этому можно воспрепятствовать при помощи параметра NO MOVE X BDA.
Если используются HIMEM.SYS и EMM386.EXE, то можно загружать резидентные программы и драйверы устройств в верхнюю область памяти, освобождая стандартную память. Для загрузки драйверов устройств в верхнюю память из CONFIG.SYS используется команда DEVICEHIGH, для загрузки резидентных программ в верхнюю память из командной строки или A TOEXEC.BAT – команда LOADHIGH.
ОПТИМИЗАЦИЯ ИСПОЛЬЗОВАНИЯ ПАМЯТИ.
По умолчанию код ядра MS-DOS располагается в базовой оперативной памяти, занимая там более 60 К байт. Загрузить большую часть ядра MS-DOS в область высокой памяти можно, включив в CONFIG.SYS команду DOS = HIGH. Для этого должен быть загружен драйвер HIMEM.SYS. Части MS-DOS, которые загружаются в HMA, включают большую часть ядра HS-DOS, буферов MS-DOS, а также поддержки национальных кодовых страниц. Для совместимости с программным обеспечением, созданным для более ранних версий MS-DOS, приблизительно 19 Кбайт кода DOS остается в стандартной памяти. Значение команды DOS = LOW соответствует размещению всего ядра MS-DOS в базовой памяти и является значением по умолчанию. В HMA можно загружать не только MS-DOS. В области высокой памяти можно установить, например, сетевой драйвер, но одновременно в HMA может находиться только одна программа.
СОЗДАНИЕ БЛОКОВ ВЕРХНЕЙ ПАМЯТИ.
По умолчанию MS-DOS никак не использует область UMA. Для того, чтобы MS-DOS использовала блоки верхней памяти, должна быть выполнена команда CONFIG.SYS DOS = UMB. Для того, чтобы эта команда выполнилась, должен быть загружен драйвер, поддерживающий доступ к UMB.
Драйвером UMB, поставляемым с MS-DOS, является EMM386.EXE, который работает только с микропроцессором 80386 и выше. Значение команды DOS = NOUMB означает, что программы MS-DOS не будут иметь доступа к UMB, и является значением по умолчанию.
КОМАНДЫ LOADHIGH и DEVICEHIGH.
Команду DEVICEHIGH можно использовать для загрузки устанавливаемых драйверов из файла CONFIG.SYS. Если при этом имеется свободный блок верхней памяти подходящего размера, то драйвер будет загружен в него, а не в базовую память.
Команда LOADHIGH (LH) используется в файле AUTOEXEC.BAT и служит для загрузки резидентных программ и драйверов в памяти по возможности в блоки верхней памяти. Определим оптимальный порядок загрузки резидентных программ и драйверов устройств в блоки UBM. Если при загрузки обычным способом драйверов из CONFIG.SYS и резидентных программ из AUTOEXEC.BAT команда MEM показывает, что для программ MS-DOS доступен не достаточный объём базовой памяти, то необходимо командой DEVICE = C:/DOS/EMM386.EXE NOEMS создать блоки UMB не расходуя верхнюю память на страничный блок доступа к EMS-памяти и занести в CONFIG.SYS команду DOS = HIGH, UMB. Благодаря отказу от поддержки EMS можно загрузить в верхнюю память практически все резидентные программы и драйверы устройств. Может возникнуть ситуация, когда резидентные программы или драйвер не сиожет быть загружен в верхнюю память несмотря на то, что размер, занимаемый им в памяти меньше свободного блока в UMB, т.к. свободный блок должен быть несколько большего размера, чем объём памяти, который будет занят. Обычно требуется объём блока верхней памяти, превышающий размер исполняемого модуля загружаемой программы.
Команды DEVICEHIGH и LOADHIGH загружают каждый драйвер и резидент в самую большую область UMB. Поэтому команды, загружающие драйверы и резидентные программы, должны выполняться в порядке убывания их размера в оперативной памяти. Однако надо учитывать, что драйвер SMART Drive одновременно использует верхнюю и базовую память.
В целях оптимизации использования памяти можно использовать следующие параметры: [/L: область1[, minразмер1][; область2,[minразмер2]][/S]
/L – загружает драйверы и резиденты в конкретную область памяти, либо указывает какие области памяти могут быть использованы (/L:2;3). Значение “minразмер” означает объём памяти, который использует программа. Параметр /S сжимает соответствующий блок UMB до минимального размера, что обеспечивает наиболее эффективное использование памяти. Для упрощения и ускорения процесса оптимизации памяти в MS-DOS включена программа MemMarker, автоматически подбирающее наилучшее значение параметров команд DEVICEHIGH и LH.
SMARTDRIVE. Драйвер создаёт дисковый кэш в дополнительной памяти компьютера. Начиная с версии 4.0 SMART Drive является используемой программой SMARTDRV.EXE, до этого был SYS-драйвером. При использовании наиболее распространённой методики кэширования программа пытается считать дисковые данные в кэш-буфер до того, как они потребуются микропроцессору, - так называемое упреждающее чтение. В кэше сохраняются те данные, которые чаще востребуются микропроцессором. Кэш-программа перехватывает инструкции на чтение диска. Если в кэше содержится информация из требуемого участка диска, то микропроцессор получает её не с диска, а с кэша. В среднем это существенно ускоряет общую реакцию диска. Область памяти, которая конфигурируется под кэш, делится на целое количество ячеек фиксированного размера. Именно такими порциями дисковые данные пересылаются в кэш и из кэша. От размера ячеек зависит продуктивность работы программы кэширования при различных дисковых операциях. Некоторые утилиты кэширования обеспечивают более высокую производительность за счет применения улучшенных методик, в первую очередь – метода отложенной записи. При кэшировании записи программа кэширования перехватывает инструкции на запись данных, помещает информацию, которая должна быть записана, в кэш и оповещает систему о том, что запись произведена. На самом деле запись происходит несколькими секундами позже. Таким образом, записываемые данные помещаются в кэш, что делает процедуру записи почти незаметной. По умолчанию SMART Drive загружается в верхнюю память. Однако, это может привести к несовместимости с некоторыми контроллерами жесткого диска. В этом случае можно применить метод двойной буферизации, при котором читающий буфер располагается в базовой памяти. Для этого перед запуском SMART Drive следует загрузить SMARTDRV.EXE как драйвер из CONFIG.SYS с параметром /DOUBLE_BUFFER. Иногда это сильно замедляет кэширование. Тогда можно выйти из положения загружая SMART Drive с параметром /L, препятствующим размещению программы в верхней памяти. Параметр /E: размер_ячейки указывает размер ячейки в байтах. По умолчанию – 8192. Параметр /B: упреждающий_буфер определяет размер упреждающего буфера, который по умолчанию равен 16.384 байт. Размер кэша также можно указать параметром. По умолчанию этот параметр примет значение в зависимости от объёма дополнительной памяти.