Эта тема в некоторой степени освещалась в других сообщениях, но в моем примере мне нужно найти больше, чем показано в других примерах, и мне трудно четко понять, что именно происходит.
Предположим, у меня есть следующие системные свойства (и рабочий пример, решения которого я знаю, но не совсем понимаю):
И предположим, я хочу преобразовать виртуальный адрес 0x0712
в физический адрес:
Я бы сначала преобразовал 0x0712
в двоичный: 000011100010010
(зная, что VA имеет ширину 15 бит)
Я знаю, что размер страницы составляет 128 байт, поэтому log2(128) = 7
, это мои биты смещения.
Затем мне нужно ответить на следующие вопросы:
Что такое виртуальный номер страницы?
Что такое индекс TLB?
Что такое тег TLB?
Была ли это попытка TLB?
Была ли ошибка страницы?
Что такое физический номер страницы?
Как мне ответить на эти вопросы? Я знаю, что VPN может отображаться как E (или 0E), что имеет смысл, поскольку 15-битный виртуальный адрес за вычетом битов смещения (7) оставит: 00001110 = E
. Я также понимаю, почему нет PPN, поскольку в таблице страниц нет совпадения для VPN 0E
.
Я предполагаю, что ошибка страницы - Y именно потому, что в таблице страниц нет совпадения с VPN 0E
? Однако я пришел к этому интуитивно.
Но я не понимаю остальных частей, и как я на них отвечаю? Опять же, я знаю решения как:
Что такое виртуальный номер страницы? = 0E
Что такое индекс TLB? = 2
Что такое тег TLB? = 03
Была ли это попытка TLB? = M
Была ли ошибка страницы? = Y
Что такое физический номер страницы? никто
Но я, кажется, не могу понять, как они приходят к этим ответам из приведенного выше примера. Я пытался прочитать здесь разные сообщения, но мне не удалось найти никого, кто рассказывал бы о том, как правильно найти индекс TLB и теги, и в этом случае, как узнать, было ли это попаданием / промахом TLB, и если ошибка страницы произошло.
Может ли кто-нибудь объяснить мне эти концепции?
РЕДАКТИРОВАТЬ: Я нашел решение в другом месте, я разместил его в качестве комментария ниже, чтобы продемонстрировать рабочий пример.