Upper Memory Area | это... Что такое Upper Memory Area? (original) (raw)
Иное название этого понятия — «UMA»; см. также другие значения.
Upper Memory Area (UMA), Upper Memory Blocks (UMB), неформально верхняя память — 384 килобайта памяти, расположенные после основной памяти по адресам от А000016 (640 Кб) до FFFFF16 (1024 Кбайт, 1 Мбайт). Особенность архитектуры IBM PC.
Описание
IBM зарезервировала верхнюю область памяти своего компьютера IBM PC для ПЗУ материнской платы и дополнительных устройств и ОЗУ, а также портов ввода-вывода, адресуемых как память (Memory-Mapped Input/Output). Эта область памяти называется UMA и находится между адресами A000016 (640 Кбайт) и FFFFF16 (1 Мбайт).
Например, в этой области памяти находятся ОЗУ и ПЗУ EGA-совместимого видеоадаптера и окно отображения расширенной памяти.
Верхняя память условно разделена на три области по 128 Кбайт. Стандартное распределение верхней памяти выглядит таким образом:
- A0000h…BFFFFh — отведено под видеопамять, чаще всего используется не полностью.
- C0000h…DFFFFh — отведено для BIOS адаптеров (Adapter ROM, Adapter RAM).
- E0000h…FFFFFh — отведено под использование системного BIOS, но в большинстве случаев используется не полностью (чаще всего заняты последние 64 Кбайт).
Использование
В реальной системе не вся зарезервированная область памяти (UMA) оказывается распределена. Компьютеры с процессором 80386 и выше способны отображать дополнительную память на свободные участки UMA. Таким образом формируются блоки верхней памяти (Upper Memory Block, UMB), которые могут отдаваться под контроль ОС и распределяться между приложениям.
MS-DOS 5.0 и выше поддерживает управление UMB. Для этого в её состав входят драйверы HIMEM.SYS и EMM386.EXE (с помощью которых на UMA отображается дополнительная память) и команды dos=umb
, devicehigh
и loadhigh
. Чтобы отобразить дополнительную память на UMA и активировать функции управления UMB, надо добавить в файл CONFIG.SYS следующие строки:
device = HIMEM.SYS device = EMM386.EXE dos = UMB devicehigh = … (этот драйвер будет загружен в UMB)
Резидентные программы могут загружаться в UMB с помощью loadhigh
. Однако не все приложения корректно работают, будучи загруженными в UMB.
Кроме того, любое приложение может самостоятельно перенести себя или часть своих данных в UMB, воспользовавшись функцией DOS 58xx.
Поскольку во время загрузки приложение может занимать больше памяти, чем его резидентная часть, в DOS, как правило, выделяется блок максимального размера.[1] В результате UMA оказывается сильно фрагментированной и, даже если суммарный объём свободной памяти в блоках будет больше необходимого, приложение может не поместиться ни в один свободный блок. Для оптимального заполнения UMA должен подбираться порядок загрузки драйверов и резидентных программ и задействован расширенный синтаксис команд devicehigh
и loadhigh
(с помощью которого можно указывать, в какой блок загружать программу).
Путаница названий
Слово англ. upper обычно переводят на русский как «верхний» («расположенный наверху»[2]), но и слово high может переводиться как «верхний» (или «высокий» — «находящийся вверху»[3]). С этим связано множество коллизий при переводе названий Upper Memory Area (Upper Memory Block) и High Memory Area.
В результате, в русскоязычной литературе продолжают использоваться оригинальные англоязычные написания — UMB и HMA (аббревиатура UMA практически не прижилась).
Примечания
- ↑ В заголовке .EXE-файлов имеются поля для указания минимальной и максимальной запрашиваемой памяти; при загрузке программы DOS подбирает для неё наибольший блок, чей размер находится между этим двумя значениями. Но, как правило, в поле максимальной памяти находится значение, говорящее о выделении всей доступной памяти, а в этом случае DOS не ограничивает размер выделяемых блоков. У .COM-файлов нет заголовка, поэтому требование на максимальный блок памяти программы в таком формате подразумевается.
- ↑ upper в Яндекс.словарях
- ↑ high в Яндекс.словарях