Interested Article - High Memory Area

Области памяти IBM PC

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

Описание

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

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

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

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

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

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

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

MS-DOS

Впервые HMA была использована в Windows 2.1 в 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 практически не прижилась).

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

См. также

Примечания

  1. Гук М. Аппаратные средства IBM PC. Энциклопедия. — 2-е изд. — СПб. : Питер, 2003. — С. 62. — 928 с. — ISBN 5-318-00047-9 .
  2. (недоступная ссылка) (недоступная ссылка с 14-06-2016 [2775 дней]) в Яндекс.словарях
  3. (недоступная ссылка) (недоступная ссылка с 14-06-2016 [2775 дней]) в Яндекс.словарях
Источник —

Same as High Memory Area