Обычная память - Conventional memory

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

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

640 КБ барьер

IBM PC, ПК / XT, 3270 ПК и PCjr блоки памяти[1][2]
0-блок1-й 64 КБОбычная пользовательская память до 64 КБ (малая область памяти)
1-блок2-й 64 КБОбычная пользовательская память до 128 КБ
2-блок3-й 64 КБОбычная пользовательская память до 192 КБ
3 блока4-й 64 КБОбычная пользовательская память до 256 КБ
4-блок5-я 64 КБОбычная пользовательская память до 320 КБ
5-блок6-я 64 КБОбычная пользовательская память до 384 КБ
6-блок7-я 64 КБОбычная пользовательская память до 448 КБ
7-блок8-я 64 КБОбычная пользовательская память до 512 КБ
8-блок9-я 64 КБОбычная пользовательская память до 576 КБ
9-блок10-я 64 КБОбычная пользовательская память до 640 КБ
Блок11-я 64 КБРасширенная видеопамять (EGA )
B-блок12-я 64 КБСтандартная видеопамять (MDA /CGA )
C-блок13-я 64 КБРасширение ПЗУ (XT, EGA, 3270 ПК)
D-блок14-я 64 КБдругое применение (картриджи PCjr, LIM EMS )
Электронный блок15-я 64 КБдругое применение (картриджи PCjr, LIM EMS)
F-блок16-я 64 КБСистема ROM-BIOS и ROM-BASIC

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

Потребность в большем объеме ОЗУ росла быстрее, чем потребность в оборудовании для использования зарезервированных адресов, в результате чего ОЗУ в конечном итоге отображалось в эти неиспользуемые верхние области для использования всего доступного адресного пространства. Это вводило зарезервированную «дыру» (или несколько дыр) в набор адресов, занятых оборудованием, которые можно было использовать для произвольных данных. Избежать такой дыры было сложно и некрасиво, и никто не поддерживал ее. ДОС или большинство программ, которые могут работать на нем. Позже пространство между отверстиями будет использоваться в качестве блоков старшей памяти (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) может иметь память 256 МБ с 1 ГБ размер диафрагмы.

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

Один метод, использованный на ранней стадии IBM XT компьютеры должны были установить дополнительную ОЗУ в диапазон адресов видеопамяти и увеличить лимит до начала Монохромный дисплейный адаптер (МДА). Иногда софт или кастом адресный декодер требовалось, чтобы это работало. Это увеличило барьер до 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 КБ; одна и та же область памяти не может использоваться как для кадровый буфер видеокарты и для переходных программ.

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

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

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

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

Большинству стандартных программ, написанных для DOS, необязательно требуется 640 КБ или более памяти. Вместо этого программное обеспечение драйверов и служебные программы, называемые Прекратить и остаться резидентом Программы (TSR) могут использоваться в дополнение к стандартному программному обеспечению DOS. Эти драйверы и утилиты обычно постоянно использовали некоторую обычную память, уменьшая общий объем доступной для стандартных программ 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 могут быть загружены высоко, используя"НАГРУЗКА ВЫСОКАЯ ", "LH " или же "HILOAD "директивы. Если операция не удалась, драйвер или TSR вместо этого автоматически загрузятся в обычную обычную память.

CONFIG.SYS, загрузка ANSI.SYS в UMB, без поддержки EMS:

УСТРОЙСТВО = C:  DOS  HIMEM.SYSDEVICE = 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) через ДОС Команда = 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 и выше ЗАГРУЗИТЬ для изменения недокументированных внутренних регистров на 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).

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

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

  1. ^ Нортон, Питер (1986). Внутри IBM PC, Revised и Enlarged, Брэди. ISBN  0-89303-583-1, п. 108.
  2. ^ Патент США 4926322 - Программная эмуляция памяти с переключением банков с использованием виртуального монитора DOS и управления страничной памятью, Рисунок 1
  3. ^ Яо, Джевен; Циммер, Винсент Дж. (Февраль 2015 г.). «Информационный документ: Экскурсия за пределы проектирования карты памяти BIOS в UEFI BIOS» (PDF). Корпорация Intel. Архивировано из оригинал (PDF) в 2015-09-30. Получено 2016-08-25.
  4. ^ Руссинович, Марк Евгений; Соломон, Дэвид А .; Ионеску, Алекс (2012). Внутреннее устройство Windows. Часть 2 (6-е изд.). Microsoft Press. п. 322. Обратите внимание на пробел в диапазоне адресов памяти от страницы 9F000 до страницы 100000 ...
  5. ^ Рихтер, Джеффри. Приложения для программирования для Microsoft Windows. С. 435 и сл.
  6. ^ Аткинсон, Сай (2001). «Что такое High Memory, зачем мне это нужно и как я могу ее использовать?». Сан-Хосе, Калифорния, США. Архивировано из оригинал на 2016-03-03. Получено 2017-03-13.
  7. ^ а б Пол, Матиас Р. (1997-07-30). NWDOS-TIPs - Советы и приемы для Novell DOS 7, с подробностями, исправлениями и обходными путями Blick auf undokumentierte [NWDOSTIPs - Советы и приемы для Novell DOS 7, с особым вниманием к недокументированным деталям, ошибкам и обходным путям.]. MPDOSTIP. Выпуск 157 (на немецком языке) (3-е изд.). В архиве из оригинала от 06.06.2016. Получено 2016-06-06. (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. ^ а б Зербе, Клаус (ноябрь 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. В архиве из оригинала 2020-03-03. Получено 2020-03-03.
  12. ^ http://www.os2museum.com/wp/himem-sys-unreal-mode-and-loadall/
  13. ^ «Обзор функций управления памятью в MS-DOS». Support.microsoft.com. 2003-05-12. Получено 2012-08-13.

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