stringtranslate.com

Обычная память

Области памяти семейства IBM PC

В управлении памятью DOS обычная память , также называемая базовой памятью , представляет собой первые 640 килобайт памяти на IBM PC или совместимых системах. Это память для чтения и записи, напрямую адресуемая процессором для использования операционной системой и прикладными программами. Поскольку цены на память быстро падали, это проектное решение стало ограничением в использовании больших объемов памяти до появления операционных систем и процессоров, которые сделали его неактуальным.

барьер 640 КБ

Барьер в 640 КБ является архитектурным ограничением компьютеров, совместимых с IBM PC . ЦП Intel 8088 , использовавшийся в оригинальном IBM PC , мог адресовать 1 МБ (2 20  байт), поскольку чип предлагал 20 адресных строк . В конструкции ПК память ниже 640 КБ предназначалась для оперативной памяти на материнской плате или на платах расширения и называлась обычной областью памяти.Первый сегмент памяти (64 КБ) обычной области памяти называется нижней памятью или нижней областью памяти . Остальные 384 КБ сверх обычной области памяти, называемые верхней областью памяти (UMA), были зарезервированы для использования системой и дополнительными устройствами. UMA использовался для ПЗУ BIOS , дополнительной постоянной памяти , расширений BIOS для фиксированных дисков и видеоадаптеров, памяти видеоадаптера и других отображаемых в памяти устройств ввода и вывода . В конструкции оригинального IBM PC карта памяти цветного графического адаптера (CGA) была размещена в UMA.

Потребность в большем объеме оперативной памяти росла быстрее, чем потребность оборудования в использовании зарезервированных адресов, в результате чего ОЗУ в конечном итоге отображалось в эти неиспользуемые верхние области, чтобы использовать все доступное адресуемое пространство. Это привело к появлению зарезервированной «дыры» (или нескольких дыр) в наборе адресов, занимаемых оборудованием, которые можно было использовать для произвольных данных. Избежать такой дыры было сложно и некрасиво, и это не поддерживалось ни DOS , ни большинством программ, которые могли на ней работать. Позже пространство между отверстиями будет использоваться в качестве верхних блоков памяти (UMB).

Для обеспечения совместимости со старыми операционными системами и приложениями барьер в 640 КБ оставался частью конструкции ПК даже после замены 8086/8088 процессором Intel 80286 , который мог адресовать до 16 МБ памяти в защищенном режиме . Барьер в 1 МБ также сохранялся до тех пор, пока 286 работал в реальном режиме , поскольку DOS требовал реального режима, в котором регистры сегмента и смещения используются перекрывающимся образом, так что адреса с длиной более 20 бит невозможны. Он до сих пор присутствует в компьютерах, совместимых с IBM PC, если они работают в реальном режиме, например, используемом DOS. Даже на самых современных компьютерах Intel по-прежнему зарезервировано пространство от 640 до 1024  КБ . [3] [4] Однако это невидимо для программ (или даже большинства операционных систем) в новых операционных системах (таких как Windows , Linux или Mac OS X ), которые используют виртуальную память , поскольку они не знают о физической памяти. адреса вообще. Вместо этого они работают в виртуальном адресном пространстве, которое определяется независимо от доступных адресов ОЗУ. [5]

На некоторых материнских платах имеется опция «Отверстие памяти на 15 мегабайт», необходимая для некоторых видеокарт VGA, которым требуется эксклюзивный доступ к одному конкретному мегабайту видеопамяти. Более поздние видеокарты, использующие шину AGP (пространство памяти PCI), могут иметь объем памяти 256 МБ с размером апертуры 1 ГБ .

Дополнительная память

Один из методов, использовавшихся на ранних компьютерах IBM XT , заключался в установке дополнительной оперативной памяти в диапазон адресов видеопамяти и увеличении предела до начала адаптера монохромного дисплея (MDA). Иногда для этого требовалось программное обеспечение или специальный декодер адресов . Это сдвинуло барьер до 704 КБ (с MDA/HGC) или 736 КБ (с CGA). [6] [7]

Менеджеры памяти в системах на базе 386 (таких как QEMM или MEMMAX (+V) в DR-DOS ) могли бы добиться того же эффекта, добавив традиционную память на 640 КБ и сдвинув барьер до 704 КБ (до сегмента B000, начала MDA/HGC) или 736 КБ (до сегмента B800, начала CGA). [7] В этой ситуации можно было использовать только CGA, поскольку видеопамять Enhanced Graphics Adaptor (EGA) непосредственно примыкала к области обычной памяти ниже линии 640 КБ; одна и та же область памяти не могла использоваться как для кадрового буфера видеокарты, так и для временных программ.

Дополнительные блоки управления памятью для всех компьютеров AllCard для XT- [8] [9] и Chargecard [10] для компьютеров класса 286/386SX, а также надстройка ECM (Extended Conventional Memory) от MicroWay. [11] позволяли отображать обычную память в диапазоне адресов A0000–EFFFF ( шестнадцатеричный ), что давало до 952 КБ для программ DOS. Такие программы, как Lotus 1-2-3 , которые обращались напрямую к видеопамяти, необходимо было пропатчить для обработки такого расположения памяти. Таким образом, барьер в 640 КБ был устранен за счет аппаратной совместимости. [10]

Также было возможно использовать перенаправление консоли [12] (либо путем указания альтернативного консольного устройства, такого как AUX: при первоначальном вызове COMMAND.COM , либо с помощью CTTY позже) для направления вывода и получения ввода от тупого терминала или другого компьютера, работающего эмулятор терминала . Если предположить, что BIOS системы по-прежнему разрешает загрузку машины (что часто имеет место, по крайней мере, в случае с BIOS для встраиваемых ПК), видеокарту в так называемом безголовом компьютере можно затем полностью удалить, и система сможет предоставить в общей сложности 960 КБ. постоянной памяти DOS для загрузки программ.

Подобное использование было возможно на многих DOS-, но не IBM-совместимых компьютерах с нефрагментированной структурой памяти, например, в шинных системах SCP S-100, оснащенных платой ЦП 8086 CP-200B и до шестнадцати карт памяти SCP 110A (с 64 КБ ОЗУ на каждом из них) в общей сложности до 1024 КБ (без видеокарты, но с использованием перенаправления консоли и после сопоставления загрузочного ПЗУ/BIOS), [13] Victor 9000 / Sirius 1 , который поддерживал до 896 КБ или ПК Apricot с более непрерывной памятью DOS для использования под собственной версией MS-DOS.

Программное обеспечение драйверов DOS и TSR

Большинству стандартных программ, написанных для DOS, не обязательно требовалось 640 КБ или более памяти. Вместо этого в дополнение к стандартному программному обеспечению DOS можно использовать программное обеспечение драйверов и утилиты, называемые резидентными программами завершения и пребывания (TSR). Эти драйверы и утилиты обычно постоянно использовали часть обычной памяти, уменьшая общий объем, доступный для стандартных программ DOS.

Некоторые очень распространенные драйверы DOS и TSR, использующие обычную память, включают:

Как видно выше, многие из этих драйверов и TSR можно считать практически необходимыми для полнофункциональной работы системы. Но во многих случаях пользователю компьютера приходилось делать выбор: иметь ли возможность запускать определенные стандартные программы DOS или загружать все свои любимые драйверы и TSR. Загрузка всего приведенного выше списка, скорее всего, либо нецелесообразна, либо невозможна, если пользователь также хочет запустить и стандартную программу DOS.

В некоторых случаях драйверы или TSR необходимо выгружать из памяти для запуска определенных программ, а затем перезагружать после запуска программы. Для драйверов, которые нельзя было выгрузить, более поздние версии DOS включали возможность меню запуска, позволяющую пользователю компьютера выбирать различные группы драйверов и TSR для загрузки перед запуском определенных стандартных программ DOS с большим использованием памяти.

Верхние блоки памяти и высокая загрузка

По мере того, как в конце 1980-х и начале 1990-х годов приложения DOS становились больше и сложнее, стало обычной практикой освобождать обычную память путем перемещения драйверов устройств и программ TSR в блоки верхней памяти (UMB) в верхней области памяти (UMA) при загрузке. , чтобы максимально увеличить объем обычной памяти, доступной для приложений. Преимущество этого подхода заключалось в том, что он не требовал изменений в оборудовании и сохранял совместимость приложений.

