Системная память PC AT. Организация оперативной памяти компьютера. Кодирование обращений к памяти. Адресация байтов в 16-разрядной памяти, страница 6

E0000 +-------------+  + Страницы EMS

D0000 +-------------+ -- EGA/VGA ROM и контроллер диска XT

C0000 +-------------+ -¬

B0000 +-------------+  + Видеобуфер

А0000 +-------------+ -90000 +-------------+

80000 +-------------+

70000 +-------------+

60000 +-------------+

50000 +-------------+

40000 +-------------+

30000 +-------------+

20000 +-------------+

10000 +-------------+

00000 L-------------Рис. 4.7.  Распределение памяти

Однако у правила, определяющего доступ к расширенной памяти в реальном режиме,  есть одно исключение.  С помощью одной уловки  можно получить доступ к первым 64 К байт (без 16 байтов) памяти свыше 1 М байт, не переходя к защищенному режиму (рис. 4.7) Эта область называется HMA

(область высокой памяти); фирма Microsoft разработала спецификацию XMS, или спецификацию  расширенной памяти, и программный драйвер, позволяющий закрепление и открепление памяти внутри HMA.  Однако,  чтобы этим воспользоваться,  прикладная программа должна быть "осведомлена" о HMA, а таких программ немного. Единственная на сегодняшний день крупная прикладная программа,  "осведомленная" о  HMA,  -  это Windows.

Можно считать, что первый мегабайт памяти DOS состоит из 16 сегментов или блоков по 64 К байт. Первые 10 блоков резервируются для RAM, куда загружаются DOS, драйверы устройств и прикладные программы. Эти 10 сегментов адреса от 0000 до 9FFF - составляют обычную память.

Следующие два сегмента (A000 и B000) резервируются для буферов видео.

Память для адаптеров Hercules (и простых MDA) занимает 64 К байт, начиная с нижней части сегмента B000;  в графических режимах может использоваться до

64 К байт. Память для плат CGA начинается в верхней половине сегмента B000

(B800); CGA требует 4 К байт или 32 К байт в зависимости от режима видео.

В текстовых режимах адаптеры EGA и VGA также используют 4 К байт сегмента

B800; в графических режимах может потребоваться до 128 К байт памяти от

A000 до BFFF.

Система Hercules (или неграфическая монохромная  система)  оставляет между собой и верхней границей памяти DOS промежуток в 64 К байт; для системы CGA этот промежуток составляет 96 К байт. Некоторые системы позволяют воспользоваться этой областью и добавить ее к предшествующей области DOS.  Установив такую систему,  после начальной загрузки можно располагать более чем 64 К байт свободной памяти.

ROM контроллера НМД и  видео  часто  помещают    в  сегмент  C000.  В

XT-совместимых системах  ПЗУ контроллера НМД помещается в С800.  В системе

AT эта область свободна,  потому что программы жесткого диска помещаются в

ПЗУ BIOS.  ПЗУ  BIOS EGA и VGA располагаются в нижней части сегмента C000, но некоторые платы VGA требуют размещения буферов RAM выше - в сегменте C000

или в другом месте.

128 К байт в сегментах D000 и E000 обычно доступны для плат расширенной памяти, плат сетевого интерфейса и т.п.  (Сегмент E000 резервируется для расширений BIOS,  но во многих машинах он  свободен).  ПЗУ BIOS

помещается в сегменте F000.

К этому делению на сегменты можно сделать два замечания. Во-первых, оно произвольно. Во-вторых, не все сегменты используются в конкретной машине.

Это позволяет аппаратным  и  программным  средствам управления  памятью последнего поколения использовать собственные хитрости.

В 640 К байт, которыми DOS ограничивает пользователя, нет ничего магического; это произвольная величина, которая в свое время показалась приемлемой.

Но индустрия PC не стояла на месте. Разработчики усложняли свои программы, а пользователи составляли все более крупноформатные таблицы и  т.д.

Таким образом,  к  середине  80-х гг. пользователям DOS стало существенно не хватать объема используемой памяти. Вследствие этого Lotus, Intel и

Microsoft совместно разработали средство увеличения памяти PC - то, что сегодня всем известно под названием LIM/EMS (Lotus-Intel-Microsoft

Expanded     Memory  Specification).