@SergeySerge11

Как устроен TLB буффер, и прочие кеши процессора?

Есть ли какие-то визуализации(конкретно только между RAM и блоком MMU.) Хочу посмотреть как ведет себя извлечение инструкции к примеру 0x40000000, как бегут битики , как происходит Промахи кеша, и Обновления кеша или TLB. Ка происходят обновления страниц.
Самые простые варианты понятны. А вот усложнения не совсем. (И так же не понятно в многопоточном программировании),
Вообще не понятны ситуации когда TLB уже заполнен. Что тогда? И как это часто бывает в ед. времени? Или как определяется какую страницу памяти удалить. (К примеру эмуляцию в коде, или алгоритмы высокоуровневых кешей, в коде, к примеру sql, как сделать вроде понятно, а потом выясняется что так физически на процессоре не возможно из-за там критического пути и отсутствие места, накладного пути. ...)
К примеру, есть список под 100 алгоритмов, но все они понятны только на языке высокого уровня а не железа.. К примеру "Последнее использование (MRU)" или FIFO" при Обновлении TLB или Page Table часть алгоритмов используют подсчет обращений( или время последнего обращения).

Тут вопрос. А как процессор узнает где меньшие число обращений или время обращения? Он же все это за в течении Цикла Инструкции допустим( jne Start;) делает. А поиск наименьшего в Мегабайте Кеша это 1млн Циклов. Целая программа. (возможно как-то параллельно прям на устройстве MMU до ln(N) можно. Но хватит ли там места, не понимаю.

Есть ли примеры. симуляций промахов?
Задача. Реализовать алгоритм получения адреса из памяти по Тактам. 99% случаев в теории за 1 такт, а 1% промах,
Найти % промахов в кэше. И Максимальную Длительность участка прохождения.
StateMachine m;  
         m.AlgorithmCache =  ...
         m. RAM = new int[arr];
           .....
        PseudoProgram [] programsEmu; 
// псевдо программа из инструкций, просто Адресов Сегментов. (каждый адрес должен быть найден) 
//происходит подсчет  шагов  , 
// MMU блок просто  постоянно обновляет TBL буфер
// и  загружает страницы, удаляет страницы ,   если находит в TLB то счетчик на 1 такт увеличить.
///  Если нет.  То тут  после получения адреса, как именно Обновить кэш(что удалить, куда добавить, как избежать дырок) темноватый лес. что и хочу понять. 
        for( ;;){
                 for(int i=0; ...)
                programs[i].RunNextPart( m);  // симуляция   процесса. Выполняется след. порция инструкций
                 // программы разной длины, и приоритета,  просто симулируют запросы сегментов. (генерируют промахи)
             if(...) //... break;
         }  
   //вывести статистику разные зависимости от алгоритма.
  • Вопрос задан
  • 284 просмотра
Пригласить эксперта
Ответы на вопрос 1
@r6l-025
Реализации разные могут быть. Можно посмотреть реализацию на HDL коде для risc-v процов. Это будет самой точной моделью, т.к. это и есть исходники самого проца
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы