Введение
В управлении памятью DOS расширенная память относится к памяти, превышающей первый мегабайт (220 байт) адресного пространства в IBM PC или совместимом компьютере с процессором 80286 или более поздним. Этот термин в основном используется в операционных системах DOS и Windows. Программы DOS, работающие в реальном или виртуальном x86 режиме, не могут напрямую обращаться к этой памяти, но могут получить к ней доступ через программный интерфейс, называемый спецификацией расширенной памяти (XMS). Этот API реализуется драйвером (например, HIMEM.SYS) или операционной системой, которые обеспечивают управление памятью и копирование данных между обычной и расширенной памятью, временно переключая процессор в защищенный режим. В этом контексте термин "расширенная память" может относиться как ко всей расширенной памяти, так и только к той ее части, которая доступна через этот API. Расширенная память также может быть напрямую доступна программам DOS, работающим в защищенном режиме, с использованием VCPI или DPMI – двух (различных и несовместимых) методов использования защищенного режима в DOS. Расширенную память не следует путать с расширенной памятью (EMS) – более ранним способом расширения емкости памяти IBM PC сверх 640 КБ (655 360 байт) с помощью платы расширения с модулями памяти с переключением банков. В связи с доступной поддержкой расширенной памяти в популярных приложениях были разработаны драйверы устройств, которые эмулировали расширенную память, используя расширенную память. Позже были разработаны два дополнительных метода, позволяющих получить прямой доступ к небольшой части расширенной памяти из реального режима. Эти области памяти называются областью верхней памяти (HMA) и верхней областью памяти (UMA; также называемой верхними блоками памяти или UMB).
Обзор
На ПК на базе x86 расширенная память доступна только с процессором Intel 80286 или выше. Только эти чипы могут адресовать более 1 мегабайта оперативной памяти. Более ранние процессоры 8086/8088 могут использовать более 1 МБ оперативной памяти, если использовать специальное оборудование, позволяющее отображать отдельные её части по адресам ниже 1 МБ. На компьютере 286 или более высокой производительности, оснащенном более чем 640 КБ оперативной памяти, дополнительная память обычно переназначивается выше границы 1 МБ, поскольку архитектура IBM PC резервирует адреса от 640 КБ до 1 МБ для системной ПЗУ и периферийных устройств. Расширенная память недоступна в реальном режиме (за исключением небольшой области, называемой областью верхней памяти). Только приложения, выполняющиеся в защищенном режиме, могут использовать расширенную память напрямую. Операционная система защищенного режима, такая как Microsoft Windows, управляет доступом прикладных программ к памяти. Процессор делает эту память доступной через глобальную таблицу дескрипторов (GDT) и одну или несколько локальных таблиц дескрипторов (LDT). Память "защищена" в том смысле, что сегменты памяти, назначенные локальным дескриптором, не могут быть доступны другой программе, поскольку эта программа использует другой LDT, а сегменты памяти, назначенные глобальным дескриптором, могут иметь ограниченные права доступа, что вызывает исключение процессора (например, общее нарушение защиты или GPF) при нарушении. Это предотвращает вмешательство программ, работающих в защищенном режиме, в память друг друга. Операционная система защищенного режима, такая как Microsoft Windows, также может запускать программы в реальном режиме и предоставлять им расширенную память. Интерфейс защищенного режима DOS (DPMI) – это рекомендованный Microsoft способ доступа программы DOS к расширенной памяти в многозадачной среде.
Спецификация расширенной памяти (XMS)
Спецификация расширенной памяти (XMS) – это спецификация, описывающая использование расширенной памяти IBM PC в реальном режиме для хранения данных (но не для выполнения исполняемого кода). Память предоставляется программным обеспечением для управления расширенной памятью (XMM), таким как HIMEM.SYS. Функции XMM доступны через программный прерывание 2Fh, функция 4310h. Версия XMS 2.0, выпущенная в июле 1988 года, поддерживала до 64 МБ памяти, а с версией XMS 3.0 этот объем увеличился до 4 ГБ (2^32 байта). Чтобы различать возможно различное количество памяти, доступное приложениям в зависимости от версии спецификации, для которой они были разработаны, более позднюю версию можно называть суперрасширенной памятью (SXMS). Менеджер расширенной памяти также отвечает за управление выделением памяти в области высокой памяти (HMA) и области верхней памяти (UMA; также называемой верхними блоками памяти или UMB). На практике область верхней памяти предоставляется расширенным менеджером памяти (EMM), после чего DOS попытается выделить всю эту память и управлять ею самостоятельно.