Управление памятью DOS - DOS memory management

Области физической памяти семейства IBM PC

В Совместимость с IBM PC вычисления Управление памятью DOS относится к программному обеспечению и методам, используемым для предоставления приложениям доступа к более чем 640 кибибайты (640 * 1024 байт) (КиБ) «обычной памяти». Ограничение в 640 КиБ было специфическим для IBM PC и близко совместимых устройств; другие машины работают MS-DOS имели разные ограничения, например Абрикосовый ПК может иметь до 768 КБ и Сириус Виктор 9000, 896 Кбайт. Управление памятью в семействе IBM было усложнено из-за необходимости поддерживать обратную совместимость с исходной конструкцией ПК.[1] и реальный режим DOS, позволяя пользователям компьютеров пользоваться преимуществами больших объемов дешевой памяти и процессоров нового поколения. Поскольку DOS уступила место Майкрософт Виндоус и другие 32-битные операционные системы, не ограниченные исходным произвольным пределом 640 КиБ для IBM PC, управление памятью персонального компьютера больше не требует от пользователя ручного управления внутренними настройками и параметрами системы.

Ограничение в 640 КиБ сильно усложнило аппаратное и программное обеспечение, предназначенное для его обхода; Физическая память в машине может быть организована как комбинация базовой или обычной памяти (включая нижнюю память), верхней памяти, верхней памяти (не такой же, как верхняя память), расширенной памяти и расширенной памяти, и все они обрабатываются по-разному.

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

В Intel 8088 процессор, использовавшийся в исходном IBM PC, имел 20 адресных строк и поэтому мог напрямую адресовать 1 МиБ (220 байтов) памяти. Различные области этого адресного пространства были выделены для разных видов памяти, используемых для разных целей. Начиная с самого нижнего конца адресного пространства, ПК имел чтение / запись оперативная память (RAM), которая использовалась DOS и прикладными программами. Первая часть этой памяти была установлена ​​на материнской плате системы (на очень ранних машинах 64 КиБ, позже измененная на 256 КБ). Дополнительная память может быть добавлена ​​с помощью карт, вставленных в слоты расширения; каждая карта содержала перемычки или переключатели для управления тем, какая часть адресного пространства обращается к памяти и устройствам на этой карте.

На IBM PC все адресное пространство размером до 640 КБ было доступно для ОЗУ. Эта часть адресного пространства называется «обычной памятью», поскольку она доступна для всех версий DOS автоматически при запуске. Сегмент 0, первые 64 КБ обычной памяти, также называется низкая область памяти. Обычно расширяемая память устанавливается в адресном пространстве смежно с памятью на материнской плате. Если бы между памятью материнской платы и расширяющей памятью существовал нераспределенный промежуток, память не определялась бы автоматически как пригодная для использования DOS.

Верхняя область памяти

Область верхней памяти (UMA) относится к адресному пространству от 640 до 1024 КиБ (0xA0000–0xFFFFF). На этом участке определены три региона по 128 КиБ. Область 128 КБ между 0xA0000 и 0xBFFFF была зарезервирована для видеоадаптер экранная память. Физическое адресное пространство между 0xC0000 и 0xDFFFF было зарезервировано для устройства. BIOS ПЗУ, а также специальная ОЗУ, обычно совместно используемая с физическими устройствами (например, общая память для Сетевой адаптер ). IBM PC зарезервировал верхние 128 КиБ адресного пространства от 0xE0000 до 0xFFFFF для ROM BIOS и Кассета BASIC постоянная память (ПЗУ).

Например, монохромный видеоадаптер размер области памяти составлял от 704 до 736 КБ (0xB0000–0xB7FFF). Если бы использовался только монохромный адаптер дисплея, адресное пространство между 0xA0000 и 0xAFFFF можно было бы использовать для ОЗУ, которое было бы смежным с обычной памятью.[2]

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

