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

редактировать

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

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

Содержание

  • 1 640 КБ барьер
    • 1.1 Дополнительная память
  • 2 Программное обеспечение драйвера DOS и TSR
    • 2.1 Верхние блоки памяти и высокая загрузка
    • 2.2 Оптимизация драйвера / TSR
  • 3 расширителя DOS
  • 4 См. Также
  • 5 Ссылки
  • 6 Дополнительная литература

640 КБ барьер

IBM PC, PC / XT, 3270 PC и PCjr блоки памяти
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 КБ
A-блок11-й 64 КБРасширенная видеопамять ( EGA )
B-блок12-й 64 КБСтандартная видеопамять (MDA / CGA )
C-блок13-й 64 КБРасширение ПЗУ (XT, EGA, 3270 PC)
D-блок14-й 64 КБдругое применение (картриджи PCjr, LIM EMS )
E-блок15-й 64 КБдругое применение (картриджи PCjr, LIM EMS)
F-блок16-й 64 КБСистемный ROM-BIOS и ROM-BASIC

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

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

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

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

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

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

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

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

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

Подобное использование было возможно на многих DOS-, но не IBM-совместимых компьютерах с нефрагментированной структурой памяти, например, Victor 9000 / Sirius 1 или Apricot PC, который поддерживал до 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 не включена:

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 является то, что они будут использовать разное количество обычной и / или верхней памяти в зависимости от порядка их загрузки. Это можно было бы использовать с пользой, если бы программы неоднократно загружались в разном порядке и проверяли, сколько памяти было свободно после каждой перестановки. Например, если было 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, значительно уменьшая задержку прерывания, избегая повторяющихся переключений реального режима / защищенного режима.

Windows устанавливает собственную версию HIMEM.SYS на 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).

См. Также

Ссылки

Дополнительная литература

Последняя правка сделана 2021-05-15 11:17:54
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте