Upper Memory Area

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис
Области памяти IBM PC

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 (с помощью которых в режиме виртуального 8086 на UMA отображается дополнительная память) и команды dos=umb, devicehigh и loadhigh. Чтобы отобразить дополнительную память на UMA и активировать функции управления UMB, надо добавить в файл CONFIG.SYS следующие строки:

device = HIMEM.SYS
device = EMM386.EXE NOEMS
dos = UMB
devicehigh = … (этот драйвер будет загружен в UMB)

Существовали также драйверы для отображения в UMB теневого ОЗУ в реальном режиме процессора используя функции чипсета [1][2].

Резидентные программы могут загружаться в UMB с помощью loadhigh. Однако не все приложения корректно работают, будучи загруженными в UMB.

Кроме того, любое приложение может самостоятельно перенести себя или часть своих данных в UMB, воспользовавшись функцией DOS 58xx.

Поскольку во время загрузки приложение может занимать больше памяти, чем его резидентная часть, в DOS, как правило, выделяется блок максимального размера.[3] В результате UMA оказывается сильно фрагментированной и, даже если суммарный объём свободной памяти в блоках будет больше необходимого, приложение может не поместиться ни в один свободный блок. Для оптимального заполнения UMA должен подбираться порядок загрузки драйверов и резидентных программ и задействован расширенный синтаксис команд devicehigh и loadhigh (с помощью которого можно указывать, в какой блок загружать программу).

Путаница названий

Слово англ. upper обычно переводят на русский как «верхний» («расположенный наверху»[4]), но и слово high может переводиться как «верхний» (или «высокий» — «находящийся вверху»[5]). С этим связано множество неточностей при переводе названий Upper Memory Area (Upper Memory Block) и High Memory Area.

В результате, в русскоязычной литературе продолжают использоваться оригинальные англоязычные написания — UMB и HMA (аббревиатура UMA практически не прижилась).

Кроме того, команды devicehigh и loadhigh, несмотря на слово high в названии, загружают программы в UMB, а не HMA. HMA DOS использует только для загрузки своего ядра (если использована команда dos=high или dos=high,umb).

Примечания

  1. UMBPCI - a hardware UMB driver for DOS and Win95. Дата обращения: 10 декабря 2014. Архивировано 31 декабря 2014 года.
  2. Index of /scene96-2/misc/utilz/rdosumb. Дата обращения: 10 декабря 2014. Архивировано 11 декабря 2014 года.
  3. В заголовке .EXE-файлов имеются поля для указания минимальной и максимальной запрашиваемой памяти; при загрузке программы DOS подбирает для неё наибольший блок, чей размер находится между этим двумя значениями. Но, как правило, в поле максимальной памяти находится значение, говорящее о выделении всей доступной памяти, а в этом случае DOS не ограничивает размер выделяемых блоков. У .COM-файлов нет заголовка, поэтому требование на максимальный блок памяти программы в таком формате подразумевается.
  4. upper (недоступная ссылка) (недоступная ссылка с 14-06-2016 [2865 дней]) в Яндекс.словарях
  5. high (недоступная ссылка) (недоступная ссылка с 14-06-2016 [2865 дней]) в Яндекс.словарях