Sistemas operativos

Qué es un page fault o fallo de página

Los ordenadores se han vuelto sistemas extremadamente complejos, con muchos subsistemas y partes que son extremadamente sofisticadas ya por sí solas. Cuando todas se ponen a funcionar en conjunto, tienen que encajar y funcionar de forma adecuada. Cuando el software y hardware «no se comprenden bien», pueden suceder numerosos problemas, uno de ellos es el page fault o fallo de página. ¿Sabes qué es?

¿Qué es un Page Fault o fallo de página?

Un page fault o fallo de página es un evento que ocurre cuando un proceso intenta acceder a una página de memoria virtual que no se encuentra cargada en la memoria física (RAM). Cuando ocurre un fallo de página, el procesador interrumpe la ejecución normal del proceso y transfiere el control al núcleo del sistema operativo, que debe cargar la página requerida desde el almacenamiento secundario (p.e.: un disco duro) hacia la memoria principal.

Ya debes saber que la memoria virtual ofrece a cada proceso la «ilusión» de disponer de un espacio de direcciones completo y contiguo, independientemente de la memoria física disponible. Esta abstracción se implementa mediante la paginación, donde el espacio de direcciones se divide en páginas y la memoria física en marcos. El sistema operativo utiliza una tabla de páginas para traducir direcciones virtuales a físicas. Si una página no está presente en memoria, se genera un page fault, para que pase a la RAM y así el procesador pueda seguir ejecutando el proceso con esos datos que necesita.

Te puede interesar conocer qué es la memoria virtual

Tipos de fallos de página

Pueden existir varios tipos de fallos de página en un sistema, como:

  • Minor Page Fault: se produce cuando la página requerida está en la memoria, pero no ha sido asignada aún al espacio del proceso. No requiere acceso al disco, por lo que es relativamente rápido.
  • Major Page Fault: ocurre cuando la página no está en la memoria y debe ser leída desde el disco. Esta operación es lenta y puede afectar el rendimiento del sistema.
  • Invalid Page Fault (Segmentation Fault): se da cuando el proceso intenta acceder a una dirección de memoria inválida o no asignable. Normalmente, esto resulta en la finalización del proceso por violación de segmento.

Más tipos de memorias aquí

Gestión de los fallos de página por el sistema operativo

Durante este proceso, el sistema operativo será el encargado de solucionar este fallo de página, como he comentado anteriormente. Para ello, se siguen una serie de pasos:

  1. Interrupción y paso al kernel: el procesador detecta el fallo y lanza una excepción que transfiere el control al sistema operativo. El contexto del proceso se guarda para poder reanudarlo después.
  2. Resolución del fallo: el sistema operativo verifica si la página puede recuperarse del disco o si se trata de un acceso inválido. Si es recuperable, se asigna un marco libre en la memoria y se carga la página desde el almacenamiento secundario.
  3. Actualización de la tabla de páginas: una vez cargada, se actualiza la tabla de páginas del proceso con la nueva entrada, y la ejecución se reanuda desde la instrucción que provocó el fallo.

Los fallos de página, especialmente los mayores, pueden introducir latencias significativas en la ejecución de los procesos. Un exceso de fallos puede provocar thrashing, una condición en la que el sistema pasa más tiempo gestionando memoria que ejecutando instrucciones útiles. Esto sucede cuando existe poca memoria RAM instalada o por un mal código del software, generalmente por una mala gestión de memoria del programador.

Ejemplo de resolución de fallos de página en Linux

