Можно ли получить доступ к физическому адресу памяти с помощью программирования на C? - PullRequest
0 голосов
/ 23 января 2019

Например, когда мы пишем:int a;и выполнение &a дает нам некоторый адрес в шестнадцатеричной форме 0x12345678, который мы называем виртуальным адресом.Теперь, когда мы пытаемся сделатьint *temp = 0xfe000000;этот адрес действует как виртуальный адрес или физический адрес?Насколько я знаю, виртуальные адреса предоставляются ОС, которые в дальнейшем преобразуются в физические адреса MMU.

Насколько я знаю, между ними существует механизм подкачки, который сопоставляет виртуальный адрес с доступным физическим адресом.Что происходит, когда мы даем адрес указателю?Этот адрес действует как виртуальный адрес, который затем обрабатывается MMU для указания на конкретный физический адрес, или он действует как физический адрес сам по себе?

int temp;
printf("%x \n", &temp);
int *temp2 = 0xfe000000; //This is just an example address. It could be any address

Этот адрес (0xfe000000) действует как реальный физический адрес или виртуальный адрес?

Ответы [ 2 ]

0 голосов
/ 17 июля 2019

Адрес, который мы обычно получаем, например, указатель в C-программировании на ПК, равен виртуальный адрес . Отображение виртуального в физическое и наоборот, обрабатывается операционной системой внутри. Обычно пользователь (root или другой) не имеет права голоса при сопоставлении адресов.

С другой стороны, простые микроконтроллеры обычно не имеют сопоставления TLB, поэтому адрес, к которому вы обращаетесь, является фактическим физическим адресом устройства, как сказано в другом ответе.

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

0 голосов
/ 22 марта 2019

В случае, если вы используете операционную систему, это невозможно, поскольку ОС использует виртуальный адрес, и все, что вы используете, будет сопоставлено с физическим адресом через виртуальный адрес.

Но если вы программируетемикроконтроллер, то есть нет виртуального адреса, и вы можете получить доступ к физической памяти, используя указатели в C.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...