En la última tarea, usamos la capacidad de la simulación MIPS de traducir direcciones en las tablas de páginas. En esta tarea el hardware no usa tablas de páginas directamente, sino usa solamente un TLB. El sistema operativo maneja la relación entre el TLB y la tabla de páginas de un proceso.
El plazo vence el lunes, 3 de junio, a las 11:30. La conversión al uso del TLB no es difícil, y puedes usar esta oportunidad para corregir errores que quedan de la última tarea.
El TLB es un caché que guarda algunas entradas de tipo TranslationEntry (ver a translate.h). Las entradas son idénticas a las entradas de las tablas de páginas de la última tarea. Cada una tiene campos para una página virtual, un marco, y algunos bits. El TLB es muy pequeño; en la simulación, tiene solamente cuatro entradas. También, hay solamente un TLB en la máquina. No hay un TLB para cada proceso.
En un programa de usuario, cada referencia a la memoria causa que la máquina busque en el TLB para una entrada con la misma página virtual como la referencia. Si hay una entrada igual, la máquina lee el número de marco y hace el acceso a la memoria. De otro modo, genera una excepción.
Con la excepción el control vuelve al sistema operativo en ExceptionHandler. La excepción lleva la dirección virtual que fracasó, y el sistema la tiene que usar para encontrar (en la tabla de páginas del proceso) el marco que contiene la página. El sistema actualiza el TLB con esta información y vuelve. La máquina trata de ejecutar la instrucción otra vez, y esta vez encuentra la traducción necesario en el TLB.
El beneficio del TLB es que en sistemas reales, los accesos al TLB son mucho más rápido que los accesos a la tabla de páginas. Un TLB con una tasa de aciertos suficiente alta mejora el tiempo para accesar a la memoria y disminuye el costo de la paginación.
Al mismo tiempo, el sistema operativo (por lo menos en la MIPS) tiene que hacer más. Por ejemplo, el bit sucio es modificado solamente en el TLB; si el sistema operativos quiere guarda esta información, la tiene que copiar de la TLB a la tabla de páginas del proceso.
Debieras modificar AddrSpace::RestoreState y AddrSpace::SaveState para manipular el TLB (elimina el código anterior de RestoreState). Ambos de estas funciones son llamadas por threads.cc con las interrupciones apagadas; son atómicas. SaveState debiera guarda la información (o sea, los bits interesantes; ¿cuales son?) en el TLB. RestoreState debiera invalidar el TLB (cambiar los bits válidos a FALSE); el hardware no usa los contenidos de las entradas inválidas.
Una nueva versión de exception.cc está en
/usr/local/nachos/iic2332/tarea3AEsta versión llama a una nueva función, AddrSpace::TLBMiss, si la máquina genera una excepción del TLB.
TLBMiss tiene un argumento que es la dirección virtual que no está en el TLB. Debiera chequear si la dirección es legal y vuelve FALSE si no. Entonces debiera reemplazar una entrada en la TLB con la nueva información de la tabla de páginas. Apuntes: