En informática, un fallo de página es una excepción que la unidad de gestión de memoria (MMU) genera cuando un proceso accede a una página de memoria sin las preparaciones adecuadas. Para acceder a la página es necesario añadir una asignación al espacio de direcciones virtuales del proceso . Además, puede ser necesario cargar el contenido real de la página desde una copia de seguridad, por ejemplo, un disco . La MMU detecta el fallo de página, pero el núcleo del sistema operativo maneja la excepción haciendo que la página requerida sea accesible en la memoria física o denegando un acceso ilegal a la memoria.
Los errores de página válidos son comunes y necesarios para aumentar la cantidad de memoria disponible para los programas en cualquier sistema operativo que utilice memoria virtual , como Windows , macOS y el kernel de Linux . [1]
Si la página está cargada en la memoria en el momento en que se genera el error, pero no está marcada en la unidad de administración de memoria como cargada en la memoria, entonces se denomina error de página leve o suave . El controlador de errores de página en el sistema operativo solo necesita hacer que la entrada para esa página en la unidad de administración de memoria apunte a la página en la memoria e indique que la página está cargada en la memoria; no necesita leer la página en la memoria. Esto podría suceder si la memoria es compartida por diferentes programas y la página ya está traída a la memoria para otros programas.
Este es el mecanismo que utiliza un sistema operativo para aumentar la cantidad de memoria de programa disponible a demanda. El sistema operativo retrasa la carga de partes del programa desde el disco hasta que el programa intenta usarlo y se genera el error de página. Si la página no está cargada en la memoria en el momento del error, se denomina error de página grave o grave . El controlador de errores de página del sistema operativo debe encontrar una ubicación libre: una página libre en la memoria o una página no libre en la memoria. Esta última puede ser utilizada por otro proceso, en cuyo caso el sistema operativo debe escribir los datos de esa página (si no se han escrito desde la última modificación) y marcar esa página como no cargada en la memoria en su tabla de páginas de proceso . Una vez que el espacio se ha hecho disponible, el sistema operativo puede leer los datos de la nueva página en la memoria, agregar una entrada a su ubicación en la unidad de administración de memoria e indicar que la página está cargada. Por lo tanto, los errores graves son más costosos que los errores menores y agregan latencia de acceso al almacenamiento a la ejecución del programa interrumpido.
Si se produce un error de página para una referencia a una dirección que no forma parte del espacio de direcciones virtuales , es decir, no puede haber una página en la memoria que corresponda a ella, se denomina error de página no válida . El controlador de errores de página del sistema operativo generalmente pasará un error de segmentación al proceso infractor, indicando que el acceso no fue válido; esto suele dar como resultado la terminación anormal del código que realizó la referencia no válida. Un puntero nulo suele representarse como un puntero a la dirección 0 en el espacio de direcciones; muchos sistemas operativos configuran la MMU para indicar que la página que contiene esa dirección no está en la memoria y no incluyen esa página en el espacio de direcciones virtuales, de modo que los intentos de leer o escribir en la memoria a la que hace referencia un puntero nulo obtienen un error de página no válida.
Los accesos ilegales y los errores de páginas no válidas pueden generar un error de segmentación o un error de bus , lo que provoca un bloqueo de la aplicación o del sistema operativo . Los errores de software suelen ser las causas de estos problemas, pero los errores de memoria de hardware, como los causados por el overclocking , pueden dañar los punteros y hacer que el código válido falle.
Los sistemas operativos proporcionan diferentes mecanismos para informar de errores de página. Microsoft Windows utiliza un manejo de excepciones estructurado para informar de errores de página no válidos como excepciones de violación de acceso . Los sistemas similares a UNIX suelen utilizar señales , como SIGSEGV , para informar de estas condiciones de error a los programas. Si el programa que recibe el error no lo gestiona, el sistema operativo realiza una acción predeterminada, que normalmente implica la finalización del proceso en ejecución que causó la condición de error y notifica al usuario que el programa ha funcionado mal. Windows suele informar de estos fallos sin entrar en detalles. Un usuario experimentado puede recuperar información detallada utilizando WinDbg y el minidump que Windows crea durante el fallo. Los sistemas operativos similares a UNIX informan de estas condiciones con mensajes de error como "violación de segmentación" o "error de bus", y pueden producir un volcado de memoria .
Los fallos de página degradan el rendimiento del sistema y pueden provocar un colapso . Los fallos de página importantes en equipos convencionales que utilizan unidades de disco duro pueden tener un impacto significativo en su rendimiento, ya que una unidad de disco duro promedio tiene una latencia rotacional promedio de 3 ms, un tiempo de búsqueda de 5 ms y un tiempo de transferencia de 0,05 ms/página. Por lo tanto, el tiempo total de paginación es cercano a 8 ms (= 8000 μs). Si el tiempo de acceso a la memoria es de 0,2 μs, entonces el fallo de página haría que la operación fuera aproximadamente 40 000 veces más lenta.
La optimización del rendimiento de los programas o sistemas operativos a menudo implica la reducción del número de fallos de página. Dos de los principales objetivos de la optimización son la reducción del uso general de la memoria y la mejora de la localización de la memoria . Para reducir los fallos de página, los desarrolladores deben utilizar un algoritmo de reemplazo de página adecuado que maximice las visitas a la página. Se han propuesto muchos, como la implementación de algoritmos heurísticos para reducir la incidencia de los fallos de página.
Una memoria física más grande también reduce los fallos de página.