Эта функция была впервые предоставлена ​​сторонними продуктами, такими как QEMM , а затем была встроена в DR DOS 5.0 в 1990 году, а затем в MS-DOS 5.0 в 1991 году. Большинство пользователей использовали сопутствующий драйвер EMM386, включенный в MS-DOS 5, но продукты сторонних производителей от таких компаний, как QEMM, также оказались популярными.

При запуске драйверы могут быть загружены с высоким уровнем с помощью директивы « DEVICEHIGH =», а TSR могут быть загружены с высоким уровнем с помощью директив « LOADHIGH », « LH » или « HILOAD ». Если операция не удалась, вместо этого драйвер или TSR автоматически загрузятся в обычную традиционную память.

CONFIG.SYS , загрузка ANSI.SYS в UMB, поддержка EMS не включена:

УСТРОЙСТВО=C:\DOS\HIMEM.SYSУСТРОЙСТВО=C:\DOS\EMM386.EXE NOEMSDEVICEHIGH=C:\DOS\ANSI.SYS

AUTOEXEC.BAT , загружая MOUSE, DOSKEY и SMARTDRV в UMB, если это возможно:

Левый C:\DOS\MOUSE.EXEЛевый C:\DOS\DOSKEY.EXEЛевый C:\DOS\SMARTDRV.EXE

Способность DOS версий 5.0 и более поздних версий перемещать собственный код ядра системы в область верхней памяти (HMA) с помощью команды DOS =HIGH дала еще один стимул для свободной памяти.

Оптимизация драйверов и TSR

Платы аппаратного расширения могли использовать любую верхнюю область памяти для адресации ПЗУ, поэтому верхние блоки памяти имели переменный размер и находились в разных местах для каждого компьютера, в зависимости от установленного оборудования. Некоторые окна верхней памяти могут быть большими, а другие маленькими. При высокой загрузке драйверов и TSR выбирается блок и попытка вписать в него программу до тех пор, пока блок не будет найден там, где он подходит, или пока он не попадет в обычную память.

Необычным аспектом драйверов и TSR является то, что они будут использовать разные объемы обычной и/или верхней памяти в зависимости от порядка их загрузки. Это можно было бы использовать с пользой, если бы программы неоднократно загружались в разном порядке и проверялись, сколько памяти свободно после каждой перестановки. Например, если существовали UMB размером 50 КБ и UMB 10 КБ, и были загружены программы, требующие 8 КБ и 45 КБ, 8 КБ могли бы перейти в UMB 50 КБ, предотвращая загрузку второго. Более поздние версии DOS позволяли использовать определенный адрес загрузки для драйвера или TSR, чтобы более тесно соединить драйверы и TSR.

В MS-DOS 6.0 Microsoft представила MEMMAKER, который автоматизировал этот процесс сопоставления блоков, соответствующий функциональности, предлагаемой сторонними менеджерами памяти . Эта автоматическая оптимизация часто еще не давала того же результата, что и ручная оптимизация, в смысле обеспечения наибольшего количества свободной обычной памяти.

Также в некоторых случаях сторонние компании писали специальные многофункциональные драйверы, которые объединяли возможности нескольких стандартных драйверов DOS и TSR в одну очень компактную программу, занимающую всего несколько килобайт памяти. Например, функции драйвера мыши, драйвера CD-ROM, поддержки ANSI, вызова команд DOSKEY и кэширования диска будут объединены в одной программе, потребляющей всего 1–2 килобайта обычной памяти для нормального доступа к драйверам/прерываниям и сохранение остального кода многофункциональной программы в памяти EMS или XMS.

расширители DOS

Барьер был преодолен только с появлением расширителей DOS , которые позволяли приложениям DOS работать в 16-битном или 32-битном защищенном режиме , но они не получили широкого распространения за пределами компьютерных игр . С 32-битным расширителем DOS игра может извлечь выгоду из 32-битного плоского адресного пространства и полного 32-битного набора команд без префиксов переопределения операндов/адресов 66h/67h. 32-битные расширители DOS требовали поддержки компилятора (32-битные компиляторы), в то время как XMS и EMS работали со старым компилятором, ориентированным на 16-битные приложения DOS реального режима. Двумя наиболее распространенными спецификациями расширителей DOS были VCPI , а позже и DPMI , совместимые с Windows 3.x.

Наиболее известным DPMI-совместимым расширителем DOS может быть DOS/4GW , поставляемый с Watcom . Это было очень распространено в играх для DOS. Такая игра будет состоять либо из 32-битного ядра DOS/4GW, либо из заглушки, которая загружает ядро ​​DOS/4GW, расположенное по пути или в том же каталоге, и 32-битный «линейный исполняемый файл». Доступны утилиты, которые могут исключить DOS/4GW из такой программы и позволить пользователю экспериментировать с любым из нескольких и, возможно, улучшенными клонами DOS/4GW.

До появления расширителей DOS, если пользователь устанавливал дополнительную память и хотел использовать ее под DOS, ему сначала нужно было установить и настроить драйверы для поддержки либо спецификации расширенной памяти (EMS), либо спецификации расширенной памяти (XMS), а также запустить программы, поддерживающие одну из них. эти спецификации.

EMS была спецификацией, доступной на всех ПК, в том числе на базе Intel 8086 и Intel 8088 , которая позволяла дополнительному оборудованию выполнять подкачку небольших фрагментов памяти внутрь и наружу ( переключение банков ) адресного пространства «реального режима» (0x0400– 0xFFFF). Это позволяло 16-битным программам DOS реального режима получать доступ к нескольким мегабайтам оперативной памяти через дыру в реальной памяти, обычно (0xE000–0xEFFF). Тогда программа должна будет явно запросить доступ к странице перед ее использованием. Эти ячейки памяти затем можно было использовать произвольно, пока они не были заменены другой страницей. Это очень похоже на современную страничную виртуальную память . Однако в системе виртуальной памяти все операции подкачки обрабатывает операционная система , тогда как в EMS подкачка была явной.

XMS предоставил базовый протокол, который позволял 16-битным программам DOS загружать фрагменты расширенной памяти 80286 или 80386 в нижнюю память (адреса 0x0400–0xFFFF). Типичный драйвер XMS должен был перейти в защищенный режим, чтобы загрузить эту память. Проблема с этим подходом заключается в том, что в защищенном режиме 286 прямые вызовы DOS не могут быть выполнены. Обходной путь заключался в реализации механизма обратного вызова, требующего сброса 286. На 286 это была серьезная проблема. Intel 80386 , который представил « виртуальный режим 8086 », позволил гостевому ядру эмулировать 8086 и запустить операционную систему хоста без необходимости фактического принудительного возврата процессора в «реальный режим». HIMEM.SYS 2.03 и более поздние версии использовали нереальный режим на процессорах 80386 и более поздних версиях, в то время как HIMEM.SYS 2.06 и более поздние версии использовали LOADALL для изменения недокументированных внутренних регистров на 80286, что значительно улучшало задержку прерываний за счет предотвращения повторных переключений реального режима/защищенного режима. [14]

Windows устанавливает собственную версию HIMEM.SYS [15] в DOS 3.3 и выше. Windows HIMEM.SYS запускает 32-битный поставщик служб XMS (n).0 в защищенном режиме для диспетчера виртуальных машин Windows, который затем предоставляет службы XMS (n-1).0 для компьютеров DOS и 16-битной машины Windows (например, DOS). 7 HIMEM.SYS — это XMS 3.0, но запуск команды «MEM» в окне DOS Windows 95 показывает информацию XMS 2.0).

Смотрите также