Поскольку карта расширения, такая как видеоадаптер, контроллер жесткого диска, или сетевой адаптер мог использовать выделение памяти во многих верхних областях памяти, настройка некоторых комбинаций карт требовала внимательного чтения документации или экспериментов, чтобы найти настройки карты и отображение памяти это сработало. Сопоставление двух устройств с одинаковыми адресами физической памяти может привести к остановке или нестабильности системы.[2] Не все адреса в области верхней памяти использовались в типичной системе; неиспользуемые физические адреса возвращают неопределенные и системные данные, если к ним обращается процессор.

Расширенная память

По мере снижения цен на память прикладные программы, такие как электронные таблицы и компьютерное черчение были изменены, чтобы использовать все больше и больше физической памяти в системе. Виртуальная память в 8088 и 8086 не поддерживалось аппаратным обеспечением процессора, а дисковые технологии того времени делали его слишком медленным и громоздким, чтобы быть практичным. Расширенная память - это система, которая позволяла прикладным программам получать доступ к большему объему оперативной памяти, чем напрямую видна в адресном пространстве процессора. Процесс был формой переключение банка. Когда требовалась дополнительная оперативная память, Водитель программное обеспечение временно сделало бы часть расширенной памяти доступной для процессора; когда данные в этой части памяти были обновлены, другая часть могла быть заменена в адресное пространство процессора. Для IBM PC и IBM PC / XT Имея всего 20 адресных строк, были сделаны специальные карты расширенной памяти, содержащие, возможно, мебибайт или более расширенной памяти, с логикой на плате, делающей эту память доступной для процессора в определенных частях адресного пространства 8088.

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

80286 и область верхней памяти

Когда IBM PC / AT был введен сегментированная память Побочный продукт архитектуры процессоров семейства Intel позволяет адресовать чуть более 1 Мбайт памяти в «реальном» режиме. Поскольку 80286 имел более 20 адресных строк, определенные комбинации сегмента и смещения могли указывать на память выше 0x0100000 (220) расположение. 80286 может адресовать до 16 Мбайт системной памяти, тем самым устраняя "заворачивание" адресов памяти. Поскольку требуемая адресная строка теперь существует, комбинация F800: 8000 больше не будет указывать на физический адрес 0x0000000, а на правильный адрес 0x00100000.

