В управлении памятью DOS расширенная память представляет собой систему переключения банков , которая предоставляет программам DOS дополнительную память сверх лимита обычной памяти (640 КБ).
Расширенная память — это обобщающий термин для нескольких несовместимых технологических вариантов. Наиболее широко используемым вариантом была Спецификация расширенной памяти ( EMS ), которая была разработана совместно Lotus Software , Intel и Microsoft , поэтому эта спецификация иногда упоминалась как « LIM EMS ». LIM EMS имела три версии: 3.0, 3.2 и 4.0. Первой широко внедренной версией была EMS 3.2, которая поддерживала до 8 МБ расширенной памяти и использовала части адресного пространства, обычно выделяемые для связи с периферийными устройствами ( верхняя память ), для отображения частей расширенной памяти. EEMS , стандарт управления расширенной памятью, конкурирующий с LIM EMS 3.x, был разработан AST Research , Quadram и Ashton-Tate («AQA»); он мог отображать любую область нижних 1 МБ. В конечном итоге EEMS был включен в LIM EMS 4.0, который поддерживал до 32 МБ расширенной памяти и также обеспечивал некоторую поддержку многозадачности DOS. Однако IBM создала свой собственный стандарт расширенной памяти под названием XMA .
Использование расширенной памяти стало обычным явлением в играх и бизнес-программах, таких как Lotus 1-2-3, в конце 1980-х — середине 1990-х годов, но его использование сократилось, поскольку пользователи перешли с DOS на операционные системы с защищенным режимом , такие как Linux , IBM OS/2 и Microsoft Windows .
Процессор 8088 IBM PC и IBM PC/XT мог адресовать один мегабайт (МиБ, или 2 20 байт) памяти. Он унаследовал этот предел от 20-битной внешней адресной шины (и общей архитектуры адресации памяти) Intel 8086. Разработчики ПК выделили нижние 640 КиБ (655 360 байт) адресного пространства для памяти программ чтения-записи (ОЗУ), называемой обычной памятью , а оставшиеся 384 КБ пространства памяти были зарезервированы для таких целей, как системная BIOS , видеопамять и память на платах расширения периферийных устройств.
Хотя IBM PC AT , представленный в 1984 году, использовал чип 80286 , который мог адресовать до 16 МБ ОЗУ в качестве расширенной памяти , он мог делать это только в защищенном режиме . Дефицит программного обеспечения, совместимого с защищенным режимом (ни одно стандартное приложение DOS не могло работать в нем), означал, что рынок все еще был открыт для другого решения. [1]
Чтобы сделать больше памяти доступной, была разработана схема переключения банков , где только выбранные части дополнительной памяти были доступны в любой момент времени. Первоначально использовалось одно окно памяти размером 64 КиБ (2 16 байт), называемое страничным фреймом ; позже это стало более гибким. Программы должны были быть написаны определенным образом для доступа к расширенной памяти. Окно между обычной памятью и расширенной памятью можно было настроить для доступа к различным областям в расширенной памяти.
Первая попытка использовать технологию переключения банков была предпринята компанией Tall Tree Systems с их платами JRAM [2] , но они не прижились. [1] (Позже компания Tall Tree Systems выпустила платы на базе EMS, используя ту же марку JRAM.)
Lotus Development , Intel и Microsoft объединились для разработки стандарта EMS (также известного как LIM EMS). Первая общедоступная версия EMS, версия 3.0, позволяла доступ к 4 МБ расширенной памяти. [ необходима цитата ] Это было увеличено до 8 МБ с версией 3.2 спецификации. Окончательная версия EMS, версия 4.0, увеличила максимальный объем расширенной памяти до 32 МБ и поддерживала дополнительную функциональность.
Microsoft посчитала, что переключение банков было неэлегантной и временной, но необходимой временной мерой. Ударив кулаком по столу во время интервью, Билл Гейтс сказал о расширенной памяти: «Это мусор! Это ерунда ! … Но мы собираемся это сделать». Компании планировали запустить стандарт на весенней выставке COMDEX 1985 года , и многие компании, выпускающие карты расширения и программное обеспечение, объявили о своей поддержке. [3] [4]
Первая публичная версия стандарта EMS, названная EMS 3.0, была выпущена в 1985 году; однако EMS 3.0 практически не имел аппаратных реализаций, прежде чем был заменен EMS 3.2. [1] EMS 3.2 использовал область размером 64 КБ в верхних 384 КБ ( верхняя область памяти ), разделенную на четыре страницы по 16 КБ, которые можно было использовать для отображения частей расширенной памяти. [1]
В свою очередь, EMS 3.2 была улучшена группой из трех других компаний: AST Research, Quadram и Ashton-Tate, которые создали свой собственный стандарт Enhanced EMS (EEMS). EEMS позволяла отображать любую область размером 16 КБ в нижней ОЗУ в расширенную память, если только она не была связана с прерываниями или выделенной памятью ввода-вывода, такой как сетевые или видеокарты. Таким образом, целые программы могли быть включены и выключены из дополнительной ОЗУ. EEMS также добавила поддержку двух наборов регистров отображения. Эти функции использовались ранним программным обеспечением для многозадачности DOS, таким как DESQview . Выпущенная в 1987 году спецификация LIM EMS 4.0 включала в себя практически все функции EEMS. [1]
Новая функция, добавленная в LIM EMS 4.0, заключалась в том, что платы EMS могли иметь несколько наборов регистров отображения страниц (до 64 наборов). Это позволяло реализовать примитивную форму многозадачности DOS . Однако оговорка заключалась в том, что стандарт не указывал, сколько наборов регистров должна иметь плата, поэтому в этом отношении существовала большая вариативность между аппаратными реализациями. [5]
Спецификация расширенной памяти (EMS) — это спецификация, описывающая использование расширенной памяти. Функции EMS доступны через программное прерывание 67h. Программы, использующие EMS, должны сначала установить наличие установленного менеджера расширенной памяти (EMM), проверив наличие драйвера устройства с именем устройства EMMXXXX0 .
IBM разработала свой собственный стандарт памяти под названием Expanded Memory Adapter (XMA); драйвер IBM DOS для него был XMAEM.SYS. В отличие от EMS, платы расширения IBM могли быть адресованы как с использованием расширенной модели памяти, так и как расширенная память . [6] Аппаратный интерфейс расширенной памяти, используемый платами XMA, однако, несовместим с EMS, [7] но драйвер XMA2EMS.SYS обеспечивал эмуляцию EMS для плат XMA. [6] Платы XMA были впервые представлены для моделей 3270 PC 1986 года (модернизированных) . [7]
Эта вставка окна памяти в периферийное адресное пространство изначально могла быть выполнена только с помощью специальных плат расширения, подключаемых к шине расширения ISA компьютера. Известными платами расширенной памяти 1980-х годов были AST RAMpage, IBM PS/2 80286 Memory Expansion Option, AT&T Expanded Memory Adapter и Intel Above Board. Учитывая цену оперативной памяти в тот период, достигавшую нескольких сотен долларов за МиБ, а также качество и репутацию вышеуказанных брендов, плата расширенной памяти была очень дорогой.
Позже некоторые наборы микросхем материнских плат компьютеров на базе Intel 80286 реализовали схему расширенной памяти, которая не требовала дополнительных плат, в частности набор микросхем NEAT . Обычно программные переключатели определяли, какой объем памяти следует использовать в качестве расширенной памяти , а какой — в качестве расширенной памяти .
Плата расширенной памяти, будучи аппаратным периферийным устройством, нуждалась в программном драйвере устройства , который экспортировал ее услуги. Такой драйвер устройства назывался диспетчером расширенной памяти . Его имя было переменным; ранее упомянутые платы использовали REMM.SYS (AST), PS2EMM.SYS (IBM), AEMM.SYS (AT&T) и EMM.SYS (Intel) соответственно. Позже это выражение стало ассоциироваться с программными решениями, требующими процессора Intel 80386 , например , QEMM от Quarterdeck , 386 MAX от Qualitas или EMM386 по умолчанию в MS-DOS, PC DOS и DR-DOS.
Начиная с 1986 года встроенные функции управления памятью процессора Intel 80386 свободно моделировали адресное пространство при запуске устаревшего программного обеспечения реального режима, что делало аппаратные решения ненужными. Расширенную память можно было моделировать программно.
Первой программой управления расширенной памятью (эмуляции) была CEMM , доступная в сентябре 1986 года как утилита для Compaq Deskpro 386. Популярным и хорошо оснащенным коммерческим решением была QEMM от Quarterdeck. Конкурентом была Qualitas' 386 MAX . Функциональность была позже включена в MS-DOS 4.01 в 1989 году и в DR DOS 5.0 в 1990 году, как EMM386 .
Программные менеджеры расширенной памяти в целом предлагали дополнительную, но тесно связанную функциональность. В частности, они позволяли использовать части верхней области памяти (UMA) (верхние 384 КиБ адресного пространства реального режима), называемые верхними блоками памяти (UMB), и предоставляли инструменты для загрузки небольших программ, обычно программ terminate-and-stay-resident внутри ("LOADHI" или "LOADHIGH").
Взаимодействие между расширенной памятью , эмуляцией расширенной памяти и расширителями DOS в конечном итоге регламентировалось спецификациями XMS, Virtual Control Program Interface (VCPI), DOS Protected Mode Interface (DPMI) и DOS Protected Mode Services (DPMS).
Некоторые программы эмуляции, в просторечии известные как LIMulators, вообще не полагались на материнскую плату или возможности 80386. Вместо этого они резервировали 64 КБ базовой оперативной памяти для окна расширенной памяти, куда они копировали данные в расширенную память или на жесткий диск, когда прикладные программы запрашивали переключение страниц. Это было легко реализовать программно, но производительность была низкой. Этот метод был предложен AboveDisk от Above Software и несколькими условно-бесплатными программами.
Также возможно эмулировать EMS, используя память XMS на 286 ЦП с помощью сторонних утилит, таких как EMM286 (драйвер .SYS).
Использование расширенной памяти снизилось в 1990-х годах. IBM AT Intel 80286 поддерживал 24 бита адресного пространства (16 МиБ) в защищенном режиме , а 386 поддерживал 32-битные адреса или 4 гигабайта (2 32 ) оперативной памяти — в 4096 раз больше адресного пространства оригинального 8086. Сама DOS напрямую не поддерживала защищенный режим, но Microsoft в конечном итоге разработала DPMI , и на его основе было опубликовано несколько расширителей DOS . Программы DOS, такие как Doom, могли использовать расширители, такие как DOS/4G, для работы в защищенном режиме, продолжая при этом использовать API DOS . В начале 1990-х годов новые операционные системы, такие как Linux , Windows 9x , Windows NT , OS/2 и BSD/OS, поддерживали защищенный режим «из коробки». Эти и подобные разработки сделали расширенную память устаревшей концепцией.
На других платформах реализована та же базовая концепция — дополнительная память за пределами основного адресного пространства, — но технически несовместимыми способами: