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

А как лучше конвертировать физический адрес в виртуальный при маппинге?

В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальное(особенно в userspace)? Искать первую свободную страницу? Кажется, это не самый производительный вариант

26 ответов

77 просмотров

Я не понял как связан маппинг и свободная страница. Ты должен аллоцироовать физпамять для виртуальной, а не наоборот.

Evg-Resh Автор вопроса
ᛒ ᛖ ᚱ ᚲ ᚢ ᛊ ᛞ ᛖ ᚲ ᛖ ᚱ
Я не понял как связан маппинг и свободная страница...

Ну аллоцировать-то я смог, у меня есть физический аллокатор, но далее мне ее нужно замаппить на какой-то виртуальный адрес и тут возникает вопрос: «на какой?»

Evg-Resh Автор вопроса

Я тут под страницей имел в виду первый адрес в page table’е, где не проставлен бит present

Evg Resh
Ну аллоцировать-то я смог, у меня есть физический ...

не так, ты запрашиваешь маппинг для виртуального адреса X, физиеский аллокатор тебе аллоцирует страницу натурально, виртуальный адрес у тебя X

Evg Resh
Ну аллоцировать-то я смог, у меня есть физический ...

Для этого тоже нужно что-то вроде аллокатора

ᛒ ᛖ ᚱ ᚲ ᚢ ᛊ ᛞ ᛖ ᚲ ᛖ ᚱ
не так, ты запрашиваешь маппинг для виртуального а...

А что делать со служебными страницами? не всегда же можно взять и сразу замапить страницу в таблице страниц, иногда и саму таблицу страниц нужно мапить

Evg Resh
Ну аллоцировать-то я смог, у меня есть физический ...

зачем тебе мапить единичную страницу? это задача такая? Обычно мапят регионами

Evg-Resh Автор вопроса
Rustam
зачем тебе мапить единичную страницу? это задача т...

Да, видимо, в контексте процессов ни к чему. Хотя в контексте ядра, кажется, что имеет смысл, но там, я так понимаю, можно сразу всю память замаппить

Evg Resh
Да, видимо, в контексте процессов ни к чему. Хотя ...

В контексте ядра имеет смысл да. Как в офтопике с highnem

Rustam
зачем тебе мапить единичную страницу? это задача т...

И как ты собрался рулить регионами физической памяти?

disba1ancer
И как ты собрался рулить регионами физической памя...

речь о регионах адресного пространства. Здесь нет нужды выделять непрерывную область физ. памяти

Rustam
речь о регионах адресного пространства. Здесь нет ...

Но всё же мапить по одной странице, если речь идёт о памяти ядра, а не процесса, не лучшая идея

disba1ancer
Но всё же мапить по одной странице, если речь идёт...

Ты так или иначе мапишь их по одной странице, остальное частные оптимизации

disba1ancer
Но каждый раз бегать за страницей не есть хорошо

когда заработает маппинг поштучно оптимизация для рейнджей страниц уже тривиальна

disba1ancer
Но каждый раз бегать за страницей не есть хорошо

Так ведь выбор особо не велик, если процесс замапил регион, если ты сразу все не мапишь (lazy аллокации, что обычно и делают), то пока аксесса на эту страницу не будет её и не нужно аллоцировать, только, если нет какого-нибудь алгоритма, типа fault-around

$:@+#81*?2& Brains
Так ведь выбор особо не велик, если процесс замапи...

Для начала, надо с памятью ядра разобраться

disba1ancer
Для начала, надо с памятью ядра разобраться

Так там ещё проще, ты просто сразу аллоцируешь и мапишь

$:@+#81*?2& Brains
Так там ещё проще, ты просто сразу аллоцируешь и м...

Если есть аллокатор физ. страниц и условно функция, которая мапит одну страницу, ты просто цикл вставляешь, который пройдется по региону, если это больше, чем одна страница, и замапит их все

$:@+#81*?2& Brains
Если есть аллокатор физ. страниц и условно функция...

Не всё так просто, ибо таблица страниц многоуровневая, для промежуточных уровней надо тоже откуда-то мапить, либо заранее рассчитывать сколько понадобится памяти

disba1ancer
Не всё так просто, ибо таблица страниц многоуровне...

Все конечно зависит от того, как ты сделаешь, но не вижу проблемы, чтобы тем же аллокатором физ. страниц достать страницу для таблицы, если её не оказалось и воткнуть в уже существующую, тем более, что это ядерная таблица

$:@+#81*?2& Brains
Все конечно зависит от того, как ты сделаешь, но н...

Тут очень большая проблема в том, что физ аллокатор должен где-то хранить всё своё добро, т.е. списки свободных регионов, если хранить в памяти ядра, то это потенциально может вызвать рекурсивные вызовы аллокатора, что нежелательно

disba1ancer
Тут очень большая проблема в том, что физ аллокато...

Ну самый простой способ - в компайл тайме указать максимальный объем памяти, который может присутствовать в системе

Evg-Resh Автор вопроса
disba1ancer
Тут очень большая проблема в том, что физ аллокато...

У меня на каждый физический регион есть битмап, правда у меня 32-бит, поэтому битман не очень большой

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта