170 похожих чатов

Народ, а это правда что в современных процессорах интел и

амд нет возможности обращаться к памяти по физическим адресам и обязательно нужно засетапить виртуальную память с маппингом виртуальных страниц на физические?
Вот я нашел такой ответ 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 процесс

34 ответов

53 просмотра

не переключай процессор в защищённый режим, и обращайся по физическим адресам

Посмотрите, если интересно, как реализована работа hugepagеs в DPDK, они там решают похожий вопрос

Богдан- Автор вопроса
Denis P
не переключай процессор в защищённый режим, и обра...

в том то и проблема что судя по ссылкам которые я привел выше это невозможно

Да. Для long mode - paging обязателен, в отличие даже от protected

Богдан- Автор вопроса
Dmitriy [Отпуск]
Да. Для long mode - paging обязателен, в отличие д...

Кстати я тут встретил еще один режим процессора - SMM. Кто-нибудь знает - может в этом режиме можно отключить paging и обращаться сразу по физическим адресам к оперативке?

Dmitriy [Отпуск]
А как жить без long mode?)

ну изначальный вопрос был кажется как обращаться по физическим адресам без трансляции)

Богдан
Почему?

потому что он недостижим для пользователя, и доступен только интелу

Богдан
Почему?

потому что вы не пишете OS

Boris Usievich
потому что вы не пишете OS

кажется это на уровень ниже ос)

Богдан- Автор вопроса

Я где-то встречал на хабре статью где рассказывалось как написать UEFI-приложение где можно написать какой-то хендлер прерывания который будет испольняться в SMM режиме

Богдан
Я где-то встречал на хабре статью где рассказывало...

Во-первых, это уязвимости. Во-вторых, оно адресовать всю память не может - TSEG поддерживает максимум 8мб :)

Конечно не обязательно, можно и по физической напрямую.

feedable
как

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

Dmitriy [Отпуск]
Адресовать терабайты напрямую?)

Терабайтов тоже не будет. Будет ровно столько адресного пространства сколько у тебя ОЗУ. Минус девайсы и прочая легасятина.

feedable
как его не включить ткни в нужные регистры

Бит 0 в cr0 кажется. Long mode тебе очевидно не нужен.

ТС хочет напрямую пользоваться >64 Гб физической памяти

Dmitriy [Отпуск]
ТС хочет напрямую пользоваться >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").

Denis P
не переключай процессор в защищённый режим, и обра...

Не надо переключать в лонгмод, но тогда будет ограничение в 4 гига

feedable
потому что он недостижим для пользователя, и досту...

Он доступен только вендорам железяк, в основном материнок

Denis P
кажется это на уровень ниже ос)

Это даже круче чем гипервизор

disba1ancer
Это даже круче чем гипервизор

это в целом хардварный гипервизор, ну можно назвать второго уровня но на самом деле пофиг

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта