Есть ли какие-то визуализации(конкретно только между 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;
}
//вывести статистику разные зависимости от алгоритма.