Обычная память
В управлении памятью DOS обычная память , также называемая базовой памятью , представляет собой первые 640 килобайт памяти на IBM PC или совместимых системах. Это память для чтения и записи, к которой непосредственно обращается процессор для использования операционной системой и прикладными программами. Поскольку цены на память быстро падали, это конструктивное решение стало ограничением в использовании больших объемов памяти до появления операционных систем и процессоров, которые сделали его неактуальным.
барьер 640 КБ
[ редактировать ]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 ) |
Б-блок | 12-й 64 КБ | Стандартная видеопамять ( MDA / CGA ) |
С-блок | 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 , использовавшийся в оригинальном 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] и платежная карта [10] для компьютеров класса 286/386SX, а также надстройки ECM (расширенная традиционная память) 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, использующие обычную память, включают:
- ANSI.SYS — поддержка цветного текста и различного разрешения текста.
- Adaptec SCSI и CDROM. ASPIxDOS.SYS, ASPIDISK.SYS, ASPICD.SYS — все они должны быть загружены для работы приводов
- 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 не включена:
DEVICE=C:\DOS\HIMEM.SYS DEVICE=C:\DOS\EMM386.EXE NOEMS DEVICEHIGH=C:\DOS\ANSI.SYS
AUTOEXEC.BAT , загружая MOUSE, DOSKEY и SMARTDRV в UMB, если это возможно:
LH C:\DOS\MOUSE.EXE LH C:\DOS\DOSKEY.EXE LH 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.
Наиболее известным расширителем DOS, совместимым с DPMI, может быть 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).
См. также
[ редактировать ]- Расширенная память (EMS)
- Расширенная память (XMS)
- Область высокой памяти (HMA)
- Службы защищенного режима DOS (DPMS)
- ВЫСОКАЯ НАГРУЗКА
- Длинный режим
- Ограничение ОЗУ
- Временная программная зона (TPA)
- Верхняя область памяти (UMA)
- сегментация памяти x86
- Барьер 3 ГБ
Ссылки
[ редактировать ]- ^ Нортон, Питер (1986). Внутри IBM PC, переработанное и расширенное, Брейди. ISBN 0-89303-583-1 , с. 108.
- ^ Патент США 4926322 — Программная эмуляция памяти с переключением банков с помощью виртуального монитора DOS и управления страничной памятью , рис. 1
- ^ Яо, Цзивэнь; Циммер, Винсент Дж. (февраль 2015 г.). «Белая книга: путешествие за рамки проектирования карты памяти BIOS в UEFI BIOS» (PDF) . Корпорация Интел . Архивировано из оригинала (PDF) 30 сентября 2015 г. Проверено 25 августа 2016 г.
- ^ Руссинович, Марк Евгений ; Соломон, Дэвид А.; Ионеску, Алекс (2012). Внутреннее устройство Windows . Том. Часть 2 (6-е изд.). Майкрософт Пресс . п. 322.
Обратите внимание на пробел в диапазоне адресов памяти от страницы 9F000 до страницы 100000...
- ^ Рихтер, Джеффри. Программирование приложений для Microsoft Windows . стр. 435 и далее.
- ^ Аткинсон, Сай (2001). «Что такое высокая память, почему меня это волнует и как я могу ее использовать?» . Сан-Хосе, Калифорния, США. Архивировано из оригинала 3 марта 2016 г. Проверено 13 марта 2017 г.
- ^ Перейти обратно: а б Пол, Матиас Р. (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.)
- ^ Петцольд, Чарльз (1986). «Дополнительные возможности увеличения объема памяти». Журнал ПК . Том. 5, нет. 11. ISSN 0888-8507 .
- ^ «Обзор AllCard». Мир персональных компьютеров . Сентябрь 1986 г. с. 138.
- ^ Перейти обратно: а б Зербе, Клаус (ноябрь 1987 г.). Бургвиц, Андреас (ред.). «Кредит на хранение — все платежные карты для AT». c't - журнал по компьютерным технологиям . Испытательный стенд (на немецком языке). Том 1987, № 11. Verlag Heinz Heise GmbH & Co. KG . стр. 58, 60. ISSN 0724-8679 .
- ^ Петцольд, Чарльз (16 сентября 1986 г.). «Разрушитель чисел/ECM» . Журнал ПК . Платы ускорителей. Том. 5, нет. 15. С. 148, 150. ISSN 0888-8507 . Архивировано из оригинала 03 марта 2020 г. Проверено 3 марта 2020 г.
- ^ Руководство пользователя Kontron — COMe-cBTi6R . Версия документа 1.0. Контрон . 2021. стр. 37, 60, 64. Архивировано из оригинала 23 сентября 2023 г. Проверено 23 сентября 2023 г. (89 страниц)
- ^ Патерсон, Тим (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 Микропроцессор .
- ^ «HIMEM.SYS, нереальный режим и LOADALL» . Музей OS/2 .
- ^ «Обзор функций управления памятью в MS-DOS» . Поддержка Майкрософт. 12 мая 2003 г. Архивировано из оригинала 12 февраля 2007 г. Проверено 13 августа 2012 г.
Дальнейшее чтение
[ редактировать ]- Бреннер, Рудольф (1986). «Более 640 тысяч на ПК». c't - журнал по компьютерным технологиям (на немецком языке). Том 1986, № 11. Verlag Heinz Heise GmbH & Co. KG . п. 94. ISSN 0724-8679 .
- Ланденбергер, Андреас (ноябрь 1987 г.). Уайльд, Майкл (ред.). «Загрузка со списком — память ПК более 640 КБ полностью использована». c't - журнал по компьютерным технологиям . Практический совет (на немецком языке). Том 1987, № 11. Verlag Heinz Heise GmbH & Co. KG . С. 154, 156. ISSN 0724-8679 .