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] [номер 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] Другие компоненты, такие как драйверы устройств и резидентные программы завершения и пребывания (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] NLCACHE Novell из 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] В ПК 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 и, следовательно, могут использовать интерфейс бэкдора для подключения к цепочке прерываний в пространстве ядра , чтобы Обработчик Gate A20 обеспечит функциональность заглушки.

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

  1. ^ abcdefghij Пол, Матиас Р. (2 февраля 2002 г.). «Treiber dynamisch nachladen (Intra-Segment-Offset-Relokation zum Laden von TSRs in die HMA)» [Динамическая загрузка драйверов (перемещение внутрисегментного смещения для загрузки TSR в HMA)] (на немецком языке). Группа новостей : de.comp.os.msdos. Архивировано из оригинала 9 сентября 2017 г. Проверено 2 июля 2017 г.(Примечание. Дается всесторонний обзор истории и «природы» HMA, а также неочевидных конструктивных ограничений, которые необходимо учитывать при разработке расширений резидентной системы для загрузки в HMA. Также описывается, как решить эти проблемы с помощью заглушек , бэкдоры и перемещение смещения внутри сегмента - метод, используемый драйверами DR-DOS , способными перемещаться в HMA, и аналогичный (более сложному) методу, используемому в качестве основы для динамического устранения мертвого кода в авторском драйвере FreeKEYB.)
  2. ^ abc Ingenoso, Тони (20 декабря 1998 г.). «Глава 13. Ворота А20 и HMA». Улучшение работы кода — Как минимизировать размер кода 80x86 и иногда сделать его быстрее (электронная книга). Архивировано из оригинала 18 ноября 2019 г. Проверено 18 ноября 2019 г.
  3. ^ abc Dryfoos, Майк, изд. (18 сентября 1991 г.) [19 июля 1991 г.]. «Отчет о разработке MS-DOS 5.0» (PDF) (почта как судебный документ). Майкрософт . п. 10. MS-PCA1179169 (MS-PCA1179159-MS-PCA1179191). MS7020988 (MS7020978-MS7021010). Депо. Бывший. 1109. Прилагается к Доказательству истца 3473 от Microsoft. CA.No.2:96CV645B Доказательство истца 477. Архивировано (PDF) из оригинала 02 апреля 2019 г. Проверено 22 июля 2019 г. […] Одним из наиболее важных стимулов для добавления функций было конкурентное давление со стороны DRDOS 5.0 , о котором мы впервые узнали весной 1990 года. Набор функций DRDOS побудил нас добавить поддержку UMB , замену задач и отмену удаления. […] Значительная часть внимания руководства команды была отвлечена на новые функции, такие как программное обеспечение для передачи файлов, восстановление удаления и сетевая установка […] В конце концов, в конце июля 1990 года эта ситуация достигла критической точки, и под руководством БрэдСа команда руководство провело серию напряженных встреч, чтобы определить график и процесс закрытия проекта […](1+32 страницы)
  4. ^ Банта, К.; Партридж, Д. (18 августа 1994 г.). «Сторонние менеджеры памяти». DR DOS 6.0 (Документ технической информации). Редакция А. Novell . TID800074 (заменяет FYI-M-1303). Архивировано из оригинала 15 декабря 2021 г. Проверено 15 декабря 2021 г.
  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-Х. ISBN 978-0-201-63287-3(xviii+856+vi страниц, 3,5-дюймовая дискета [1]) Ошибки: [2][3]
  6. ^ «Формат блока памяти HMA (ядро DR DOS 6.0, загруженное в HMA)» . РБИЛ . 2000. Архивировано из оригинала 18 февраля 2020 г. Проверено 18 февраля 2020 г.
  7. ^ abc Пол, Матиас Р. (10 апреля 2002 г.). «[fd-dev] Доступ к HMA из TSR». freedos-dev . Архивировано из оригинала 9 сентября 2017 г. Проверено 9 сентября 2017 г. […] MS-DOS 7.0 + добавляет INT 21h/AX=4A03h и INT 21h/AX=4A04h. RBIL 61 INT 21h/AH=52h содержит некоторую информацию о цепочке MCB MS-DOS 7.0+ HMA […] Перемещение HMA для TSR имеет большой смысл для DR-DOS : хотя вы можете загружать большие части BIOS и BDOS , резидент часть оболочки, BUFFERS и DR-DOS TSR, такие как 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 ) . степень). Доступное пространство 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. ^ Аб Чаппелл, Джефф (январь 1994 г.). Шульман, Эндрю; Педерсен, Аморетт (ред.). Внутреннее устройство DOS . Серия программ Эндрю Шульмана (1-е издание, 1-е изд.). Издательская компания Аддисон Уэсли . стр. 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. ^ Пол, Матиас Р. (4 декабря 2002 г.). «[fd-dev] DISPLAY CON?». freedos-dev . Архивировано из оригинала 8 декабря 2021 г. […] некоторые выпуски DISPLAY.SYS ( например, PC DOS 7/2000) сохраняют неиспользуемые в данный момент шрифты в памяти XMS . Некоторые более ранние выпуски MS-DOS/PC DOS DISPLAY.SYS, похоже, имели возможность хранить их в HMA […]
  12. ^ Купер, Джим (2002). Использование MS-DOS 6.22 (специальное 3-е изд.). Издательство Que . п. 669. ИСБН 0-78972573-8. ISBN 978-0-78972573-8 . Архивировано из оригинала 18 февраля 2020 г. Проверено 18 февраля 2020 г. 
  13. ^ аб Брукс, Вернон К. (2014). «Это подробный список изменений, которые я внес в PC DOS 7.0». ПК DOS Ретро . Архивировано из оригинала 18 февраля 2020 г. Проверено 18 февраля 2020 г. […] DOSKEY.COM […] Переместите код в HMA, если он доступен. […] SHARE.EXE […] Переместите код в HMA, если он доступен, и добавлен параметр /NOHMA для принудительной низкой загрузки. […]
  14. ^ Свегер, Кристофер (2007) [15 июля 2002 г.]. «АНСИПЛЮС и Windows». Архивировано из оригинала 28 ноября 2021 г. Проверено 28 ноября 2021 г. […] Код 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. ^ Пол, Матиас Р. (02 октября 1997 г.) [29 сентября 1997 г.]. «Caldera OpenDOS 7.01/7.02, обновление Alpha 3 IBMBIO.COM — README.TXT и BOOT.TXT — краткое описание загрузки OpenDOS». Архивировано из оригинала 4 октября 2003 г. Проверено 29 марта 2009 г.[10]

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