Я наблюдаю последние несколько микроархитектур Intel (Nehalem / SB / IB и Haswell). Я пытаюсь понять, что происходит (на довольно упрощенном уровне), когда делается запрос данных. Пока что у меня есть это приблизительное представление:
- Механизм выполнения выполняет запрос данных
- «Управление памятью» запрашивает L1 DTLB
- Если вышеупомянутое отсутствует, TLB L2 теперь запрашивается.
В этот момент могут произойти две вещи: промах или попадание:
Если это попадание, ЦП пробует кеши L1D / L2 / L3, таблицу страниц, а затем основную память / жесткий диск в этом порядке?
Если это ошибка - ЦП запрашивает у (интегрированного контроллера памяти?) Запрос проверки таблицы страниц, хранящейся в ОЗУ (правильно ли я понял роль IMC?).
Если бы кто-нибудь мог отредактировать / предоставить набор пунктов, которые обеспечивают базовый «обзор» того, что ЦП делает из запроса данных механизма выполнения, включая
- L1 DTLB (TLB данных)
- L2 TLB (данные + инструкция TLB)
- L1D Cache (кэш данных)
- Кэш L2 (данные + кеш инструкций)
- Кэш L3 (данные + кеш инструкций)
- Часть процессора, которая контролирует доступ к основной памяти
- Таблица страниц
это было бы очень признательно. Я нашел несколько полезных изображений:
- http://www.realworldtech.com/wp-content/uploads/2012/10/haswell-41.png
- http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Intel_Core2_arch.svg/1052px-Intel_Core2_arch.svg.png
но на самом деле они не разделяли взаимодействие между TLB и кешами.
ОБНОВЛЕНИЕ: изменили приведенное выше, как я думаю, теперь понимаю. TLB просто получает физический адрес от виртуального. Если есть промах - у нас проблемы и нужно проверить таблицу страниц. В случае попадания мы просто переходим вниз по иерархии памяти, начиная с кеша L1D.