High Memory Area


High Memory Area, HMA — начальный участок дополнительной памяти объёмом 65520 байт (64 килобайта минус 16 байт) с адресами от 10000016 до 10FFEF16 (сразу после Upper Memory Area), доступный в реальном режиме через верхние сегменты адресного пространства. Особенность процессоров 80286 и выше и построенных на них IBM PC/AT-совместимых компьютеров[1].

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

(При этом один и тот же адрес может получаться из разных пар сегмент/смещение — например, полный адрес 100016 доступен и как 0000:1000, и как 0100:0000, и как 0060:0A00).

С помощью сегментной адресации доступны линейные адреса от 0 (0000:0000) до 10FFEF16 (FFFF:FFFF, 1088 Кб). Однако адресная шина процессоров 808x 20-битная и может адресовать только 220 байт (1024 Кб или 1 Мб) памяти, то есть область с адресами от 0 до FFFFF16 (от 0000:0000 до FFFF:000F). Адреса же от 10000016 до 10FFEF16 (от FFFF:0010 до FFFF:FFFF) — 21-битные, поэтому при их использовании возникает переполнение, 21-й бит теряется и, например, адрес 10000016 (FFFF:0010) указывает туда же, куда и адрес 0 (0000:0000).

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

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