Как преобразовать виртуальный адрес в физический адрес?

если у меня есть виртуальный адрес: 0xF3557100, как мне преобразовать его в физический адрес и каковы значения смещения, каталога страниц и таблицы страниц?

PTE (запись таблицы страниц) для этого адреса имеет значение 0x87124053.

спасибо


person Al Bert    schedule 17.09.2015    source источник


Ответы (2)


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

В простейшем случае младшие биты, соответствующие размеру страницы, являются смещением, а оставшиеся старшие биты определяют запись в таблице страниц.

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

Короче говоря, нам нужно знать намного больше информации.

person user3344003    schedule 18.09.2015
comment
речь идет о 32-битной архитектуре Intel, и я думаю, что размер страницы должен быть 4 КБ. - person Al Bert; 18.09.2015

В общем из этой инфы нельзя перевести ВА в ПА. Каждая архитектура имеет некоторое постоянное значение для PAGE_SHIFT. поскольку ваш адрес 32-битный, большая часть такой архитектуры имеет 12-битное значение PAGE_SHIFT. это значение определяет значение смещения, поэтому ваше значение смещения составляет 12 бит. Это также означает, что размер вашей страницы составляет 4096 байт. даже несмотря на то, что архитектура может поддерживать более одного значения для PAGE_SHIFT, мы принимаем случай 12-битного смещения, которое обычно является значением по умолчанию в большинстве систем, создающих страницу 4096.

PTE содержит адрес кадра/номера страницы вместе с другой информацией о состоянии и защите. Младшие 12 бит в PTE используются для состояния и защиты, а остальные 20 бит используются для PPN. как правило, номер виртуального кадра сопоставляется с номером физического кадра, и смещение в обоих случаях одинаково. поэтому исключите младшие 12 бит из PTE и добавьте 12 младших битов из va.

поэтому смещение от va равно 0x100, поэтому физический адрес равен 0x87124100 в соответствии с правилом 10-10-12 (для этого деления нет общего правила)

смещение = 12 бит

таблица страниц = каталог страниц = 10 бит

теперь вы МОЖЕТЕ легко вычислить соответствующее значение битов по заданному адресу.

1111001101 0101010111 000100000000

смещение каталога страниц = 1111001101

смещение таблицы страниц = 0101010111

смещение страницы = 000100000000

person incompetent    schedule 18.09.2015
comment
речь идет об INTEL IA32, и структура приведена ниже: 0 (P) --- Присутствует ; 1 (R/W) ---- чтение/запись; 2 (U/S) --- пользователь/руководитель; 3 (PWT)---- Сквозная запись на уровне страницы ; 4 (PCD) --- кеш уровня страницы отключен; 5 (А) ---- Доступ ; 6 (D) ----- Грязный ; 7 (ПАТ) -----; 8 (Г) ----- ; 11:9 () ---- Игнорируется; 31:12 () ---- Фы доп. 4-килобайтной страницы, на которую ссылается эта запись ‹br/› И мои десятичные значения должны быть такими, как показано ниже: смещение каталога страниц = 0x3CD смещение таблицы страниц = 0x157 смещение страницы = 0x100 или я ошибаюсь? - person Al Bert; 18.09.2015
comment
в этом расчете не нужно знать значения битов состояния и защиты, но теперь вы правильно понимаете - person incompetent; 18.09.2015
comment
и из смещения PTE через структуру PTE я могу узнать: например, если страница находится в памяти, через первый бит 12 (0000 0101 0011 = 053). первый бит равен 1, что означает, что страница присутствует в памяти - person Al Bert; 18.09.2015