logo
1 / Lectures / Lect5_pc

Распределение областей системной памяти ([5], с.39)

Логическая структура памяти PC обусловлена особенностями системы адресации процессоров семейства x86. Процессоры 8086/88, применявшиеся в первых моделях PC, имели адресуемое пространство оперативной памяти 1 Мбайт (что ограничивалось 20-разрядной адресной шиной). Эти процессоры использовали сегментную модель памяти, унаследованную и старшими моделями в реальном режиме.

Согласно этой модели, исполнительный адрес AE вычисляется как

AE = S 16 + D,

где S – содержимое сегментного регистра, а D – смещение (записанное в каком-либо регистре или непосредственно в команде), причем и S и D ограничены двумя байтами, т.е. 16-ю двоичными или 4-мя шестнадцатеричными разрядами каждое.

Такое формирование исполнительного адреса обеспечивает доступ к адресному пространству от 00000h до FFFFFh (соответствующему 20-разрядному адресу). Кроме того, при значениях S = FFFFh и D = FFFFh получаемый исполнительный адрес AE = 10FFEFh, указывает на область выше первого мегабайта памяти, однако, старшая единица такого адреса расположена в 21-м разряде, что при 20-разрядной шине адреса дает AE = 0FFEFh. Таким образом, адресное пространство как бы сворачивается в кольцо с небольшим “нахлестом”.

Начиная с процессора 80286 шина адреса была расширена до 24-х разрядов, с 386DX – до 32-х разрядов, а с Pentium II – до 36 разрядов. Но в реальном режиме, используемом DOS, формально доступен только 1 Мбайт памяти, а при эмуляции реального режима в процессоре 80286 было обнаружено, что он эмулирует 8086 с ошибкой: единица двадцать первого разряда адреса A20 (считая с нуля) попадает на шину адреса, и адрес выходит за границы первого мегабайта.

Ошибку исправлять не стали, так как она давала доступ в дополнительный сегмент (64K – 16) оперативной памяти, позволяя увеличить ее объем, доступный прикладным программам. А саму область адресов 100000h - 10EEFEh стали называть высокой областью памяти (High Memory Area – HMA) и грузить в нее небольшие резидентные программы и часть операционной системы. Но для обеспечения полной совместимости с 8086/88 в IBM PC ввели дополнительный вентиль Gate20 адресной шины A20, управляющий передачей на нее сигнала процессора. Переключение этого вентиля сперва осуществлял контроллер клавиатуры, а затем, так как этот вариант оказался слишком медленным, появились и иные варианты его реализации. Это нашло свое отражение в соответствующей опции утилиты установки параметров BIOS.

Основную часть доступного адресного пространства занимает оперативная память. Объем установленной памяти определяет тест, выполняемый сразу после включения питания – Power On Self Test (POST). Обнаружив отсутствие памяти или ошибку, тест останавливается и сообщает объем реально работающий памяти.

Распределение памяти PC, непосредственно адресуемой процессором, приведено в таблице 2 и является следующим

Таблица 2. Распределение памяти ПЭВМ

Адреса

Объем

Название

1000000h и выше

Общий – 16 МБ

Дополнительная память (XMS-EMS)

FE0000h – FFFFFFh

128 КБ

Образ BIOS

10FFF0h – FDFFFFh

До 14,8 МБ

Дополнительная память (XMS-EMS)

100000h – 10FFEFh

64 КБ – 16 байт

Высокая область памяти (HMA)

E0000h – FFFFFh

128 КБ

ПЗУ BIOS

A0000h – DFFFFh

256 КБ

Верхняя область памяти (UMA)

00000h – 9FFFFh

640 КБ

Стандартная (базовая) память

Для компьютеров с 24-разрядной шиной адреса (286 и 386SX) верхняя граница дополнительной памяти – FDFFFh (16 МБ без последних 128 КБ). Область адресов FE0000h – FFFFFFh соответствует ПЗУ BIOS и обращение по этим адресам эквивалентно обращению к ПЗУ BIOS (ROM BIOS) по адресам 0E0000h – 0FFFFFh.

Для процессоров 386DX, 486 и Pentium, имеющих 32-разрядную шину адреса теоретическая верхняя граница 4 ГБ, а образ BIOS дополнительно отображается в адреса диапазона FFFE0000h – FFFFFFFFh.

(В некоторых системах BIOS отображается в область FE0000h – FFFFFFh, что можно запретить в соответствующей в опции настройки BIOS, поскольку при таком отображении ОЗУ не может быть более 16 МБ. Иногда, наоборот, для старых карт расширения на шине ISA требуется область буфера с адресами в 16-м мегабайте, что можно задать с помощью опции Memory Hole At 15-16M BIOS. Однако, это также не позволит использовать в таких системах более 16 МБ оперативной памяти.)

Для процессоров с 36-разрядной шиной адреса (Pentium PRO, II и III) – теоретическая верхняя граница ОЗУ составляет 64 ГБ.

Реально в ПЭВМ образца 2000-2001 г.г. устанавливается оперативная память объемом 32 – 256 КБ, хотя в серверах она может достигать до 2 ГБ.

Стандартная (conventional) память распределяется так, как показано в табл.3:

Таблица 3. Распределение стандартной памяти ПЭВМ

Адреса

Объем

Название

00000h – 003FFh

1 КБ

Векторы прерываний

00400h – 004FFh

256 байт

Область переменных BIOS

00500h – xxxxxh

Зависит от загрузки DOS

Область DOS

Xxxxxh – 9FFFFh

До 638 КБ

Область программ пользователя. (В случае PS/2 мыши 9FC00h – 9FFFF

Занимает расширение области переменных BIOS

В верхней памяти (UMA) располагаются системные области: буферная память видео адаптеров, область BIOS, резерв для адаптеров, имеющих собственные модули BIOS, область конфигурирования системы (Extended System Configuration Data – ESCD ) для устройств Plug & Play. Кроме того, остающееся место (которое называют UMB – Upper Memory Blocks) используют для загрузки резидентных компонент DOS.

Дополнительная память (вся память выше 1 МБ + область HMA) может использоваться DOS-программами либо с помощью спецификации EMS (Expanded Memory Specification) либо в соответствии со спецификацией XMS (eXtended Memory Specification). Оба слова: Extended и Expanded переводятся примерно одинаково – расширенный, что создает определенную путаницу в терминах.

EMS поддерживается в DOS драйвером (диспетчером памяти) EMM386.EXE, который организует доступ к дополнительной памяти через добавление старших разрядов (адрес страницы) к адресам области D0000h – DFFFFh (хотя эта зона может несколько смещаться). Такой метод используется только для старых программ и то только для хранения данных, но не исполняемых кодов.

XMS поддерживает драйвер HYMEM.SYS, который организует доступ к дополнительной памяти через переключение в защищенный режим и обратно.