Alireza Sadeghpour Ответов: 2

Как две виртуальные памяти могут указывать на одну и ту же физическую память в linux


я читал страницу, на которой говорилось::

"Мой microbenchmark начинается с выделения одной страницы памяти, а затем создает два виртуальных псевдонима адресов, указывающих на нее"

Первый Вопрос. я хочу знать, как я могу создать два виртуальных адреса, указывающих на одну и ту же страницу памяти в linux с помощью c?

опять же на этой странице он сказал, что:

"Одна из виртуальных страниц (которую мы будем называть указателем “setup”) настроена на разрешение доступа из пользовательского режима. Вторая виртуальная страница (указатель“тест”) имеет различные разрешения, а затем используется для выполнения загрузки."

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

Третий Вопрос. если это возможно, мы можем сделать это как в режиме ядра, так и в пользовательском режиме?

Что я уже пробовал:

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

2 Ответов

Рейтинг:
1

Richard MacCutchan

Вы должны спросить человека, который написал эти заявления. Мы понятия не имеем, каков может быть контекст этих утверждений.


Рейтинг:
0

Stefan_Lang

Ричард совершенно прав. Мы не можем знать, что означают эти утверждения без контекста.

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

1. Поскольку вы конкретно имеете в виду делать что - то на Linux, я предполагаю, что вы работаете на этой ОС-нам понадобится эта информация позже. Я понятия не имею, как ответить на ваш вопрос, потому что не понимаю, о чем идет речь: вы не можете выделить страницу памяти из программы C/C++, работающей под Linux. Либо это функциональность ядра Linux (то есть часть ОС), либо речь идет не о странице памяти в смысле памяти, управляемой ОС Linux.

2. конечно же нет! Управление памятью, страницы виртуальной памяти и права доступа-это функции системного уровня, к которым обычно вообще не следует прикасаться. Они предназначены для предотвращения случайного (или преднамеренного) вмешательства программ в работу других программ. Если бы система позволила вам это сделать, я бы счел это серьезной ошибкой.

3. Хорошо, теперь вы выпустили кошку из мешка: "режим ядра" означает, что вы смотрите на функции операционной системы самого низкого уровня! Это означает, что ваша ссылка на Linux либо вводила в заблуждение, Либо вы намеревались написать/изменить/добавить функциональность ядра Linux. Если это так, то вам следует обратиться к соответствующим платам Linux. Это путь к продвинутому и специализированному, чтобы получить много полезного вклада отсюда.

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

P.S.: У меня нет никаких знаний о написании кода ядра Linux, но я знаю, что на самом низком уровне это все чистый код C, а не C++. Если это ваша тема, вы должны изменить теги на C и Linux, это явно не вопрос C++.