stringtranslate.com

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

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

В системе управления памятью DOS верхняя область памяти ( HMA ) — это область ОЗУ , состоящая из первых 65520 байт сверх одного мегабайта в IBM AT или совместимом компьютере.

В реальном режиме архитектура сегментации процессоров Intel 8086 и последующих процессоров идентифицирует ячейки памяти с 16-битным сегментом и 16-битным смещением, которое разрешается в физический адрес через (сегмент) × 16 + (смещение). Хотя сегмент: смещение предназначено для адресации только 1  мегабайта (МБ) (2 20 байт) памяти, сегмент: смещение адресует FFFF:0010и за пределами опорной памяти за пределами 1 МБ ( FFFF0 + 0010 = 100000). Таким образом, на процессорах 80286 и последующих процессорах этот режим фактически может адресовать первые 65520 байт расширенной памяти как часть диапазона 64 КБ, начиная с 16 байт до отметки 1 МБ — FFFF:0000 (0xFFFF0)до FFFF:FFFF (0x10FFEF). Процессоры Intel 8086 и 8088 , имеющие только 1 МБ памяти и только 20  адресных линий , переносились на 20-й бит, так что этот адрес FFFF:0010был эквивалентен 0000:0000. [1]

Чтобы разрешить запуск существующих программ DOS, которые полагались на эту функцию для доступа к нижней памяти на своих новых компьютерах IBM PC AT , IBM добавила специальную схему на материнской плате для имитации цикла. Эта схема представляла собой простой логический вентиль , который мог отключать 21-ю адресную линию микропроцессора, A20 , от остальной материнской платы. Этим вентилем можно было управлять, изначально через контроллер клавиатуры , чтобы разрешить запуск программ, которые хотели получить доступ ко всей оперативной памяти. [1]

Так называемые обработчики A20 могли динамически управлять режимом адресации, [1] тем самым позволяя программам загружать себя в область 1024–1088 КБ и работать в реальном режиме. [1]

Код, подходящий для выполнения в HMA, должен быть либо написан так, чтобы быть позиционно-независимым (используя только относительные ссылки), [2] [1] скомпилирован для работы по определенным адресам в HMA (обычно позволяя только одному или максимум двум фрагментам кода совместно использовать HMA), либо он должен быть разработан так, чтобы допускал перемещение по границе абзаца или даже смещение (со всеми адресами, фиксируемыми во время загрузки). [2] [1]

Прежде чем код (или данные) в HMA смогут быть адресованы ЦП, соответствующий драйвер должен убедиться, что HMA отображен. Для этого требуется, чтобы любые такие запросы туннелировались через заглушку, остающуюся в памяти за пределами HMA, которая будет вызывать обработчик A20, чтобы (временно) включить шлюз A20 . [2] [1] Если драйвер не отображает никаких публичных структур данных и использует только прерывания или вызовы, уже контролируемые базовой операционной системой, можно зарегистрировать драйвер в системе таким образом, чтобы система сама позаботилась об A20, тем самым устраняя необходимость в отдельной заглушке. [1] [nb 1]

