IIC 2332 -- Sistemas Operativos
Tarea de Memoria Virtual
Parte A

En esta tarea convertirás Nachos usar el TLB en vez de las tablas de páginas de hardware. Esto es nuestro primer paso en la implementación de la memoria virtual para Nachos.

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.

Uso de TLB

Para compilar Nachos con la nueva simulación de la máquina, haz un "make" en el directorio vm. No hay ningunos archivos nuevos en este directorio, pero el Makefile compilará el sistema con la opción "-D USE_TLB". Vas a modificar tus archivos en userprog pero compilar y ejecutar Nachos en vm. No debiera necesitar cambiar Makefile.common.

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.

Implementación

La máquina tiene solamente un TLB (en machine->tlb, con un tamaño de TLBSize). Por eso, cuando haya un cambio de contexto, tienes que invalidar el TLB. De otro modo, el nuevo proceso heredaría las traducciones del proceso precedente, con resultados desastrosos.

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/tarea3A
Esta 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:

Si tu implementación es correcta, Nachos debiera funcionar como antes tus cambios. Inserta algunas llamadas a DEBUG así que puedes seguir la ejecución usando el TLB.

Entrega

Entrega solamente tus archivos de addrspace.h y addrspace.cc, que debiera incluir comentarios discribiendo tu diseño e implementación.
Last edited May 27, 1996, by knabe@ing.puc.cl