Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Барьер 640 КБ [ править ]

640 КБ барьера является архитектурным ограничением IBM PC совместимых персональных компьютеров. Процессор Intel 8088 , использовавшийся в оригинальном IBM PC , мог адресовать 1 МБ (2 20  байтов), поскольку чип предлагал 20 адресных строк . В конструкции ПК память менее 640 КБ предназначалась для оперативной памяти на материнской плате или на платах расширения и называлась обычной областью памяти.Первый сегмент памяти (64 КБ) обычной области памяти называется нижней памятью или нижней областью памяти . Оставшиеся 384 КБ за пределами обычной области памяти, называемой областью верхней памяти (UMA), были зарезервированы для использования системой и дополнительными устройствами. UMA использовался для ROM 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 ), которые используют виртуальную память , потому что они вообще не осведомлены об адресах физической памяти. Вместо этого они работают в виртуальном адресном пространстве, которое определяется независимо от доступных адресов RAM. [5]

На некоторых материнских платах есть опция «Отверстие для памяти на 15 мегабайт», необходимая для определенных видеокарт VGA, которым требуется монопольный доступ к одному конкретному мегабайту видеопамяти. Новые видеокарты на шине AGP (PCI memory space) могут иметь 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, потому что видеопамять с расширенным графическим адаптером (EGA) находилась непосредственно рядом с обычной областью памяти ниже линии 640 КБ; одна и та же область памяти не могла использоваться как для кадрового буфера видеокарты, так и для переходных программ.

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

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

Подобное использование было возможно на многих DOS-совместимых, но не IBM-совместимых компьютерах с нефрагментированной компоновкой памяти, например Victor 9000 / Sirius 1 или ПК Apricot, который поддерживал до 896 КБ непрерывной памяти DOS для использования в своей пользовательской версии. MS-DOS.

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

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

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

  • ANSI.SYS - поддержка цветного текста и различного разрешения текста
  • ASPIxDOS.SYS, ASPIDISK.SYS, ASPICD.SYS - все должны быть загружены для работы дисководов Adaptec SCSI и CDROM.
  • DOSKEY.EXE - позволяет вызывать ранее набранные команды DOS с помощью стрелки вверх
  • LSL.EXE, E100BODI.EXE (или другой сетевой драйвер), IPXODI.EXE, NETX.EXE - все они должны быть загружены для доступа по букве диска файлового сервера NetWare
  • MOUSE.EXE - поддержка устройств мыши в программах DOS
  • MSCDEX.EXE - поддержка доступа к дисководу CDROM и буквы диска, используется в сочетании с отдельным драйвером, зависящим от производителя. Требуется в дополнение к указанным выше драйверам SCSI для доступа к устройству SCSI CDROM.
  • SBCONFIG.EXE - поддержка аудиоустройства Sound Blaster 16 ; Драйвер с другим названием использовался для различных других звуковых карт, также занимающих обычную память.
  • SMARTDRV.EXE - установить кэш диска для ускорения чтения и записи на диск; хотя он мог выделить несколько мегабайт памяти сверх 640 КБ для кэширования диска, для работы ему по-прежнему требовалась небольшая часть обычной памяти.

Как видно выше, многие из этих драйверов и 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, если это возможно:

LH C: \ DOS \ MOUSE.EXELH C: \ DOS \ DOSKEY.EXELH C: \ DOS \ SMARTDRV.EXE

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

Оптимизация драйвера / TSR [ править ]

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

Необычным аспектом драйверов и TSR является то, что они используют разное количество обычной и / или верхней памяти в зависимости от порядка их загрузки. Это можно было бы использовать с пользой, если бы программы неоднократно загружались в разном порядке и проверяли, сколько памяти было свободно после каждой перестановки. Например, если было 50 КБ UMB и 10 КБ UMB, и были загружены программы, требующие 8 КБ и 45 КБ, 8 КБ могут уйти в 50 КБ UMB, предотвращая загрузку второй. Более поздние версии 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, что значительно улучшило задержку прерывания, избегая повторяющихся переключений реального режима / защищенного режима. [12]

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

См. Также [ править ]

  • Расширенная память (EMS)
  • Расширенная память (XMS)
  • Область верхней памяти (HMA)
  • Службы защищенного режима DOS (DPMS)
  • НАГРУЗКА ВЫСОКАЯ
  • Длинный режим
  • Ограничение RAM
  • Временная программная область (TPA)
  • Верхняя область памяти (UMA)
  • сегментация памяти x86
  • Барьер 3 ГБ

Ссылки [ править ]

  1. ^ Нортон, Питер (1986). Внутри IBM PC, Revised и Enlarged, Брэди. ISBN  0-89303-583-1 , стр. 108.
  2. ^ Патент США 4926322 - Программная эмуляция памяти банка с коммутацией каналов , используя виртуальный монитор DOS и страничной управление памятью , рис 1.
  3. ^ Яо, Дживен; Циммер, Винсент Дж. (Февраль 2015 г.). «Информационный документ: Экскурсия за пределы проектирования карты памяти BIOS в UEFI BIOS» (PDF) . Корпорация Intel . Архивировано из оригинального (PDF) 30 сентября 2015 года . Проверено 25 августа 2016 .
  4. ^ Руссинович, Марк Евгений ; Соломон, Дэвид А .; Ионеску, Алекс (2012). Внутреннее устройство Windows . Часть 2 (6-е изд.). Microsoft Press . п. 322. Обратите внимание на пробел в диапазоне адресов памяти от страницы 9F000 до страницы 100000 ...
  5. ^ Рихтер, Джеффри. Приложения для программирования для Microsoft Windows . стр. 435 и сл.
  6. Перейти ↑ Atkinson, Cy (2001). «Что такое High Memory, зачем мне это нужно и как я могу ее использовать?» . Сан-Хосе, Калифорния, США. Архивировано из оригинала на 2016-03-03 . Проверено 13 марта 2017 .
  7. ^ a b Пол, Маттиас Р. (1997-07-30). NWDOS-TIPs - Советы и приемы для Novell DOS 7, MIT Blick auf undokumentierte Details, Bugs and Workarounds [ NWDOSTIPs - Советы и приемы для Novell DOS 7, с особым вниманием к недокументированным деталям, ошибкам и обходным путям ]. MPDOSTIP . Выпуск 157 (на немецком языке) (3-е изд.). Архивировано 6 июня 2016 года . Проверено 6 июня 2016 .(NB. NWDOSTIP.TXT - это комплексная работа по Novell DOS 7 и OpenDOS 7.01 , включая описание многих недокументированных функций и внутренних компонентов. Она является частью еще более обширной коллекции автора MPDOSTIP.ZIP, поддерживаемой до 2001 г. и распространяемой на многих сайтах по адресу время. Приведенная ссылка указывает на старую версию файла NWDOSTIP.TXT, преобразованную в HTML.)
  8. ^ Петцольд, Чарльз (1986). «Дополнительные возможности для увеличения размеров памяти». Журнал ПК . Vol. 5 шт. 11. ISSN 0888-8507 . 
  9. ^ "Обзор AllCard". Мир персональных компьютеров . Сентябрь 1986 г. с. 138.
  10. ^ a b Зербе, Клаус (ноябрь 1987 г.). Бургвиц, Андреас (ред.). «Speicher-Kredit - All Chargecard для банкоматов». c't - магазин компьютерной техники . Prüfstand (на немецком языке). Vol. 1987 г. 11. Verlag Heinz Heise GmbH & Co. KG . С. 58, 60. ISSN 0724-8679 . 
  11. ^ Петцольд, Чарльз (1986-09-16). "Number Smasher / ECM" . Журнал ПК . Платы ускорителей. Vol. 5 шт. 15. С. 148, 150. ISSN 0888-8507 . Архивировано 03 марта 2020 года . Проверено 3 марта 2020 . 
  12. ^ http://www.os2museum.com/wp/himem-sys-unreal-mode-and-loadall/
  13. ^ «Обзор функций управления памятью в MS-DOS» . Support.microsoft.com. 2003-05-12 . Проверено 13 августа 2012 .

Дальнейшее чтение [ править ]

  • Бреннер, Рудольф (1986). «Мехр als 640 K в ПК». c't - магазин компьютерной техники (на немецком языке). Vol. 1986 г. 11. Verlag Heinz Heise GmbH & Co. KG . п. 94. ISSN  0724-8679 .
  • Ланденбергер, Андреас (ноябрь 1987 г.). Уайльд, Майкл (ред.). «Booten mit List - PC-Speicher über 640 KB voll genutzt». c't - магазин компьютерной техники . Праксистип (на немецком языке). Vol. 1987 г. 11. Verlag Heinz Heise GmbH & Co. KG . С. 154, 156. ISSN  0724-8679 .