Jump to content

Большая область памяти

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

В управлении памятью 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 года с Digital Research. компании DR DOS 5.0 [3] (с помощью HIDOS.SYS /BDOS=FFFF[4] и CONFIG.SYS HIDOS=ON) и с 1991 года с MS-DOS 5.0. [3] (с помощью DOS=HIGH и ядра операционной системы ), части BIOS также могут быть загружены в HMA, [3] [5] освобождение до 46 КБ обычной памяти . [1] Другие компоненты, такие как драйверы устройств и резидентные программы завершения и пребывания (TSR), могут быть загружены как минимум в верхнюю область памяти (UMA), но не в HMA. Под DOS 5.0 и выше, с DOS=HIGH, система дополнительно попыталась переместить дисковые буферы в HMA. [5] В DR DOS 6.0 (1991) и выше дисковые буферы (через HIBUFFERS, а позже также BUFFERSHIGH), части командного процессора COMMAND.COM, а также несколько специальных самоперемещающихся драйверов, таких как KEYB , NLSFUNC и SHARE, также могут загружаться в HMA (используя их /MH вариант), тем самым освобождая еще больше обычной памяти и верхней памяти для работы обычного программного обеспечения DOS. [1] TASKMAX , похоже, также перенес части себя в HMA. [6] [7] Novell от 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.BIN не /NOHMA вызывается). [5] [12] В ПК DOS 7.0 1995) и 2000 DOSKEY ( загружается в HMA (если доступен), [13] и 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. ^ Jump up to: а б с д и ж г час я дж Пол, Матиас Р. (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. ^ Jump up to: а б с Ингеносо, Тони (20 декабря 1998 г.). «Глава 13. Ворота А20 и HMA». Улучшение работы кода — Как минимизировать размер кода 80x86 и иногда сделать его быстрее (электронная книга). Архивировано из оригинала 18 ноября 2019 г. Проверено 18 ноября 2019 г.
  3. ^ Jump up to: а б с Драйфус, Майк, изд. (18 сентября 1991 г.) [19 июля 1991 г.]. «Отчет о разработке MS-DOS 5.0» (PDF) (почта как судебный документ). Майкрософт . п. 10. MS-PCA1179169 (MS-PCA1179159-MS-PCA1179191). MS7020988 (MS7020978-MS7021010). Депо. Бывший. 1109. Прилагается к Microsoft Доказательство истца 3473. 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. ^ Jump up to: а б с Шульман, Эндрю; Браун, Ральф Д .; Макси, Дэвид; Михелс, Раймонд Дж.; Кайл, Джим (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] : ) Ошибки
  6. ^ «Формат блока памяти HMA (ядро DR DOS 6.0, загруженное в HMA)» . РБИЛ . 2000. Архивировано из оригинала 18 февраля 2020 г. Проверено 18 февраля 2020 г.
  7. ^ Jump up to: а б с Пол, Матиас Р. (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 DBLSPACE и PC DOS до 2000 , которые обычно оставляют 4–7 КБ памяти HMA неиспользуемыми (SHARE, KEYB и NLSFUNC не могут загружаться в HMA, но и HIMEM могут в некоторых случаях загружаться в HMA). степень). Доступное пространство HMA может быть довольно ограниченным в MS-DOS 7.0+ , поскольку эта проблема представила новую и по большей части недокументированную структуру данных RMD, обычно расположенную в HMA. Ядро собирает и записывает данные конфигурации и драйвера реального режима во время загрузки (тип драйвера, прерывания, перехваченные драйвером, CONFIG.SYS и т. д.) и сохраняет эту информацию в […] сложной […] и […] растущей структуре данных. Предположительно, эта информация предназначена для использования ядром Windows для получения лучшего представления о загруженных драйверах реального режима вместо того, чтобы рассматривать DOS как монолитный блок или даже […] пытаться отсоединить или выгрузить некоторые из них, однако это используется только в очень ограниченной степени (например, вы можете увидеть некоторую информацию, отраженную в файлах журналов, созданных при запуске Windows 9x, и некоторые части диспетчера конфигурации Windows также используют ее), оставляя место для спекуляций, выходящих далеко за рамки техническая сторона – в частности потому, что ничего интересного не задокументировано… […]
  8. ^ Пол, Матиас Р. (30 июля 1997 г.) [1 мая 1994 г.]. «II.4. Недокументированные свойства внешних команд». 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. Недокументированные свойства внешних команд». NWDOS-TIPs — Советы и рекомендации по Novell DOS 7 с учетом недокументированных подробностей, ошибок и обходных путей . MPDOSTIP (на немецком языке) (3-е изд.).
  10. ^ Jump up to: а б Чаппелл, Джефф (январь 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 ( DOS 7/2000 PC например, ) сохраняют неиспользуемые в данный момент шрифты в памяти 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. ^ Jump up to: а б Брукс, Вернон К. (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 г.). «Найдите свободную память объемом менее 1 МБ, которая не будет перезаписана ОС» (на немецком языке). Группа новостей : de.comp.lang.assembler.x86 . Архивировано из оригинала 4 сентября 2017 г. Проверено 3 сентября 2017 г.
  16. ^ Пол, Матиас Р. (02 октября 1997 г.) [29 сентября 1997 г.]. «Caldera OpenDOS 7.01/7.02 Update Alpha 3 IBMBIO.COM — README.TXT и BOOT.TXT — краткое описание загрузки OpenDOS» . Архивировано из оригинала 4 октября 2003 г. Проверено 29 марта 2009 г. [10]

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

[ редактировать ]
  • Некасек, Михал (13 сентября 2011 г.). «Да вообще, кому нужен перенос адресов?» . Музей OS/2 . Архивировано из оригинала 19 февраля 2020 г. Проверено 19 февраля 2020 г. […] 86-DOS , а следовательно, и PC DOS / MS-DOS , использовали хитрый трюк. Байт по смещению 5 PSP содержал код операции дальнего вызова (9Ah); слово по смещению 6 PSP содержало соответствующее значение, указывающее размер сегмента программы, а также часть смещения дальнего вызова. Слово со смещением 8, которое служило частью сегмента дальнего вызова, было создано таким образом, что в сочетании со смещением оно оборачивалось (хорошо понятная особенность ЦП 8086 ) и указывало на адрес 0:C0h, который содержит вектор прерывания 30h. […] Интерфейс CALL 5 работает даже в эмуляции DOS под Windows NT и OS/2, и эти системы наверняка не смогут работать с отключенной линией A20 . Как это тогда работает? […] Вместо того, чтобы отсекать биты адреса, система зеркально отображает пять байтов по адресу 0:C0h и 1000C0h. Тот же метод фактически использовался в DOS 5 и выше, работая с DOS=HIGH. В этом случае DOS гарантирует, что линейный адрес 1000C0h содержит соответствующий дальний вызов. […]
  • Козерок, Чарльз М. (17 апреля 2001 г.) [1997]. «Область высокой памяти (HMA)» . Руководство для ПК . 2.2.0. Архивировано из оригинала 16 октября 2006 г. Проверено 15 октября 2006 г.
  • Пол, Матиас Р. (11 апреля 2002 г.). «Re: [fd-dev] АНОНС: CuteMouse 2.0 альфа 1» . freedos-dev . Архивировано из оригинала 21 февраля 2020 г. Проверено 21 февраля 2020 г. […] в случае таких искаженных указателей […] много лет назад мы с Акселем думали о том, как использовать *одну* точку входа в драйвер для нескольких векторов прерываний (поскольку это сэкономило бы нам много места для несколько точек входа и более или менее идентичный код кадрирования запуска/выхода во всех них), а затем внутренне переключиться на разные обработчики прерываний. Например: 1234h:0000h […] 1233h:0010h […] 1232h:0020h […] 1231h:0030h […] 1230h:0040h […] все указывают на одну и ту же точку входа. Если вы подключите INT 21h к 1234h:0000h и INT 2Fh к 1233h:0010h и т. д., все они пройдут через одну и ту же «лазейку», но вы все равно сможете различать их и внутренне разветвляться на разные обработчики. Подумайте о «сжатой» точке входа в заглушку A20 для загрузки HMA. Это работает до тех пор, пока ни одна программа не начнет выполнять магию сегмента: смещения. […] Сравните это с противоположным подходом, заключающимся в наличии нескольких точек входа (возможно, даже поддерживающих IBM Interrupt Sharing Protocol ), который потребляет гораздо больше памяти, если вы перехватываете много прерываний. […] Мы пришли к выводу, что на практике это, скорее всего, не сохранится, потому что никогда не знаешь, нормализуют или денормализуют указатели другие драйверы и по каким причинам. […]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 43613ae9d9846e231d6dd3eca8ec5066__1717173120
URL1:https://arc.ask3.ru/arc/aa/43/66/43613ae9d9846e231d6dd3eca8ec5066.html
Заголовок, (Title) документа по адресу, URL1:
High memory area - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)