Bay Area Rapid Transit
- 1 year ago
- 0
- 0
Upper Memory Area ( UMA ), Upper Memory Blocks ( UMB ), неформально верхняя память — 384 килобайта памяти , расположенные после основной памяти по адресам от А0000 16 (640 Кб) до FFFFF 16 (1024 Кбайт, 1 Мбайт). Особенность IBM PC-совместимых архитектур .
IBM зарезервировала верхнюю область памяти своего компьютера IBM PC для ПЗУ материнской платы и дополнительных устройств и ОЗУ , а также портов ввода-вывода, адресуемых как память (Memory-Mapped Input/Output). Эта область памяти называется UMA и находится между адресами A0000 16 (640 Кбайт) и FFFFF 16 (1 Мбайт).
Например, в этой области памяти находятся ОЗУ и ПЗУ EGA -совместимого видеоадаптера и окно отображения расширенной памяти .
Верхняя память условно разделена на три области по 128 Кбайт. Стандартное распределение верхней памяти выглядит таким образом:
В реальной системе не вся зарезервированная область памяти (UMA) оказывается распределена. Компьютеры с процессором 80386 и выше способны отображать дополнительную память на свободные участки UMA. Таким образом формируются блоки верхней памяти (Upper Memory Block, UMB), которые могут отдаваться под контроль ОС и распределяться между приложениями.
MS-DOS 5.0 и выше поддерживает управление UMB. Для этого в её состав входят драйверы
HIMEM.SYS
и EMM386.EXE (с помощью которых в
режиме виртуального 8086
на UMA отображается дополнительная память) и команды
dos=umb
,
devicehigh
и
loadhigh
. Чтобы отобразить дополнительную память на UMA и активировать функции управления UMB, надо добавить в файл
CONFIG.SYS
следующие строки:
device = HIMEM.SYS
device = EMM386.EXE NOEMS
dos = UMB
devicehigh = … (этот драйвер будет загружен в UMB)
Существовали также драйверы для отображения в UMB в реальном режиме процессора используя функции чипсета .
Резидентные программы
могут загружаться в UMB с помощью
loadhigh
. Однако не все приложения корректно работают, будучи загруженными в UMB.
Кроме того, любое приложение может самостоятельно перенести себя или часть своих данных в UMB, воспользовавшись функцией DOS 58xx.
Поскольку во время загрузки приложение может занимать больше памяти, чем его резидентная часть, в DOS, как правило, выделяется блок максимального размера.
В результате UMA оказывается сильно фрагментированной и, даже если суммарный объём свободной памяти в блоках будет больше необходимого, приложение может не поместиться ни в один свободный блок. Для оптимального заполнения UMA должен подбираться порядок загрузки драйверов и
резидентных программ
и задействован расширенный синтаксис команд
devicehigh
и
loadhigh
(с помощью которого можно указывать, в какой блок загружать программу).
Слово англ. upper обычно переводят на русский как «верхний» («расположенный наверху» ), но и слово high может переводиться как «верхний» (или «высокий» — «находящийся вверху» ). С этим связано множество неточностей при переводе названий Upper Memory Area (Upper Memory Block) и High Memory Area .
В результате, в русскоязычной литературе продолжают использоваться оригинальные англоязычные написания — UMB и HMA (аббревиатура UMA практически не прижилась).
Кроме того, команды
devicehigh
и
loadhigh
, несмотря на слово high в названии, загружают программы в UMB, а не HMA. HMA DOS использует только для загрузки своего ядра (если использована команда
dos=high
или
dos=high,umb
).