Capítulo 9 Es un procedimiento de gestión de memoria muy eficaz en los SO multitarea que manejan memoria virtual. Divide y manipula los programas y los datos en trozos de tamaño fijo (páginas). Las páginas no guardan relación con la estructura lógica con la que se ha construido el software. La paginación utiliza bloques de tamaño físico. La mayor ventaja esta en la transferencia e intercambio de elementos entre la memoria virtual y la física. El tamaño fijo facilita la ocupación de la memoria y el rendimiento en su explotación. Los SO que manejan la paginación son muy simples y rápidos debido a que los algoritmos de transferencia son muy simples (optimiza el aprovechamiento del espacio de memoria y acelera la velocidad de acceso). El mayor inconveniente es el mal aprovechamiento de memoria. Como el tamaño es fijo, puede que un objeto de código requiera varias o menos de una página. La paginación no se adapta a las necesidades de espacio que precisa el software. Solo es necesario que un reducido número de páginas de la tarea en curso este ubicado en la MP en cada momento. El procesador Pentium siempre trabaja con segmentación, puede trabajar con paginación de forma optativa. Mecanismo de paginación La unidad de paginación esta implantada en hardware dentro del Pentium. Solo opera en modo protegido. Para su habilitación basta con poner 1b (PG) de uno de los registros de control (programador de sistemas). Cuando esta habilitada se divide a cada segmento en páginas sucesivas de 4KB c/u (el SO realiza varios accesos a memoria para conseguir la misma información que se conseguía con la segmentación en un solo acceso). El Pentium puede manejar páginas de hasta 4MB. A medida que se necesitan las páginas, se cargan y distribuyen sobre la memoria física en forma aleatoria. La activación del bit PSE (del registro CR4) implica trabajar con páginas de 4MB, de otra manera trabajara con páginas de 4KB. El Pentium utiliza un buffer (BTB) de predicción de bifurcaciones que evita la necesidad de eliminar las instrucciones que ya han sido buscadas y decodificadas. La unidad de paginación traduce la dirección lineal a física. La paginación gobierna la memoria con una gran tabla de millones de entradas, una por página. En cada entrada se guardarían la dirección base de comienzo de la página y los atributos de la misma, como un descriptor, pero sin el campo LÍMITE. Los 32b de la dirección lineal no van directamente a la MP, sino que se llevan a la unidad de paginación. Desarrolla la misma función pero en tabla de paginas. Para referenciar la base de una página bastan 20b. De esta forma la tabla de páginas proporciona en c/u de sus entradas los 20b de más peso de la dirección de la base. Finalmente se le suma a la base el valor del desplazamiento (12b de menos peso de la dirección lineal) para obtener la dirección física de 32b que apunta a la posición referenciada en una página de la MP. Si cada entrada consta de 32b, la tabla de páginas tendrá un tamaño de 4MB. Tablas de páginas Quedan definidas por 3 parámetros: Base → 32b, los 12 últimos deberán ser 0 (páginas de 4KB) → solo se necesitan 20b Límite → no es necesario → tamaño fijo Atributos Como la tabla tiene un tamaño de 4MB y debe residir en la MP para poder ser manejada por la CPU, utiliza una gran cantidad de MP. Para reducir el espacio de memoria que ocupan las tablas, Intel recurrió a una traducción en dos niveles. En un primer nivel de traducción lo soporta la tabla denominada directorio de tablas de paginas, consta de 1K entradas de 32b c/u, ocupa una pagina de 4KB y controla hasta 1.024, se seleccionan mediante los 10b de mas peso de la dirección lineal. Cada entrada apunta a otra página que se llama tabla de páginas y tiene la misma estructura que el directorio. El directorio es fijo para cada tarea y su base esta almacenada en el registro de control de la CPU. Para posibilitar la paginación es imprescindible que el directorio de paginación este ubicado en la MP. El acceso a una entrada del directorio se calcula sumándole a la base el valor de los 10b de más peso. La entrada seleccionada tiene la dirección de la base de una página, que actúa como una segunda tabla de páginas formada por 1K entradas de 32b. Para acceder a estas se le suma a la base el valor de los 10b centrales. Y en esta se guarda la referencia a una página de trabajo de la MP. El directorio tiene 1K entradas y cada una de ellas direccionan a una tabla de páginas que hace referencia a 1K páginas de la memoria, entre ambas se puede manejar 1M páginas. Para mantener la paginación solo se precisan 8KB de la MP. Cuando el Pentium maneja páginas de 4MB, los 10b de más peso de la dirección lineal se le suman al contenido del registro CR3 para direccionar una entrada del directorio en donde se guarda la base de la página a acceder y sus atributos. Como desplazamiento en la página se utilizan los 22b de menos peso. Como las páginas son de 4MB la traducción se efectúa en un solo nivel. Ventaja en dos niveles: poco espacio de memoria principal que se precisa Desventaja en dos niveles: inconveniente de lentitud, ya que la CPU debe acceder 3 veces a MP para conseguir el dato. Para acelerar el proceso Intel introdujo el mecanismo LTB. Otra solución para reducir el tamaño de la tabla, es la tabla de páginas inversa (una entrada por cada marco de páginas). Esta solo da información de las páginas guardadas en los marcos. Si se produce un fallo debe existir un mecanismo de traducción de la información a memoria secundaria. El tamaño de la tabla es constante, pero la paginación es más compleja. Fallo de página Cada vez q se detecta que la información no esta en MP, se genera un fallo, que origina una excepción que llama a una rutina del SO que traslada dicha página desde la memoria virtual o disco a la memoria física o RAM y actualiza el contenido de las entradas de las tablas de traducción. Como no se sabe con anticipación, el SO habitualmente crea espacio en disco para todas las páginas del proceso en curso. También crea una estructura (puede ser parte de la tabla) para grabar la zona del disco donde almacena cada página virtual. Protección a nivel de página Dos niveles de protección: Usuario: nivel de privilegio 3 Supervisor: niveles 0, 1, 2 Siempre se toman como válidos los bits U/S Y R/W más restrictivos (numéricamente inferior) entre los que hay en el directorio de páginas y los de la tabla de páginas que corresponda a la página en cuestión. U/S R/W Protección de usuario (nivel 3) Protección de supervisor (niveles 0, 1, 2) 0 0 Ninguno Lectura/Escritura 0 1 Ninguno Lectura/Escritura 1 0 Solo lectura Lectura/Escritura 1 1 Lectura/Escritura Lectura/Escritura Formato de las entradas del directorio de las tablas de páginas 31 ATRIBUTOS 12 11 DIRECCION FISICA DE LA PÁGINA (20) DEFINIBLE S 0 S I Z D A 0 P C D P W T U / S R / W P Tabla de traducción de direcciones lineales (TLB) La traducción de dirección lineal en dirección física es lenta, porque consulta a las dos tablas (supone acceder fuera del microprocesador a la MP). Para acelerarlo, Intel introdujo una pequeña memoria caché especial ultrarrápida (TLB: Translation lookaside buffer). Esta caché es de acceso por contenido (CAM) y contiene etiquetas (dirección lineal) con sus respectivos datos asociados (dirección física). Cada vez que el mecanismo de paginación hace una traducción, guarda en la TLB el resultado. En el Pentium hay una TLB de 32 entradas para la caché de instrucciones y otra similar para la de datos. Estructura y funcionamiento de la TLB Con las 32 entradas de la TLB se controlas las 32 últimas páginas que ha manejado la CPU (espacio total de 128 KB, suficiente para contener el área de trabajo de un proceso). El Pentium maneja 64 páginas y 256 KB. Si el comparador no encuentra una etiqueta igual a la información suministrada, la CAM no contiene la traducción que se busca y señaliza AUSENCIA o FALLO. Dos posibilidades: 1. La pagina esta presente en memoria y solamente se necesita crear la entrada de la TLB que falla. 2. La pagina no esta presente en memoria y se necesita transferir el control al sistema operativo para que trate un fallo de página. El Pentium tiene 2 TLB independientes: Caché de instrucciones. Caché de datos: tiene 8 entradas exclusivas para páginas de 4MB y 64 para las de 4KB. Si se aumenta el nº de páginas se incrementa el nº de aciertos. Ambas son invisibles para todos los programas (excepto los del SO con nivel de prioridad PL = 0).