Основная область памяти
Основная область памяти (Основная память, англ. Conventional memory) занимает первые 640 Кбайт оперативной памяти в IBM PC-совместимых компьютерах. В эту область загружается таблица векторов прерываний (занимает 1 Кбайт), некоторые данные из BIOS (например, буфер клавиатуры), различные 16-битные программы DOS. Для них 640 Кбайт являются барьером.
Барьер 640 Кбайт
Для IBM PC-совместимых компьютеров 1 Мбайт был пределом памяти, который мог адресовать процессор. CPU Intel 8088 имеет 20 адресных линий и мог обращаться к памяти до 220 = 1 Мбайт памяти. Первый мегабайт был разделен на 16 областей по 64 Кбайт. Первые десять областей отводились для использования пользовательскими программами (при этом сама операционная система могла обращаться ко всему мегабайту памяти) и называлась основная память. Оставшиеся 6 областей объёмом 384 Кбайт (Upper Memory Area, UMA, верхняя память) резервировались для системных нужд и дополнительных устройств. В первых компьютерах здесь размещались BIOS и его расширения, память видеоадаптера и драйверы устройств. В существующих реализациях IBM PC часть верхней памяти использовалась для CGA/EGA, другая — оставалась неиспользованной. В начале 1980-х годов память в 640 Кбайт была вполне достаточна для нужд обычного пользователя, однако потребность в ОЗУ новых приложений росла быстрее, что привело к необходимости использовать резервные области верхней памяти различными способами, обходящими запрет на доступ прикладных программ к верхней памяти. В результате это привело к тому, что в 1 Мбайт доступной памяти появились зарезервированные «дыры», которые использовались различными аппаратными устройствами. Устранение подобных «дыр» было технически труднореализуемо и не поддерживалось бы существующими версиями DOS и прикладных программ. Позднее был разработан универсальный метод, позволяющий обращаться в участкам верхней памяти (Upper memory blocks, UMB).
Для обеспечения обратной совместимости с существующими приложениями ограничение в 640 Кбайт сохранилось в последующих реализациях стандарта IBM PC, даже после того, как архитектура Intel 8086/8088 была заменена на более современный Intel 80286, позволявший адресовать уже 16 Мбайт памяти в защищённом режиме. Данное ограничение было вызвано тем, что процессор 80286 мог работать как в новом защищённом, так и в старом реальном режиме, обеспечивающим совместимость со старой архитектурой: в реальном режиме невозможно адресовать память с разрядностью выше 20 бит (или 220 = 1 Мбайт). Последующие процессоры, совместимые с архитектурой IBM PC, реализовывали эту совместимость и далее. Даже на современных компьютерах до сих пор существует зарезервированная область памяти между 640 и 1024 Кбайтами памяти[1][2], хотя для большинства современных операционных систем он незаметен, так как в них доступ к ОЗУ реализован через виртуальную память, скрывающую за собой настоящее распределение памяти и не зависящую от неё[3].
Использование основной памяти
Барьер в 640 Кбайт актуален только для 16-битных программ, работающих под DOS. На работу 32- и 64-битных операционных систем (Microsoft Windows 4.x, NT, GNU/Linux и т. п.) барьер в 640 Кбайт практически не оказывает влияния.
Примечания
- White Paper: A Tour beyond BIOS Memory Map Design in UEFI BIOS (недоступная ссылка). Intel Corporation (февраль 2015). Дата обращения: 3 декабря 2018. Архивировано 30 сентября 2015 года.
- Mark, Russinovich; David A., Solomon; Alex, Ionescu. Windows Internals. — 6. — Microsoft Press, 2012. — Т. Part 2. — С. 322.. — «Note the gap in the memory address range from page 9F000 to page 100000…».
- Programming Applications for Microsoft Windows (англ.). — P. 435 ff..
См. также
- Оперативная память
- Расширенная память (EMS)
- Дополнительная память (XMS)
- High Memory Area (HMA)
Литература
- Скотт Мюллер. Глава 6. Оперативная память // Модернизация и ремонт ПК = Upgrading and Repairing PCs. — 15 изд. — М.: «Вильямс», 2004. — С. 427—438. — ISBN 0-7897-2974-1.