Voy a tratar de explicar paso a paso cómo ocurre esto en Linux, con un ejemplo sencillo:

  1. CPU: no encuentra la página a la que se necesita acceder para seguir con la ejecución del proceso actual, es decir, la dirección de memoria no corresponde a la memoria física, ya que no está cargado en ella. Eso genera una interrupción de la ejecución del proceso. Ten en cuenta que la dirección a la que se apunta en el registro de la CPU está intentando a acceder a una dirección de memoria virtual en este caso, por ejemplo, 0x7ffde000. La dirección virtual se pasa por el mecanismo de traducción de direcciones (TTB oTranslation Lookaside Buffer) para buscar la dirección física correspondiente. Si la entrada en la tabla de páginas correspondiente a esa dirección virtual no está válida (por ejemplo, la página no está cargada en memoria o ha sido reemplazada), el procesador genera una excepción de fallo de página (page fault) y transfiere el control al kernel.
  2. Kernel: el procesador salta a una rutina de manejo de excepciones en el kernel, es decir, pasa de ejecutar el proceso o programa que generó el fallo de página  a ejecutar otro código del kernel para la resolución de este conflicto. Sin embargo, no pierde lo ejecutado en el proceso anterior, sino que guarda el estado actual de dicho proceso para luego recuperarlo por donde iba (almacena estados de los registros, etc). Esto involucra varias acciones:
    1. Modo kernel: el procesador cambia al modo kernel (modo supervisor), es decir, privilegiado, ya que la gestión de la memoria y la solución del fallo son tareas que no se puede manejar desde el modo usuario desde donde se estaba ejecutando el proceso. El kernel ahora se hace cargo del manejo del fallo de página. Esta transición es rápida.
    2. Gestión del fallo de página: el kernel de Linux tiene una rutina específica para manejar fallos de página. Aquí es donde comienza a intervenir la lógica del sistema operativo para resolver el problema. El proceso sigue varios pasos para identificar la causa. Linux obtiene información sobre la causa del fallo a través de una estructura de datos llamada registro de excepción, que contiene información sobre el fallo (por ejemplo, la dirección de la página que causó el fallo). Ahora debe verificar si el acceso a la memoria es válido:
      • Si la dirección de la página solicitada está fuera del rango permitido (como una dirección de memoria no asignada), se produce un error de segmento (segmentation fault), y el proceso se finaliza con una señal como SIGSEGV.
      • Si el fallo no es un fallo de segmentación, el kernel consulta la tabla de páginas del proceso (contiene las direcciones físicas correspondientes a las páginas de memoria virtual del proceso) para verificar si la página está asignada o si está marcada como «no presente» (en el caso de que la página esté en la partición /swap, en un archivo de intercambio, o aún no se haya cargado).  Si la entrada de la página solicitada es válida pero está «ausente» de la memoria, el kernel necesita traerla desde el almacenamiento secundario (disco duro) a la RAM. Sin embargo, si la página no está en la swap o archivo de intercambio, entonces el kernel puede buscarla en el FS o sistema de archivos.
    3. Carga: una vez el kernel va a cargar la página a la RAM, también es importante recordar que puede suceder varias cosas. Por un lado, que haya suficiente memoria RAM libre como para alojarla, en cuyo caso no hay problema. Sin embargo, si la memoria RAM está ocupada, el scheduler del kernel se pone a trabajar para reemplazar otro proceso con menor prioridad que se encuentra ocupando memoria y lo baja a la swap o archivo de intercambio, dejando así hueco. En este caso, como puedes imaginar, cuando se necesite ejecutar este proceso que ha sido reemplazado de la RAM, se generaría otro page fault…
    4. Actualización de la tabla de páginas: una vez que la página se ha cargado en la memoria, Linux debe actualizar las estructuras de datos para reflejar que la página ahora está disponible en memoria física, dicho de otro modo, el kernel actualiza la entrada correspondiente en la tabla de páginas del proceso, apuntando a la dirección física de la página recién cargada. Además, se marca la entrada de la página como «presente» en la tabla de páginas, lo que indica que la página ahora está disponible para el proceso.
    5. Reanudación del proceso: uUna vez que la página ha sido cargada correctamente y la tabla de páginas se ha actualizado, el kernel restaura el estado del proceso desde el registro de excepción y reanuda su ejecución en el punto en el que ocurrió el fallo de página. De vuelta a la CPU, cargará los estados de los registros guardados cuando se produjo la interrupción y seguirá ejecutando el proceso desde donde se interrumpió.

Ahora ya sabes qué es y cómo se soluciona. No olvides comentar…

Recent Posts

  • Portátiles y ordenadores

ASUS también piensa en los portátiles de uso cotidiano: los nuevos Zenbook y Vivobook aparecen en el Computex 2026

No todo en el stand de ASUS en COMPUTEX 2026 son superchips y estaciones de…

2 horas atrás
  • Memorias

HBM4E: SK hynix presenta sus módulos de hasta 48 GB y 4.0 TB/s

La carrera por el liderazgo en la memoria de alto ancho de banda HBM alcanza…

3 horas atrás
  • Portátiles y ordenadores

ASUS presenta sus portátiles con el NVIDIA RTX Spark en el Computex 2026: así son los nuevo ProArt P16 y P14

ASUS ha aprovechado su paso por el Computex 2026 para presentar los dos nuevos portátiles…

3 horas atrás