В результате некоторые программы DOS перестали работать. Для обеспечения совместимости с ПК и поведением XT в AT был включен Линия A20 шлюз (Gate A20), который заставлял адреса памяти на AT переходить в низкую память, как это было бы на процессоре 8088. Эти ворота можно было контролировать, сначала через контроллер клавиатуры, чтобы позволить запущенным программам, которые были разработаны для этого, получить доступ к дополнительным 65 520 байтам (64 КБ памяти в реальный режим. В ботинок время, BIOS сначала включает A20 при подсчете и тестировании всей системной памяти и отключает его перед передачей управления операционной системе. Включение линии A20 - один из первых шагов. защищенный режим x86 Операционная система выполняется в процессе загрузки, часто до того, как управление будет передано ядру из начальной загрузки (например, в случае Linux).

В область высокой памяти (HMA) это баран площадь, состоящая из первых 64 КиБ, минус 16 байты, из расширенная память на IBM PC / AT или совместимом микрокомпьютере.

Первоначально логический вентиль был вентилем, подключенным к Intel 8042 контроллер клавиатуры. Контроль над этим был относительно медленным процессом. С тех пор были добавлены другие методы, позволяющие более эффективно выполнять многозадачность программ, которые требуют этого цикла с программами, которые обращаются ко всей системной памяти. Сначала было множество методов, но в конце концов промышленность остановилась на методе PS / 2, позволяющем использовать немного в порт 92h для управления линией A20.

Отключение A20 не приведет к заворачиванию все доступ к памяти превышает 1 МиБ, только те, которые находятся в диапазонах 1 МиБ, 3 МиБ, 5 МиБ и т. д. Реальный режим программное обеспечение заботилось только о площади чуть выше 1 МиБ, поэтому Gate A20 было достаточно.

Виртуальный режим 8086, представленный Intel 80386, позволяет моделировать циклический переход A20 с помощью виртуальная память возможности процессора: физическая память может быть отображена на несколько виртуальных адресов, что позволяет отображать память, отображаемую в первом мегабайте виртуальной памяти, снова во втором мегабайте виртуальной памяти. Операционная система может перехватить изменения в шлюзе A20 и внести соответствующие изменения в адресное пространство виртуальной памяти, что также делает несущественным эффективность переключения шлюза-A20.

Первым пользователем HMA среди продуктов Microsoft был Окна / 286 2.1 в 1988 году, который представил HIMEM.SYS драйвер устройства. Начиная с версии 5.0 DR-DOS (1990) и MS-DOS (1991), части операционной системы также можно было загружать в HMA, освобождая до 46 КиБ обычная память. Другие компоненты, такие как драйверы устройств и TSR, может быть загружен в область верхней памяти (UMA).

Обработчик A20

В Обработчик A20 программное обеспечение, контролирующее доступ к области верхней памяти. Расширенная память менеджеры обычно предоставляют эту функцию. В DOS менеджеры области верхней памяти, такие как HIMEM.SYS имел дополнительную задачу по управлению A20 и обеспечивал API для открытия / закрытия A20. Сама DOS могла бы использовать эту область для некоторых своих потребностей в хранилище, тем самым освобождая более обычную память для программ. Эта функция была включена в "ДОС = HIGH "в CONFIG.SYS конфигурационный файл.

Гейт A20 на более поздних процессорах

В Intel 80486 и Pentium добавлен специальный контакт с именем A20M #, который, когда установлен низкий, заставляет бит 20 физического адреса быть нулевым для всех обращений к кэш-памяти или внешней памяти. Это было необходимо, поскольку 80486 представил кеш-память на кристалле, и поэтому маскирование этого бита во внешней логике было невозможно. Программное обеспечение по-прежнему должно управлять воротами и работать с внешними периферийными устройствами ( чипсет ) для этого.[3]

80386 и последующие процессоры

Процессоры Intel от 386 Впоследствии позволил виртуальный режим 8086, что упростило оборудование, необходимое для реализации расширенной памяти для приложений DOS. Расширенные менеджеры памяти, такие как Quarterdeck с QEMM продукт и Microsoft EMM386 поддерживает стандарт расширенной памяти без необходимости в специальных платах памяти.

На 386 и последующих процессорах диспетчеры памяти, такие как QEMM, могут перемещать большую часть кода для драйвера или TSR в расширенную память и заменять ее небольшой опорой для пальцев, способной получить доступ к резидентному коду расширенной памяти. Они могут анализировать использование памяти, чтобы обнаружить драйверы, которым во время запуска требовалось больше оперативной памяти, чем впоследствии, а также восстановить и повторно использовать память, которая больше не нужна после запуска. Они могут даже переназначить области памяти, обычно используемые для ввода-вывода с отображением памяти. Многие из этих уловок основывались на предположениях о функционировании драйверов и других компонентов. Фактически, менеджеры памяти могут «на лету» реконструировать и модифицировать код других поставщиков. Как и следовало ожидать, такие уловки не всегда срабатывали. Поэтому менеджеры памяти также включают в себя очень сложные системы настраиваемых опций и средств восстановления, если выбранная опция сделает ПК не загружаемым (частое явление).

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

Расширенная память

В контексте компьютеров, совместимых с IBM PC, расширенная память относится к памяти в адресном пространстве 80286 и последующих процессоров, за пределами ограничения в 1 мегабайт, налагаемого 20 адресными строками 8088 и 8086. Такая память напрямую не доступна для приложений DOS, работающих в так называемом «реальном режиме». из 80286 и последующих процессоров. Эта память доступна только в защищенном или виртуальном режимах процессоров 80286 и выше.

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

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

  1. ^ Мюллер, Скотт (1994). "7". Обновление и ремонт ПК (4-е изд.). Que. ISBN  1-56529-932-9.
  2. ^ а б Мюллер, Скотт (1999). «6: Память». Обновление и ремонт ПК (11-е изд.). Que Corporation. ISBN  0-7897-1903-7.
  3. ^ Шенли, Том (1996). Архитектура программного обеспечения в защищенном режиме. Тейлор и Фрэнсис. п. 60. ISBN  0-201-55447-X.

внешняя ссылка