По умолчанию администратор этапа выполнения использует при
загрузке всю доступную память. Затем по запросам он выделяет па-
мять своим клиентам (через подпрограммы API администратора памя-
ти).
В защищенном режиме нет разницы между обычной памятью (ниже
1 мегабайта) и расширенной памятью (с адресами выше 1 мегабайта);
для программ защищенного режима доступны оба типа памяти. Однако
администратор этапа выполнение отдает предпочтение расширенной
памяти. Только после того как вся расширенная память будет выде-
лена, или когда прикладная программа специально запрашивает
обычную память (например, с помощью функции GlobalDosAlloc), ад-
министратор этапа выполнения выделяет обычную память.
Причина, по которой администратор этапа выполнения предпочи-
тает расширенную память, заключается в том, что прикладная прог-
рамма может с помощью вызова подпрограммы Exec в модуле Dos по-
рождать другие прикладные программы. Порожденные прикладные прог-
раммы не обязательно являются программами защищенного режима; та-
ким образом, им может потребоваться обычная память. Фактически,
порожденные программы защищенного режима запускаются как програм-
мы реального режима и переключаются в защищенный режим только
после успешной загрузки фиктивным модулем средств DPMI и адми-
нистратора этапа выполнения.
Администратор этапа выполнения перед порождением прикладной
программы пытается освободить максимальный объем обычной памяти
(например, перенеся перемещаемые блоки в расширенную память). Од-
нако попытки освобождения расширенной памяти не предпринимаются.
Таким образом, если должны порождаться прикладные программы защи-
щенного режима, не использующие администратор этапа выполнения,
то необходим споcоб управления распределением памяти администра-
тором этапа выполнения.
Чтобы управлять тем, сколько памяти может использовать адми-
нистратор этапа выполнения, в командной строке DOS добавьте к
строке операционной среды DOS переменную среды RTM:
SET RTM={параметр nnnn}
Возможные параметры перечислены в следующей таблице. Значе-
ние nnnn может быть десятичным или шестнадцатиричным числом в ви-
де xAB54 или xab54.
B.Pascal 7 & Objects/LR - 296 -
Параметры переменной операционной
среды RTM, используемые для управления памятью Таблица 17.7
┌────────────────────┬──────────────────────────────────────────┐
│ Параметр │ Описание │
├────────────────────┼──────────────────────────────────────────┤
│ EXTLEAVE nnnn │ Всегда оставляет не менее nnnn килобайт│
│ │ доступной расширенной памяти. По умолча-│
│ │ нию это значение равно 640К. │
├────────────────────┼──────────────────────────────────────────┤
│ EXTMAX nnnn │ Не выделяет более nnnn килобайт расширен-│
│ │ ной памяти. По умолчанию используется│
│ │ значение 4 гигабайта. В Windows использу-│
│ │ емое по умолчанию значение равно половине│
│ │ доступной памяти. │
├────────────────────┼──────────────────────────────────────────┤
│ EXTMIN nnnn │ Если после применения EXTMAX или EXTLEAVE│
│ │ доступно менее nnnn килобайт, то програм-│
│ │ ма завершается с сообщением о нехватке│
│ │ памяти (Out of memory). По умолчанию это│
│ │ значение равно 0. │
├────────────────────┼──────────────────────────────────────────┤
│ REALLEAVE nnnn │ Всегда оставляет не менее nnnn параграфов│
│ │ доступной реальной памяти. По умолчанию│
│ │ это значение равно 64К или 4096 парагра-│
│ │ фов. │
├────────────────────┼──────────────────────────────────────────┤
│ REALMAX nnnn │ Не выделяет более nnnn параграфов реаль-│
│ │ ной памяти. По умолчанию это значение│
│ │ равно 1 мегабайту или 65535 параграфов. │
├────────────────────┼──────────────────────────────────────────┤
│ REALMIN nnnn │ Если после применения REALMAX и REALLEAVE│
│ │ доступно менее nnnn параграфов, то прог-│
│ │ рамма завершается с сообщением о нехватке│
│ │ памяти (Out of memory). По умолчанию это│
│ │ значение равно 0. │
└────────────────────┴──────────────────────────────────────────┘
Следующая команда DOS ограничивает RTM 2 мегабайтами расши-
ренной памяти и обеспечивает, что нераспределенными останутся
128К реальной памяти.
SET RTM=EXTMAX 2048 REALLEAVE 8192