Первым пользователем HMA среди продуктов Microsoft была Windows/286  2.1 в 1988 году, которая представила драйвер устройства HIMEM.SYS . Начиная с 1990 года с DR DOS 5.0 [3] от Digital Research (через [4] и CONFIG.SYS ) и с 1991 года с MS-DOS 5.0 [3] (через ), части BIOS и ядра операционной системы также могли быть загружены в HMA, [3] [5] освобождая до 46 КБ обычной памяти . [1] Другие компоненты, такие как драйверы устройств и резидентные программы terminate-and-stay-resident (TSR), могли быть загружены по крайней мере в верхнюю область памяти (UMA), но не в HMA. В DOS 5.0 и выше, с , система дополнительно пыталась переместить дисковые буферы в HMA. [5] В DR DOS 6.0 (1991) и выше дисковые буферы (через , а позже также ), части командного процессора COMMAND.COM, а также несколько специальных самоперемещающихся драйверов, таких как KEYB , NLSFUNC и SHARE , также могли загружаться в HMA (используя их опцию), тем самым освобождая еще больше обычной памяти и верхней памяти для работы с обычным программным обеспечением DOS. [1] TASKMAX , похоже, также переместил части себя в HMA. [6] [7] Novell 's NLCACHE из NetWare Lite и ранние версии NWCACHE из Personal NetWare и Novell DOS 7 также могли использовать HMA. [8] [9] [7] В MS-DOS/PC DOS общая часть COMMAND.COM размером около 2 КБ может быть перемещена в HMA, [10] а также битовые карты DISPLAY.SYS для подготовленных кодовых страниц . [10] [11] В MS-DOS 6.2 (1993) и выше, часть DBLSPACE.BIN / DRVSPACE.BIN размером около 5 КБ может сосуществовать с DOS в HMA (если не вызывается DBLSPACE / DRVSPACE ). [5] [12] В PC DOS 7.0 (1995) и 2000 , DOSKEY загружается в HMA (если доступно), [13]HIDOS.SYS /BDOS=FFFF HIDOS=ONDOS=HIGHDOS=HIGHHIBUFFERSBUFFERSHIGH/MH /NOHMAи SHARE также может быть загружен в HMA (если не /NOHMAуказана его опция). [13] В MS-DOS 7.0 (1995) - 8.0 (2000) части HMA также используются в качестве блокнота для хранения растущей структуры данных, записывающей различные свойства загруженных драйверов реального режима. [7] [14] [15]

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

Примечания

  1. ^ Заглушка не требуется для резидентных системных расширений SHARE и NLSFUNC в DR DOS 6.0 и выше, поскольку они перехватывают только мультиплексное прерывание INT 2Fh и, следовательно, могут использовать интерфейс бэкдора для подключения к цепочке прерываний в пространстве ядра , чтобы обработчик шлюза ядра A20 обеспечивал функциональность заглушки.

