Предоставление физического адреса непосредственно в TLB в x86-64 - PullRequest
0 голосов
/ 04 ноября 2011

Можно ли предоставить физический адрес для данного виртуального адреса прямым способом в TLB на архитектурах x86-64 в длинном режиме?

Например, допустим, я положил нули в PML4E, так что исключение сбоя страницы будет вызвано тем, что будет найден неверный адрес, во время исключения процессор может сообщить TLB, используя некоторую инструкцию, что этот виртуальный адрес расположен у X физическая страница фрейма?

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

1 Ответ

0 голосов
/ 04 ноября 2011

Нет, вам нужно поместить страницу в TLB. Чтобы быть точным, вам нужно создать / обновить соответствующий PTE (с PDE и PDPE, если необходимо). Все, что связано с управлением MMU, каким-то образом основано на таблицах страниц и TLB. Даже режим защиты пользователя / супервизора выполнен в виде специального флага отображаемой страницы.

Почему вы думаете, что "просмотр страницы" - это дорогостоящая операция? Это совсем не дорого. Чтобы определить PTE, который необходимо обновить, необходимо разыменовать только 4 указателя: PML4E -> PDPE -> PDE -> PTE. Эти записи являются просто индексами в связанных таблицах. Чтобы получить PML4E, вам нужно использовать 39-47 бит адреса, взятых во время обработки ошибок страницы, и использовать это значение в качестве индекса в таблице PML4. Чтобы получить PDPE, вам нужно 30-39 бит адреса в качестве индекса в таблице PDE и так далее. Это не то, что может замедлить вашу систему. Я думаю, что выделение физической страницы занимает больше времени.

...