Ответ 1
Карта pagemap применима только для преобразования виртуального и физического адресов. Однако, поскольку он находится в памяти и только частично кэшируется в TLB, вам может потребоваться доступ к нему там во время процесса перевода.
Основной поток выглядит следующим образом:
- Выполнение вычисляет адрес (фактически некоторые вычисления, такие как масштабирование и смещения, могут выполняться в блоке памяти).
- Поиск в DTLB
2.а Если пропущено, найдите в TLB второго уровня.
2.a.a. если пропущено - запустите прохождение страницы.
2.a.b. если ударить TLB 2-го уровня, залейте в DTLB и приступите к новому физическому адресу
2.b. попадает в DTLB с физическим адресом - Посмотрите на L1, если пропустили - найдите L2, если пропустили снова поиск L3, если пропущено - отправьте на контроллер памяти, дождитесь доступа к DRAM.
- Когда данные возвращаются (с любого уровня), заполняйте кеши по пути (в зависимости от политики заполнения, доступности кэша и временных характеристик инструкций, типа области памяти и, возможно, других факторов).
Если требуется прокрутка страницы, главный запрос запроса и выдача физических нагрузок на страницу pagemap (в соответствии с архитектурным определением). В x86 он может включать в себя CR3, PDPTR, PDP, PDE, PTE и т.д. В зависимости от режима подкачки, размеров страниц и т.д. Обратите внимание, что при виртуализации на каждом уровне прокрутки на виртуальной машине может потребоваться полный доступ к странице на хосте ( так что вы фактически набираете количество шагов).
Обратите внимание, что pagemap - это в основном древовидная структура, где каждый доступ зависит от значения предыдущего (и части виртуального адреса, который вы переводите). Поэтому эти обращения зависят, и только один раз, когда последний выполняется, вы получаете физический адрес и можете вернуться к # 3. Все время линия, которую вы хотите, может сидеть в вашем L1, если вы не в состоянии знать (хотя, если честно, если вы сделали перерыв страницы, у вас вряд ли будет линия в верхних кэшах).
Другие важные примечания - pagemap находится в физическом пространстве и получает доступ к этому пути. Вы не хотите переводить доступ, который вам нужен для перевода, это может быть тупик:)
Что еще более важно, данные pagemap могут кэшироваться, так что, хотя простой доступ к памяти может расширяться до нескольких из-за пропусков TLB, прокрутка по-прежнему может быть довольно дешевой.