Ссылки

  1. ^ abcdefghij Пол, Маттиас Р. (2002-02-02). "Treiber dynamisch nachladen (Intra-Segment-Offset-Relokation zum Laden von TSRs in die HMA)" [Динамическая загрузка драйверов (внутрисегментное смещение для загрузки TSRs в HMA)] (на немецком языке). Группа новостей : de.comp.os.msdos. Архивировано из оригинала 2017-09-09 . Получено 2017-07-02 .(Примечание. Дает всесторонний обзор истории и «природы» HMA и неочевидных ограничений дизайна, которые необходимо соблюдать при разработке резидентных системных расширений для загрузки в HMA. Также описывается, как решать эти проблемы с помощью заглушек , бэкдоров и перемещения смещения внутри сегмента — метода, используемого драйверами DR-DOS, способными перемещаться в HMA и аналогичного (более сложному) методу, используемому в качестве основы для динамического устранения мертвого кода в драйвере FreeKEYB автора.)
  2. ^ abc Ingenoso, Tony (1998-12-20). "Глава 13 - A20 gate и HMA". Making Code Work Better - Как минимизировать размер кода 80x86 и иногда делать его быстрее (электронная книга). Архивировано из оригинала 2019-11-18 . Получено 2019-11-18 .
  3. ^ abc Dryfoos, Mike, ed. (1991-09-18) [1991-07-19]. "MS-DOS 5.0 Development Post-Mortem Report" (PDF) (отправить по почте как судебный документ). Microsoft . стр. 10. MS-PCA1179169 (MS-PCA1179159-MS-PCA1179191). MS7020988 (MS7020978-MS7021010). Depo. Ex. 1109. Comes v Microsoft Доказательство истца 3473. CA.No.2:96CV645B Доказательство истца 477. Архивировано (PDF) из оригинала 2019-04-02 . Получено 2019-07-22 . […] Одним из важнейших стимулов для добавления функций было конкурентное давление со стороны DRDOS 5.0 , о котором мы впервые узнали весной 1990 года. Набор функций DRDOS побудил нас добавить поддержку UMB , обмен задачами и функцию Undelete. […] Значительная часть внимания руководства команды была отвлечена на новые функции, такие как программное обеспечение для передачи файлов, функция восстановления и сетевая установка […] В конце концов эта ситуация достигла критической точки в конце июля 1990 года, и под руководством BradS руководство команды провело серию напряженных совещаний, чтобы закрепить график и процесс закрытия проекта […](1+32 страницы)
  4. ^ Банта, К.; Партридж, Д. (1994-08-18). "Сторонние менеджеры памяти". DR DOS 6.0 (Технический информационный документ). Редакция A. Novell . TID800074 (заменяет FYI-M-1303). Архивировано из оригинала 2021-12-15 . Получено 2021-12-15 .
  5. ^ abc Шульман, Эндрю; Браун, Ральф Д .; Макси, Дэвид; Михельс, Рэймонд Дж.; Кайл, Джим (1994) [ноябрь 1993 г.]. Уильямс, Эндрю (ред.). Недокументированная DOS: руководство программиста по зарезервированным функциям и структурам данных MS-DOS — расширено для включения MS-DOS 6, Novell DOS и Windows 3.1 . Серия программирование Эндрю Шульмана (1-е издание, 2-е изд.). Рединг, Массачусетс, США: Addison Wesley Publishing Company . стр. 42, 349–350, 437–438. ISBN 0-201-63287-X. ISBN 978-0-201-63287-3(xviii+856+vi страниц, 3,5-дюймовая дискета [1]) Опечатки: [2][3]
  6. ^ "Формат блока памяти HMA (ядро DR DOS 6.0 загружено в HMA)". RBIL . 2000. Архивировано из оригинала 2020-02-18 . Получено 2020-02-18 .
  7. ^ abc Paul, Matthias R. (2002-04-10). "[fd-dev] HMA access from TSR". freedos-dev . Архивировано из оригинала 2017-09-09 . Получено 2017-09-09 . […] MS-DOS 7.0 + добавляет INT 21h/AX=4A03h и INT 21h/AX=4A04h. RBIL 61 INT 21h/AH=52h содержит некоторую информацию о цепочке HMA MCB MS-DOS 7.0+ […] Перемещение HMA для резидентных программ имеет смысл для DR-DOS : хотя вы можете загружать большие части BIOS и BDOS , резидентную часть оболочки, BUFFERS и резидентные программы DR-DOS, такие как SHARE , KEYB и NLSFUNC (а в некоторых случаях и части TASKMGR и NWCACHE ) в HMA, обычно все еще остается свободное место, обычно около 10 Кб (примерно до 20 Кб при использовании сторонней оболочки). Это также имеет смысл для MS-DOS 5.0 - 6.22 и PC DOS до 2000 , которые обычно оставляют 4 - 7 Кб памяти HMA неиспользованными (SHARE, KEYB и NLSFUNC не могут загрузиться в HMA, но DBLSPACE и HIMEM могут в некоторой степени). Доступное пространство HMA может быть довольно ограниченным с MS-DOS 7.0 +, поскольку эта проблема ввела новую и по большей части недокументированную структуру данных RMD, обычно расположенную в HMA. Ядро собирает и записывает данные конфигурации и драйвера реального режима во время загрузки (тип драйвера, прерывания, перехваченные драйвером, строка вызова CONFIG.SYS и т. д.) и сохраняет эту информацию в […] сложной […] и […] растущей структуре данных. Предположительно, эта информация должна использоваться ядром Windows для получения более полной картины загруженных драйверов реального режима вместо того, чтобы рассматривать DOS как монолитный блок или даже […] пытаться отсоединить или выгрузить некоторые из них, однако она используется лишь в очень ограниченной степени (например, вы можете увидеть часть информации, отраженной в файлах журнала, созданных при запуске Windows 9x, и некоторые части диспетчера конфигурации Windows также используют ее), оставляя место для предположений, выходящих далеко за рамки технической стороны — в частности, потому что ничего интересного не документировано… […]
  8. ^ Пол, Матиас Р. (30 июля 1997 г.) [1 мая 1994 г.]. «II.4. Undocumentierte Eigenschaften externer Kommandos». NWDOS-TIPs — советы и подсказки для Novell DOS 7, с просмотром недокументированных подробностей, ошибок и обходных путей. MPDOSTIP (на немецком языке) (3-е изд.). Архивировано из оригинала 5 ноября 2016 г. Проверено 11 января 2012 г.(Примечание. NWDOSTIP.TXTЭто всеобъемлющая работа по Novell DOS 7 и OpenDOS 7.01 , включающая описание многих недокументированных функций и внутренних компонентов. Она является частью еще более обширной MPDOSTIP.ZIPколлекции автора, которая поддерживалась до 2001 года и распространялась на многих сайтах в то время. Приведенная ссылка указывает на более старую версию файла, преобразованную в HTML.) [4]
  9. ^ Пол, Матиас Р. (9 апреля 2001 г.). «II.4. Undocumentierte Eigenschaften externer Kommandos». NWDOS-TIPs — советы и подсказки для Novell DOS 7, с просмотром недокументированных подробностей, ошибок и обходных путей . MPDOSTIP (на немецком языке) (3-е изд.).
  10. ^ ab Chappell, Geoff (январь 1994). Schulman, Andrew; Pedersen, Amorette (ред.). DOS Internals . Серия программирование Эндрю Шульмана (1-е издание, 1-е изд.). Addison Wesley Publishing Company . стр. 4, 21, 100–106, 127–129. ISBN 978-0-201-60835-9. ISBN 0-201-60835-9(xxvi+738+iv страниц, 3,5-дюймовая дискета [5][6]) Опечатки: [7][8][9]
  11. ^ Пол, Маттиас Р. (2002-12-04). "[fd-dev] DISPLAY CON?". freedos-dev . Архивировано из оригинала 2021-12-08. […] некоторые выпуски DISPLAY.SYS ( например, PC DOS 7 / 2000 ) хранят неиспользуемые в данный момент шрифты в памяти XMS . Некоторые более ранние выпуски MS-DOS/PC DOS DISPLAY.SYS, похоже, имели возможность сохранять их в HMA […]
  12. ^ Купер, Джим (2002). Использование MS-DOS 6.22 (специальное 3-е изд.). Que Publishing . стр. 669. ISBN 0-78972573-8. ISBN 978-0-78972573-8 . Архивировано из оригинала 2020-02-18 . Получено 2020-02-18
  13. ^ ab Brooks, Vernon C. (2014). «Это подробный список изменений, которые я внес в PC DOS 7.0». PC DOS Retro . Архивировано из оригинала 18.02.2020 . Получено 18.02.2020 . […] DOSKEY.COM […] Переместить код в HMA, если он доступен. […] SHARE.EXE […] Переместить код в HMA, если он доступен, и добавлена ​​опция /NOHMA для принудительной загрузки низкого уровня. […]
  14. ^ Sweger, Kristofer (2007) [2002-07-15]. "ANSIPLUS и Windows". Архивировано из оригинала 2021-11-28 . Получено 2021-11-28 . […] Код ANSIPLUS не может быть загружен в HMA под MS-DOS 7 (только Windows 9x), поскольку, по-видимому, недостаточно неиспользуемой памяти HMA. […]
  15. ^ Пол, Матиас Р. (13 августа 2002 г.). «Такой свободный Speicherbereich unterhalb von 1 MB, der nicht von OS überschrieben wird» (на немецком языке). Группа новостей : de.comp.lang.assembler.x86. Архивировано из оригинала 4 сентября 2017 г. Проверено 3 сентября 2017 г.
  16. ^ Пол, Маттиас Р. (1997-10-02) [1997-09-29]. "Caldera OpenDOS 7.01/7.02 Update Alpha 3 IBMBIO.COM - README.TXT и BOOT.TXT - Краткое описание того, как загружается OpenDOS". Архивировано из оригинала 2003-10-04 . Получено 2009-03-29 .[10]

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