Estoy tratando de implementar una pequeña CPU RISC (sin la predicción de ramificación y el cambio de nombre del registro) y quiero darle un caché completamente asociativo (cachés I y D).
Todo va bien, pero ahora debo entender cómo decidir qué entrada descartar. Utilizo una CAM para almacenar etiquetas (número de página) y encontrar entradas de caché. Al fallar puedo manejar la falla a través de una unidad MMU, etc.
Ya sé cómo hacer caché directamente asignada.
Pero, ¿cómo implementar una política LRU en el caché?
La mejor solución que encontré necesitaría N (= número de líneas de caché) ciclos de reloj para comparar cada línea y encontrar la entrada menos recientemente utilizada para ser desalojada. Eso es muy lento ...
Tiempo para desalojar la página a la RAM externa + tiempo para elegir la página = demasiados ciclos de reloj ...
¿Hay alguna forma de decidir qué página es la que menos se ha utilizado una en un ciclo de reloj?