Рекомендации

  1. ^ Нортон, Питер (1986). Внутри IBM PC, переработанное и расширенное, Брейди. ISBN  0-89303-583-1 , с. 108.
  2. ^ Патент США 4926322Программная эмуляция памяти с переключением банков с помощью виртуального монитора DOS и управления страничной памятью , рис. 1
  3. ^ Яо, Дживен; Циммер, Винсент Дж. (февраль 2015 г.). «Белая книга: путешествие за рамки проектирования карты памяти BIOS в UEFI BIOS» (PDF) . Корпорация Интел . Архивировано из оригинала (PDF) 30 сентября 2015 г. Проверено 25 августа 2016 г.
  4. ^ Руссинович, Марк Евгений ; Соломон, Дэвид А.; Ионеску, Алекс (2012). Внутреннее устройство Windows . Том. Часть 2 (6-е изд.). Майкрософт Пресс . п. 322. Обратите внимание на разрыв в диапазоне адресов памяти от страницы 9F000 до страницы 100000...
  5. ^ Рихтер, Джеффри. Программирование приложений для Microsoft Windows . стр. 435 и далее.
  6. ^ Аткинсон, Сай (2001). «Что такое высокая память, почему меня это волнует и как я могу ее использовать?». Сан-Хосе, Калифорния, США. Архивировано из оригинала 3 марта 2016 г. Проверено 13 марта 2017 г.
  7. ^ аб Пол, Матиас Р. (30 июля 1997 г.). NWDOS-TIPs — Советы и подсказки для Novell DOS 7, с просмотром недокументированных подробностей, ошибок и обходных путей [ NWDOSTIPs — Советы и подсказки для Novell DOS 7, с особым акцентом на недокументированные детали, ошибки и обходные пути ]. MPDOSTIP (на немецком языке) (3-е изд.). Архивировано из оригинала 6 июня 2016 г. Проверено 6 июня 2016 г.(Примечание. NWDOSTIP.TXT — это всеобъемлющая работа по Novell DOS 7 и OpenDOS 7.01 , включая описание многих недокументированных функций и внутренних устройств. Это часть еще более обширной авторской коллекции MPDOSTIP.ZIP, которая поддерживалась до 2001 года и распространялась на многих сайтах по адресу: время. Предоставленная ссылка указывает на более старую версию файла NWDOSTIP.TXT, преобразованную в HTML.)
  8. ^ Петцольд, Чарльз (1986). «Дополнительные возможности увеличения объема памяти». Журнал ПК . Том. 5, нет. 11. ISSN  0888-8507.
  9. ^ "Обзор AllCard" . Мир персональных компьютеров . Сентябрь 1986 г. с. 138.
  10. ^ Аб Зербе, Клаус (ноябрь 1987 г.). Бургвиц, Андреас (ред.). «Speicher-Kredit - Все платежные карты для АТ». c't - магазин компьютерной техники . Прюфштанд (на немецком языке). Том. 1987, нет. 11. Верлаг Хайнц Хайзе ГмбХ и Ко. КГ . стр. 58, 60. ISSN  0724-8679.
  11. ^ Петцольд, Чарльз (16 сентября 1986). «Разрушитель чисел / ECM». Журнал ПК . Платы ускорителей. Том. 5, нет. 15. С. 148, 150. ISSN  0888-8507. Архивировано из оригинала 03 марта 2020 г. Проверено 3 марта 2020 г.
  12. ^ Руководство пользователя Kontron — COMe-cBTi6R. Версия документа 1.0. Контрон . 2021. стр. 37, 60, 64. Архивировано из оригинала 23 сентября 2023 г. Проверено 23 сентября 2023 г.(89 страниц)
  13. ^ Патерсон, Тим (24 ноября 2007 г.). «Первая DOS-машина». Досман дрель . Архивировано из оригинала 18 сентября 2021 г. Проверено 23 декабря 2021 г. IBM также вновь ввела ограничения на память, которых я специально избегал при разработке [карты] ЦП 8086. Для компьютеров С-100 недорогой альтернативой использованию обычного компьютерного терминала было использование видеокарты. Однако видеокарта использовала часть адресного пространства памяти. Загрузочное ПЗУ обычно также использует адресное пространство. Системы SCP были разработаны для использования с терминалом, и загрузочное ПЗУ можно было отключить после загрузки. Это сделало весь 1 МБ адресного пространства памяти доступным для ОЗУ. IBM, с другой стороны, ограничила адресное пространство своего ПК до 640 КБ ОЗУ из-за видео и загрузочного ПЗУ/BIOS. Это ограничение было названо «барьером DOS 640K», но оно не имело ничего общего с DOS . Microsoft в полной мере воспользовалась возможностями системы SCP . В 1988 году, спустя годы после закрытия SCP, они всё ещё использовали систему SCP для одной задачи, которую могла выполнить только она («связывание компоновщика»). Их машина была оснащена полным 1 МБ оперативной памяти – 16 картами по 64 КБ. Эту машину нельзя было вывести из эксплуатации до тех пор, пока не были разработаны 32-битные программные средства для микропроцессора Intel 386 .
  14. ^ «HIMEM.SYS, нереальный режим и музей LOADALL | OS/2» .
  15. ^ «Обзор функций управления памятью в MS-DOS». Support.microsoft.com. 12 мая 2003 г. Проверено 13 августа 2012 г.

дальнейшее чтение