амд нет возможности обращаться к памяти по физическим адресам и обязательно нужно засетапить виртуальную память с маппингом виртуальных страниц на физические?
Вот я нашел такой ответ https://stackoverflow.com/questions/70609634/is-it-possible-to-enter-long-mode-without-setting-up-paging и эту тему на одном форуме https://forum.osdev.org/viewtopic.php?f=15&t=33816&start=0
Если это правда то это ппц полный. Как-то давно после просмотра этого доклада (https://www.youtube.com/watch?v=dFquxC6qTSA) я думал "ну что поделать - такую цену мы платим за изоляцию процессов друг от друга" но при этом я почему-то всегда предполагал что если тебе эта изоляция не нужна и у тебя есть скажем высоконагруженное приложение которое оккупирует всю железку (например база данных) то у тебя всегда есть возможность выбросить операционную систему с ее абстракцией виртуальной памяти и запустив приложение на голом железе в неком ring-0 режиме и дальше работать с физической памятью напрямую.
А сейчас оказывается что это невозможно и обязательно нужно засетапить маппинг виртуальных страниц даже если виртуальные адреса будут 1-к-1 маппиться на физические. И суть проблемы не в сложности сетапа этих страниц сколько в производительности - после несложного подсчета получаем что TLB кеши в современных процессорах покрывают десяток, максимум сотню гигабайт (да и то с дополнительной задержкой эквивалетной L2/L3 кешу) и получаем что на оперативке объемом несколько терабайт >95% запросов к памяти будет сопровождаться несколькими дополнительными запросами в память из-за TLB-промаха после которого начинается тормозной page-walk процесс
не переключай процессор в защищённый режим, и обращайся по физическим адресам
Посмотрите, если интересно, как реализована работа hugepagеs в DPDK, они там решают похожий вопрос
в том то и проблема что судя по ссылкам которые я привел выше это невозможно
А как жить без long mode?)
Да. Для long mode - paging обязателен, в отличие даже от protected
Кстати я тут встретил еще один режим процессора - SMM. Кто-нибудь знает - может в этом режиме можно отключить paging и обращаться сразу по физическим адресам к оперативке?
ну изначальный вопрос был кажется как обращаться по физическим адресам без трансляции)
В этом режиме Ваш код исполняться не будет.
потому что он недостижим для пользователя, и доступен только интелу
потому что вы не пишете OS
он недоступен для ос
кажется это на уровень ниже ос)
Я где-то встречал на хабре статью где рассказывалось как написать UEFI-приложение где можно написать какой-то хендлер прерывания который будет испольняться в SMM режиме
Во-первых, это уязвимости. Во-вторых, оно адресовать всю память не может - TSEG поддерживает максимум 8мб :)
Конечно не обязательно, можно и по физической напрямую.
Просто не включай маппинг в мму. Это будет гораздо хуже чем с виртуальным маппингом, сразу предупреждаю. Никаких виртуальных адресов, никаких непрерывных адресных пространств, минимум кэширования.
Адресовать терабайты напрямую?)
как его не включить ткни в нужные регистры
Терабайтов тоже не будет. Будет ровно столько адресного пространства сколько у тебя ОЗУ. Минус девайсы и прочая легасятина.
Бит 0 в cr0 кажется. Long mode тебе очевидно не нужен.
ТС хочет напрямую пользоваться >64 Гб физической памяти
ну из вопроса выходит что нужен
нужно ещё учитывать, что на современных машинах не вся физическая память идёт по непрерывным адресам ;)
А как это сделать? По этой ссылке https://stackoverflow.com/questions/70609634/is-it-possible-to-enter-long-mode-without-setting-up-paging есть такой ответ Paging is required for long mode, you cannot enter long mode without setting up 4-level or 5-level paging first. See volume 3A section 9.8.5 of the Intel manual. Specifically, the transition check is made right when enabling paging setting CR0.PG to 1, which checks if both CR4.PAE and IA32_EFER.LME are set, and if so enters IA32-e mode (Intel's name for "long mode").
никак long mode = paging
Не переходить в long mode, очевидно же.
Не надо переключать в лонгмод, но тогда будет ограничение в 4 гига
Он как unreal mode, ограничен 4мя гигами
Он доступен только вендорам железяк, в основном материнок
Это даже круче чем гипервизор
это в целом хардварный гипервизор, ну можно назвать второго уровня но на самом деле пофиг
Обсуждают сегодня