Я изучаю управление таблицей страниц и узнал, что VA to PA translation требует 4 доступа к памяти в 4-level page table (учитывая промах TLB и промах в кеше обхода страниц).

Но, поскольку Linux использует функцию follow_page для PTW, и эта функция внутренне вызывает follow_page_mask. Это также вызывает вызовы p4d_offset, pud_offset, pgd_offset и так далее.

Итак, мой вопрос заключается в том, что, например, когда pud_offset вызывается, он возвращает виртуальный адрес каталога PMD (я думаю) и получает физический адрес PMD каталог, снова необходимо выполнить PTW.

Итак, как memory accesses для преобразования адресов будет 4? Не больше 4?

0
Rohit 15 Авг 2021 в 09:28

1 ответ

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

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

1
Johan Myréen 15 Авг 2021 в 18:34
Хорошо, это так, что всякий раз, когда выполняется PTW, follow_page не вызывается большую часть времени? Вместо этого MMU берет записи из каталогов страниц и проходит через каталоги страниц следующего уровня.
 – 
Rohit
16 Авг 2021 в 13:51
1
Да, все это делается аппаратно в MMU. Вот так это делается на x86, но есть конечно разные вариации на эту тему. Например, архитектура MIPS определяет управляемый программным обеспечением резервный буфер трансляции (TLB). Это уменьшает аппаратный MMU до простого TLB, способного генерировать исключение при промахе TLB, а процедура обработки исключений отвечает за загрузку соответствующей записи в TLB.
 – 
Johan Myréen
16 Авг 2021 в 17:06