
Una tabla de páginas es una estructura de datos utilizada por un sistema de memoria virtual en una computadora para almacenar asignaciones entre direcciones virtuales y direcciones físicas . Las direcciones virtuales son utilizadas por el programa ejecutado por el proceso de acceso , mientras que las direcciones físicas son utilizadas por el hardware, o más específicamente, por el subsistema de memoria de acceso aleatorio (RAM). La tabla de páginas es un componente clave de la traducción de direcciones virtuales , necesaria para acceder a los datos en la memoria. La tabla de páginas es configurada por el sistema operativo de la computadora y puede ser leída y escrita durante el proceso de traducción de direcciones virtuales por la unidad de administración de memoria o por software o firmware de bajo nivel del sistema.
Función de la tabla de páginas
En los sistemas operativos que utilizan memoria virtual, cada proceso tiene la impresión de estar trabajando con grandes secciones contiguas de memoria. Físicamente, la memoria de cada proceso puede estar dispersa en diferentes áreas de la memoria física, o puede haberse movido ( paginada ) a un almacenamiento secundario, normalmente a un disco duro (HDD) o a una unidad de estado sólido (SSD).
Cuando un proceso solicita acceso a datos en su memoria, es responsabilidad del sistema operativo asignar la dirección virtual proporcionada por el proceso a la dirección física de la memoria donde se almacenan esos datos. La tabla de páginas es donde se almacenan las asignaciones de direcciones virtuales a direcciones físicas, y cada asignación también se conoce como entrada de la tabla de páginas (PTE). [ 1 ] [ 2 ]
El proceso de traducción

