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 ответов

49 просмотров

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

Посмотрите, если интересно, как реализована работа 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
Это даже круче чем гипервизор

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

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

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

Ребят в СИ можно реализовать ООП?
Николай
33
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем доброго вечера. Разрабатываю 32 раз. приложение в Delphi. Столкнулся с тем, что стандартный  TFilestream  не работает с большим файлом > 2 ГБайт (после вызова функции see...
Vadim Gl
16
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
добрый день. Подскажите, есть сайт на 1.4.7 и я хочу обновиться, особо ничего не меняя. мне выбирать версию 1.4.35 или третью ветку? и можно ли обновлять "как есть", или нужно...
Digital Cat
12
Кто кодит под Лазарем на винде, у вас аналогично VCL переопределяются CreateWnd и CreateParams для конкретных классов контролов и все заданные флаги влияют?
А Андрей
11
У меня задача: написать брокер сообщений. Очереди и потребители. Очереди поддерживают приоритеты. Очередь отдает сообщения, только обработчикам с соответствующими характеристи...
Aleksandr Filippov
2
народ, плиз хелп, всю голову сломал себе уже... разве может быть так, что GetProcAddress( GetModuleHandle( "kernel32.dll" ), "SetThreadDescription" ) вернёт ненулевое значение...
Iluha Companets
12
А, ты про текущую реализацию? Нет конечно, я бы сделал правильно - сейчас там гавнокод
Александр (Rouse_) Багель
6
Карта сайта