High Memory Area

13-10-2023

High Memory Area — участок дополнительной памяти IBM PC/AT-совместимых компьютеров доступный из режима реального адреса (путем использования запредельных смещений в верхних сегментах памяти). Максимальный доступный таким образом объём памяти 65520 байт (или 64 KiB минус 16 байт).

Термин «HMA» был придуман Microsoft, и долгое время использовался ею без расшифровки, что породило распространенную расшифровку англ. «High Memory Area» — область высокой памяти. Однако позднее Microsoft документировала HMA как «High Memory Arena»[источник не указан 344 дня].

Содержание

Описание

Адресация памяти в процессорах Intel 8086 и Intel 8088 сегментная: полный адрес памяти задаётся 16-битным номером сегмента («параграфа») и 16-битным смещением внутри этого сегмента и вычисляется по формуле

(сегмент) × 16 + (смещение).

Однако адресная шина в этих процессорах 20-битная и может адресовать только 1 Мб (220 байт) памяти, то есть область с адресами от 0000:0000 до FFFF:000F. Адреса от FFFF:0010 до FFFF:FFFF — 21-битные:

FFFFh × 16 + 0010h = 100000h, …
FFFFh × 16 + FFFFh = 10FFEFh,

поэтому при их использовании возникает переполнение, 21-й бит теряется и, например, адрес FFFF:0010 указывает туда же, куда и адрес 0000:0000.

В процессорах Intel 80286/80288 адресная шина 24-битная (возможна адресация 224 = 16 Мб памяти), поэтому в них переполнения не происходит.

Компьютеры IBM PC/AT построены на процессоре Intel 80286, но из соображений совместимости с IBM PC и IBM PC/XT, построенных на Intel 808x, в них был введён логический элемент (вентиль), отключающий 21-й адресный провод (A20) от схемы управления памятью. Этот логический элемент (Gate A20 (англ.)русск.) управляется через контроллер клавиатуры (микросхема Intel 8042) и по умолчанию он включён.

Позднее были разработаны программы-драйверы, так называемые A20 handler, которые динамически управляют адресацией и позволяют приложениям, работающим в реальном режиме, использовать область памяти между 1024 и 1088 Кб.

MS-DOS

Впервые HMA была использована в Microsoft Windows 2.1 (которая работает поверх MS-DOS) в 1988 году и функции A20 handler там выполнял драйвер HIMEM.SYS.

В 1991 году вышла MS-DOS 5.0, умеющая загружать в HMA своё ядро, тем самым освобождая 46 Кб основной памяти для приложений. Последующие версии MS-DOS также включают такую возможность. Драйвер HIMEM.SYS был включён в состав MS-DOS.

Чтобы DOS загрузила своё ядро в HMA, в файл CONFIG.SYS нужно добавить строки:

device = HIMEM.SYS
dos = high

Другие приложения также могут использовать HMA с помощью функций DOS или прямо через функции HIMEM.SYS, хотя после переноса в HMA ядра DOS свободного места там почти не остаётся.

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

Слово англ. Upper обычно переводят на русский как верхний. Но и слово англ. High переводится как верхний. С этим связано множество коллизий при переводе названий Upper Memory Area (Upper Memory Block) и High Memory Area.

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

См. также

High Memory Area.

© 2011–2023 stamp-i-k.ru, Россия, Барнаул, ул. Анатолия 32, +7 (3852) 15-49-47