La unidad de gestión de memoria (MMU) dentro de la CPU almacena una caché de asignaciones utilizadas recientemente de la tabla de páginas del sistema operativo. Esto se denomina búfer de traducción anticipada (TLB), que es una caché asociativa.
Cuando se necesita traducir una dirección virtual a una dirección física, primero se busca en la TLB. Si se encuentra una coincidencia, lo que se conoce como acierto de TLB , se devuelve la dirección física y se puede continuar el acceso a la memoria. Sin embargo, si no hay coincidencia, lo que se denomina fallo de TLB , la MMU, el firmware del sistema o el gestor de fallos de TLB del sistema operativo normalmente buscarán la asignación de direcciones en la tabla de páginas para ver si existe una asignación, lo que se denomina recorrido de página . Si existe, se escribe de nuevo en la TLB, lo cual es necesario porque el hardware accede a la memoria a través de la TLB en un sistema de memoria virtual, y se reinicia la instrucción que causó el fallo, lo que también puede ocurrir en paralelo. La traducción posterior dará como resultado un acierto de TLB y el acceso a la memoria continuará.
Errores de traducción
La búsqueda en la tabla de páginas puede fallar, provocando un fallo de página , por dos razones:
- La búsqueda puede fallar si no hay una traducción disponible para la dirección virtual, lo que significa que dicha dirección virtual no es válida. Esto suele ocurrir debido a un error de programación, y el sistema operativo debe tomar medidas para solucionar el problema. En los sistemas operativos modernos, esto provocará que se envíe una señal de error de segmentación al programa responsable.
- La búsqueda también puede fallar si la página no reside actualmente en la memoria física. Esto ocurre si la página solicitada se ha movido fuera de la memoria física para dejar espacio a otra página. En este caso, la página se pagina a un almacenamiento secundario ubicado en un medio como un disco duro (este almacenamiento secundario, o "almacenamiento de respaldo", a menudo se denomina partición de intercambio si es una partición de disco, o archivo de intercambio , archivo de paginación o archivo de paginación si es un archivo). Cuando esto sucede, la página debe tomarse del disco y volver a colocarse en la memoria física. Se utiliza un mecanismo similar para los archivos mapeados en memoria , que se asignan a la memoria virtual y se cargan en la memoria física bajo demanda.
Cuando la memoria física no está llena, esta es una operación sencilla: la página se escribe de nuevo en la memoria física, se actualizan la tabla de páginas y la TLB, y se reinicia la instrucción. Sin embargo, cuando la memoria física está llena, será necesario paginar una o más páginas para dejar espacio a la página solicitada. La tabla de páginas debe actualizarse para indicar que las páginas que antes estaban en la memoria física ya no están allí, y para indicar que la página que estaba en el disco ahora está en la memoria física. La TLB también debe actualizarse, eliminando la página paginada, y la instrucción debe reiniciarse. La elección de la página a paginar es el tema de los algoritmos de reemplazo de páginas .
Algunas MMU provocan un fallo de página por otros motivos, independientemente de si la página reside o no en la memoria física y está asignada al espacio de direcciones virtuales de un proceso:
- Intentar escribir cuando la tabla de páginas tiene el bit de solo lectura activado provoca un fallo de página. Esto es habitual en la implementación de la copia en escritura de muchos sistemas operativos ; también puede ocurrir cuando se escribe en una ubicación desde la que el proceso tiene permiso para leer, pero en la que no tiene permiso para escribir, en cuyo caso se envía una señal al proceso.
- Intentar ejecutar código cuando la tabla de páginas tiene el bit NX (bit de no ejecución) activado provoca un fallo de página. Esto puede ser utilizado por un sistema operativo, en combinación con el bit de solo lectura, para proporcionar una función de escritura XOR Ejecutar que detiene ciertos tipos de exploits. [ 3 ]
Datos de la tabla de marcos
Los sistemas de tablas de páginas más sencillos suelen mantener una tabla de marcos y una tabla de páginas. La tabla de marcos contiene información sobre qué marcos están asignados. En sistemas más avanzados, la tabla de marcos también puede contener información sobre el espacio de direcciones al que pertenece una página, información estadística u otra información de contexto.
Datos de la tabla de páginas
La tabla de páginas es una matriz de entradas de tabla de páginas.
Entrada de tabla de página
Cada entrada de la tabla de páginas (PTE) contiene la correspondencia entre la dirección virtual de una página y la dirección de un marco físico. También incluye información auxiliar sobre la página, como el bit de presencia, el bit de modificación, el espacio de direcciones o la información de identificación del proceso, entre otros datos.
El almacenamiento secundario, como un disco duro, puede utilizarse para ampliar la memoria física. Las páginas se pueden cargar y descargar tanto de la memoria física como del disco. El bit de presencia indica qué páginas se encuentran actualmente en la memoria física o en el disco, y cómo gestionarlas, es decir, si se debe cargar una página del disco y descargar otra de la memoria física.
El bit de modificación permite optimizar el rendimiento. Una página en disco que se carga en la memoria física, se lee y posteriormente se vuelve a cargar, no necesita escribirse de nuevo en el disco, ya que no ha cambiado. Sin embargo, si se escribió en la página después de cargarla, se activará su bit de modificación, lo que indica que debe escribirse de nuevo en la memoria de respaldo. Esta estrategia requiere que la memoria de respaldo conserve una copia de la página después de cargarla en la memoria. Cuando no se utiliza el bit de modificación, la memoria de respaldo solo necesita tener el tamaño total instantáneo de todas las páginas cargadas en cualquier momento. Cuando se utiliza el bit de modificación, siempre habrá algunas páginas tanto en la memoria física como en la memoria de respaldo.
En los sistemas operativos que no son de espacio de direcciones único , la información del espacio de direcciones o del ID del proceso es necesaria para que el sistema de gestión de memoria virtual sepa qué páginas asociar a cada proceso. Dos procesos pueden usar dos direcciones virtuales idénticas para diferentes propósitos. La tabla de páginas debe proporcionar asignaciones de memoria virtual diferentes para los dos procesos. Esto se puede lograr asignando identificadores de mapa de direcciones distintos a los dos procesos o utilizando ID de proceso. Asociar los ID de proceso con las páginas de memoria virtual también puede ayudar a seleccionar las páginas que se deben paginar, ya que es menos probable que las páginas asociadas con procesos inactivos, en particular aquellos cuyas páginas de código se han paginado, se necesiten de inmediato que las páginas pertenecientes a procesos activos.
Como alternativa a etiquetar las entradas de la tabla de páginas con identificadores únicos de proceso, la propia tabla de páginas puede ocupar una página de memoria virtual diferente para cada proceso, de modo que pase a formar parte del contexto del proceso. En esta implementación, la tabla de páginas del proceso se puede paginar cuando el proceso ya no reside en la memoria.
Tipos de tabla de página
Existen varios tipos de tablas de páginas, optimizadas para diferentes requisitos. Básicamente, una tabla de páginas básica debe almacenar la dirección virtual, la dirección física subyacente a esta dirección virtual y, posiblemente, información sobre el espacio de direcciones.
Tablas de páginas invertidas
Una tabla de páginas invertida (IPT) se puede considerar como una extensión externa de la TLB que utiliza la memoria RAM del sistema. A diferencia de una tabla de páginas convencional, no necesariamente puede almacenar todas las asignaciones actuales. El sistema operativo debe estar preparado para gestionar los fallos de memoria, al igual que lo haría con una TLB basada en software al estilo MIPS.
La tabla de páginas invertida (IPT) combina una tabla de páginas y una tabla de marcos en una única estructura de datos. Su núcleo es una tabla de tamaño fijo con un número de filas igual al número de marcos en memoria. Si hay 4000 marcos, la tabla de páginas invertida tiene 4000 filas. Cada fila contiene una entrada para el número de página virtual (VPN), el número de página física (no la dirección física), otros datos y un mecanismo para crear una cadena de colisiones , como veremos más adelante.
La búsqueda en todas las entradas de la estructura IPT principal es ineficiente, por lo que se puede usar una tabla hash para asignar direcciones virtuales (y espacio de direcciones/información PID si es necesario) a un índice en la IPT; aquí es donde se utiliza la cadena de colisiones. Esta tabla hash se conoce como tabla de anclaje hash . La función hash no suele estar optimizada para la cobertura; la velocidad bruta es más deseable. Por supuesto, las tablas hash experimentan colisiones. Debido a la función hash elegida, podemos experimentar muchas colisiones durante su uso, por lo que para cada entrada en la tabla se proporciona la VPN para verificar si se trata de la entrada buscada o de una colisión.
Para buscar una asignación, se utiliza la tabla hash de anclaje. Si no existe ninguna entrada, se produce un fallo de página. En caso contrario, se encuentra la entrada. Dependiendo de la arquitectura, la entrada puede volver a colocarse en la TLB y reiniciarse la referencia de memoria, o bien se puede seguir la cadena de colisiones hasta que se agote y se produzca un fallo de página.
En este esquema, una dirección virtual podría dividirse en dos partes: la primera sería un número de página virtual y la segunda, el desplazamiento dentro de esa página.
Un problema importante de este diseño es la escasa localidad de caché causada por la función hash . Los diseños basados en árboles evitan esto colocando las entradas de la tabla de páginas para páginas adyacentes en ubicaciones contiguas, pero una tabla de páginas invertida destruye la localidad espacial de referencia al dispersar las entradas por todas partes. Un sistema operativo puede minimizar el tamaño de la tabla hash para reducir este problema, aunque esto conlleva un aumento en la tasa de fallos.
Normalmente, existe una tabla hash contigua en la memoria física, compartida por todos los procesos. Se utiliza un identificador por proceso para diferenciar las páginas de cada proceso. Eliminar las entradas de la tabla de páginas de un proceso determinado es algo lento; el sistema operativo puede evitar reutilizar los identificadores por proceso para retrasar esta tarea. Como alternativa, se pueden usar tablas hash por proceso, pero resultan poco prácticas debido a la fragmentación de la memoria , que requiere la preasignación de las tablas.
Las tablas de páginas invertidas se utilizan, por ejemplo, en las arquitecturas PowerPC , UltraSPARC e IA-64 . [ 4 ]
Tablas de páginas multinivel


