Логическое распределение оперативной памяти определяется не только применяемой операционной системой, но и особенностями аппаратной реализации IBM-совместимых PC. Знание строения ОЗУ необходимо для программной оптимизации системы.
Можно выделить пять важнейших логических областей оперативной памяти:
Стандартная оперативная память (Conventional Memory);
ЕМS-память (Expanded Memory Specification) – дополнительная память;
UMA (Upper Memory Area) – верхняя память;
HMA (High Memory Area);
XMS (Extended Memory Specification) – расширенная память
Стандартная оперативная память
С уверенностью можно сказать, что, с точки зрения аппаратной спецификации, стандартная память является наиважнейшей. Как правило, в ней располагается большая часть прикладных программ и данных.
В то время как внутри PC обычно все выражается в двоичной системе счисления (0 или 1), для адресации памяти применяется шестнадцатеричная, характеризующаяся наличием символа “h” после значения.
Стандартная память начинается от адреса 0000:0000 и продолжается до адреса А000:0000, занимая 640Кбайт. Этот невысокий верхний предел был установлен процессорами 8088 и 8086. Эти процессоры имели 20-разрядную адресную шину и поэтому могли адресовать только 1 Мбайт памяти (220=l 048 576 байт). В пределах этой памяти выше уровня 640 Кбайт фирмой IBM были зарезервированы 384 Кбайта для выполнения внутренних функций, на которых мы остановимся ниже.
В стандартной памяти расположены таблица векторов прерываний, область данных BIOS, операционная система.
Таблица векторов прерываний
Само название говорит о том, что речь идет о таблице (состоящей из 256 элементов по 4 байта), в которой находятся вектора прерываний – адреса сервисных программ, входящих в состав операционной системы и BIOS. При этом речь идет о таких базовых функциях, как отображение символа на экране монитора или организация доступа к дисководу или жесткому диску и т. п. Но так как существуют различные операционные системы и версии BIOS, эти программы-прерывания могут располагаться в различных местах стандартной оперативной памяти. В таблице прерываний указано их реальное местоположение. Таблица занимает место 1024 Байт (1 Кбайт) и начинается с адреса 0000h:0000h.
Область данных BIOS
Вслед за таблицей прерываний расположена область данных BIOS объемом 768 Байт. Здесь размещены, например, счетчик таймера, буфер клавиатуры и другая внутренняя информация.
Операционная система
Далее в стандартной оперативной памяти расположена операционная система. Конечно же, она загружается в RAM не полностью, а только частично (ядро). Ядро ОС не имеет постоянного адреса памяти. Его местоположение и размер занимаемой им памяти зависят от операционной системы.
Основная область памяти
Далее до адреса A000h:0000h все принадлежит только программам и данным. Этот адрес известен как граница 640 Кбайт, с которой успешно справляются многие PC с процессором выше 80286.
UMA
Верхняя память – участок памяти от 640Кб до 1 Мб.
Здесь находится информация, которая служит для сопряжения прикладных программ с различными картами расширений, установленными в PC. И поскольку иногда карты расширения, например, видеокарту, называют адаптером (Adapter), эту область памяти коротко называют сегментом адаптера или, поскольку речь идет об области памяти с более высокими адресами, UMA (Upper Memory Area). Эта верхняя память (Upper Memory) располагается по адресам от A0000h до FFFFFh (от 640 Кбайт до 1 Мбайт), ее размер составляет 384 Кбайт.
Рассматриваемая область памяти не однородна. В UMA размешается видеопамять и ПЗУ BIOS, а также могут находиться модули постоянной и оперативной памяти, конструктивно расположенные на картах расширения, подключенных к PC. Поэтому среди этих блоков некоторые являются зарезервированными (пользователь не может их использовать), другие, напротив, свободны. Свободные блоки, поскольку они находятся в верхней памяти, также называют UMB (Upper Memory Block).
EMS
Как уже упоминалось ранее, в верхней памяти имеются изрядные «дыры», которые представляют собой свободную память, самостоятельно не идентифицируемую системой. Пустуют, как правило, область расширения системного ROM BIOS или часть области под дополнительные модули ROM. Использовать эту память позволяет метод EMS (Expanded Memory Specification), появившийся прежде всего потому, что программы, использующие большое количество памяти, не могут разместиться в оперативной памяти до 640 Кбайт.
Для того чтобы преодолеть этот барьер, фирмы Lotus, Intel и Microsoft (отсюда название LIM) создали стандарт, который основывается на так называемом переключении банков (Bank Switchings), или блоков (страниц), памяти. В области UMB между видеобуфером и системным ROM BIOS выделяется незанятое «окно» (page frame) размером 64 Кбайт, разделенное на 4 логические страницы по 16 Кбайт. С помощью специального драйвера, например ЕММ386.ЕХЕ, строятся «отображения» до четырех произвольных физических страниц из дополнительной (Expanded) памяти, расположенной на специальной карте расширения, в логические. Поэтому эту память часто называют отображаемой памятью. При необходимости обращения к данным, расположенным в дополнительной памяти, с помощью драйвера выбирается соответствующее ранее построенное «отображение» физических страниц в логические. Когда процессор обращается к области памяти, входящей в «окно» (адрес памяти которого ниже 1 Мбайт), аппаратно происходит обращение к соответствующим страницам дополнительной памяти на плате расширения. Таким образом, посредством адресации, реализуемой драйвером EMS, можно обращаться к 8 Мбайт (стандарт LIM 3.2) или к 32 Мбайт (стандарт LIM 4.0) дополнительной памяти, которая конструктивно расположена на отдельной карте расширения. На PC с процессорами 80386 и выше такая отдельная карта не нужна. EMS здесь может эмулироваться с помощью соответствующих драйверов.
Для того чтобы использовать EMS-память, необходимо выполнение двух условий:
прикладные программы должны уметь обращаться к драйверу EMS-памяти;
необходим специальный менеджер памяти (Expanded Memory Manager), сокращенно EMM, который организует страницы и управляет ими. Ранее, для старых материнских плат, соответствующий драйвер поставлялся на отдельной дискете. В настоящее время этот драйвер входит в стандартные поставки DOS и Windows, в этом случае он соответствует последнему стандарту LIM и представляет собой файл ЕММ386.ЕХЕ. Этот драйвер позволяет программно эмулировать дополнительную (Expanded) память в расширенной (Extended) памяти.
НМА
Первый блок величиной 64 Кбайта непосредственно выше границы 1 Мбайт оперативной памяти обозначают как НМА (High Memory Area). Своему существованию эта область целиком обязана несколько «ущербной» эмуляции процессора 8088 процессором 80286. Дело состоит в следующем. Вся стандартная память, помимо того, что может быть представлена в виде 16 неперекрываемых блоков размером 64 Кбайта каждая (0–F), также может быть представлена и в виде перекрываемых 64 Кбайтных областей, называемых сегментами, которые, вообще говоря, могут начинаться через каждые 16 байт. Максимальный полный адрес в виде сегмент: смещение, по которому может обратиться процессор 8088, – это FFFF:000Fh (20 адресных линий). Если увеличить это значение хотя бы на единицу, то произойдет циклический перенос (wrap around) и значение адреса станет 0000:0000. Для процессора 80286 и выше в общем случае этого не случится, так как адресная шина этих процессоров больше 20 разрядов, но адрес памяти при этом превысит границу 1 Мбайт. Чтобы исправить эту ошибку, фирма IBM предусматривает на материнских платах PC специальные аппаратные средства, «заставляющие» процессор 80286 выполнять переход на низшие адреса, как это было при работе процессора 8088. Однако такой переход может быть отменен чисто программным путем. Таким образом, PC с процессором не ниже 80286 в реальном режиме может дополнительно адресовать память в пределах FFFF:0010-FFFF:FFFFh, т.е. практически целый сегмент размером 64 Кбайт минус 16 байт. Особенно важным для понимания является тот факт, что область НМА доступна, по сути, в реальном режиме работы процессора.
XMS
В 1982 году появилась возможность использования расширенной памяти.
Расширенная память – часть оперативной памяти в компьютерах с микропроцессорами Intel-80286, расположенная выше первого мегабайта.
XMS (eXtended Memory Specification) обозначает всю память выше границы 1 Мбайт, включая также НМА.
Чтобы иметь доступ к этой памяти, необходим специальный драйвер, с помощью которого данные пересылаются из стандартной памяти в расширенную и обратно. Выполнение программ, размещенных в расширенной памяти, не предусмотрено. Драйвер, реализующий XMS, переводит процессор в защищенный режим, т. е. режим, в котором можно адресовать всю память.