В управлении памятью DOS расширенная память относится к памяти выше первого мегабайта (2 20 байт) адресного пространства в IBM PC или совместимом с процессором 80286 или более поздним . Этот термин в основном используется в операционных системах DOS и Windows . Программы DOS, работающие в реальном режиме или виртуальном режиме x86 , не могут напрямую обращаться к этой памяти, но могут делать это через интерфейс прикладного программирования (API), называемый спецификацией расширенной памяти (XMS). Этот API реализуется драйвером ( таким как HIMEM.SYS ) или ядром операционной системы, которое заботится об управлении памятью и копировании памяти между обычной и расширенной памятью, временно переключая процессор в защищенный режим . В этом контексте термин «расширенная память» может относиться либо ко всей расширенной памяти, либо только к той ее части, которая доступна через этот API.
К расширенной памяти также могут обращаться напрямую программы DOS, работающие в защищенном режиме, с помощью VCPI или DPMI — двух (различных и несовместимых) методов использования защищенного режима в DOS.
Расширенную память не следует путать с расширенной памятью (EMS), более ранним методом расширения емкости памяти IBM PC свыше 640 КБ (655 360 байт) с помощью карты расширения с коммутируемыми банками модулей памяти. Из-за имеющейся поддержки расширенной памяти в популярных приложениях были разработаны драйверы устройств, которые эмулировали расширенную память с помощью расширенной памяти. Позже были разработаны два дополнительных метода, обеспечивающих прямой доступ к небольшим частям дополнительной памяти свыше 640 КБ из реального режима. Один из них называется областью верхней памяти (HMA), состоящей из первых почти 64 КБ расширенной памяти, а другой называется областью верхней памяти (UMA; также называется блоками верхней памяти или UMB), расположенной в диапазоне адресов между 640 КБ и 1 МБ, который IBM PC обозначает для аппаратных адаптеров и ПЗУ.
На ПК на базе 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 ) — это спецификация, описывающая использование расширенной памяти IBM PC в реальном режиме для хранения данных (но не для запуска исполняемого кода в ней). Память предоставляется программным обеспечением менеджера расширенной памяти ( XMM ), таким как HIMEM.SYS . Функции XMM доступны посредством прямых вызовов переменного адреса, который можно найти через функцию программного прерывания 2Fh 4310h.
Версия XMS 2.0, выпущенная в июле 1988 года, допускала до 64 МБ памяти. [1] С версией XMS 3.0 этот объем увеличился до 4 ГБ (232 байта ). [2] Разница является прямым результатом размеров значений, используемых для представления объемов общей и нераспределенной (свободной) расширенной памяти в единицах по 1 КБ (1024 байта): XMS 2.0 использует 16-битные целые числа без знака, способные представлять максимум (65535 * 1 КБ) = 64 МБ, в то время как XMS 3.0 добавляет новые альтернативные функции, которые используют 32-битные целые числа без знака, способные представлять (4 Г * 1 КБ) = 4 ТБ (4 терабайта), но ограниченные спецификацией до 4 ГБ. [1] [2] (4 ГБ — это диапазон адресов 80386 и 80486, единственных 32-разрядных процессоров Intel x86, которые существовали на момент публикации XMS 3.0 в 1991 году.) XMS 3.0 сохраняет оригинальные функции API XMS 2.0 с их первоначальным ограничением в 64 МБ, но добавляет новые функции «суперрасширенной памяти», которые поддерживают 4 ГБ расширенной памяти (за вычетом первых 1 МБ) и могут быть вызваны только с 32-разрядным процессором (поскольку эти «супер» функции используют 32-разрядные регистры процессора для передачи значений). [2] Чтобы различать возможное разное количество памяти, которое может быть доступно приложениям, в зависимости от того, в какой версии спецификации они были разработаны, последняя может называться суперрасширенной памятью ( SXMS ).
Менеджер расширенной памяти также отвечает за управление выделениями в области верхней памяти (HMA) и верхней области памяти (UMA; также называемые верхними блоками памяти или UMB). На практике верхняя область памяти будет предоставлена менеджером расширенной памяти (EMM), после чего DOS попытается выделить их все и управлять ими самостоятельно. [ требуется пояснение ] [ требуется цитата ]