La tabla de páginas invertida mantiene un listado de las asignaciones instaladas para todos los marcos en la memoria física. Sin embargo, esto puede resultar bastante ineficiente. En su lugar, podríamos crear una estructura de tabla de páginas que contenga asignaciones para páginas virtuales. Esto se logra manteniendo varias tablas de páginas que cubren un bloque determinado de memoria virtual. Por ejemplo, podemos crear páginas más pequeñas de 4 KB con 1024 entradas que cubran 4 MB de memoria virtual.
Esto resulta útil, ya que a menudo se utilizan las partes superior e inferior de la memoria virtual para ejecutar un proceso: la parte superior se usa generalmente para segmentos de texto y datos, mientras que la inferior se usa para la pila, con memoria libre entre ambas. La tabla de páginas multinivel puede conservar algunas tablas de páginas más pequeñas para cubrir únicamente las partes superior e inferior de la memoria, y crear nuevas solo cuando sea estrictamente necesario.
Ahora, cada una de estas tablas de páginas más pequeñas está vinculada mediante una tabla maestra, creando así una estructura de datos en forma de árbol . No es necesario que haya solo dos niveles, sino posiblemente varios. Por ejemplo, una dirección virtual en este esquema podría dividirse en tres partes: el índice en la tabla de páginas raíz, el índice en la tabla de subpáginas y el desplazamiento dentro de esa página.
Las tablas de páginas multinivel también se conocen como "tablas de páginas jerárquicas".
Tablas de páginas virtualizadas
Se mencionó que crear una estructura de tabla de páginas que contuviera asignaciones para cada página virtual en el espacio de direcciones virtuales podría resultar ineficiente. Sin embargo, podemos evitar los problemas de espacio excesivo colocando la tabla de páginas en la memoria virtual y permitiendo que el sistema de memoria virtual administre la memoria para dicha tabla.
Sin embargo, parte de esta estructura lineal de la tabla de páginas debe permanecer siempre residente en la memoria física para evitar fallos de página circulares y buscar una parte clave de la tabla de páginas que no esté presente en ella.
Tablas de páginas anidadas
Se pueden implementar tablas de páginas anidadas para mejorar el rendimiento de la virtualización de hardware . Al brindar soporte de hardware para la virtualización de tablas de páginas , se reduce considerablemente la necesidad de emulación. Para la virtualización x86 , las opciones actuales son la función Extended Page Table de Intel y la función Rapid Virtualization Indexing de AMD .
Véase también
Referencias
Lecturas adicionales
- Andrew S. Tanenbaum , Sistemas operativos modernos , ISBN 0-13-031358-0
- A. Silberschatz , PB Galvin, G. Gagne, Conceptos de sistemas operativos , ISBN 0-471-69466-5
- Sistemas Operativos: Tres Piezas Fáciles , por Remzi H. Arpaci-Dusseau y Andrea C. Arpaci-Dusseau. Arpaci-Dusseau Books, 2014. Capítulos relevantes: Espacios de direcciones, Traducción de direcciones, Introducción a la paginación , TLB, Tablas de páginas avanzadas.
- Tutorial de memoria virtual del CNE, Centro para el Nuevo Ingeniero, Universidad George Mason, Tablas de páginas
- "El arte del ensamblador, 6.6 Memoria virtual, protección y paginación" . Archivado del original el 18 de febrero de 2012.
- "Manuales para desarrolladores de software de las arquitecturas Intel 64 e IA-32" . Intel. 18 de enero de 2018.
- "Manual del desarrollador de software de la arquitectura AMD64" . AMD. Archivado del original el 13 de marzo de 2010.
Enlaces externos
- Referencia de gestión de memoria
- Memoria virtual
- Gestión de la memoria
- Memoria de computadora