1.- En que consiste la paginacion?
La paginación consiste en considerar el espacio de direcciones lógicas de cada proceso como un conjunto de bloques de tamaño consistente llamados paginas. Cada dirección lógica manejada para un proceso estará conformada por un par de valores [pagina: desplazamiento].
La memoria física se administra implementando bloques de tamaño consistente denominados 'marcos'. Obviamente el tamaño de un 'marco' debe ser igual al tamaño de una pagina.
Por lo general el tamaño designado para los marcos y páginas es pequeña
2.- Cuando sucede un fallo de pagina y como se resuelve
Si adivinamos mal y el proceso trata de acceder a una página que no se trajo a memoria, ocurrirá una trampa de fallo de página. El hardware de paginación, al traducir la dirección mediante la tabla de páginas, observará que el valor del bit es inválido, generando una trampa para el sistema operativo (error de dirección no válido). Normalmente, un error de dirección no válida es consecuencia de intentar utilizar una dirección de memoria ilegal; en este caso, el proceso deberá terminar. Sin embargo, en esta situación la trampa es el resultado del fallo de página del sistema operativo al no transferir a memoria una parte válida del proceso, tratando de minimizar el tiempo adicional de transferencia de disco y los requisitos de memoria. Por tanto, debemos corregir esta omisión. El procedimiento es sencillo (figura 7.2):
Consultamos una tabla interna (que por lo general se conserva en el PCB del proceso) para determinar si la referencia fue un acceso a memoria válido o inválido.
Si fue inválido, abortamos el proceso. Si se trató de una referencia válida, pero aún no hemos traído la página, la incorporamos.
Encontramos un marco libre (por ejemplo, seleccionando uno de la tabla de marcos libres).
Planificamos una operación para leer de disco la página deseada en el marco recién asignado.
Cuando ha concluido la lectura de disco, modificamos la tabla interna que se conserva junto con el proceso y la tabla de páginas para indicar que ahora la página se encuentra en memoria.
Reiniciamos la instrucción interrumpida por la trampa de dirección ilegal. El proceso ahora puede acceder a la página como si siempre se hubiera encontrado en memoria.
Es importante observar que, como almacenamos el contexto del proceso (registros, código de condición, contador de instrucciones), interrumpido al ocurrir un fallo de página, podemos reanudarlo exactamente en el mismo punto y estado, excepto que ahora la página deseada se encuentra en memoria y se puede acceder a ella.
El caso más extremo es comenzar la ejecución de un proceso sin páginas en memoria. De inmediato, con la primera instrucción, el proceso presentaría una fallo de página. Después de traer de memoria esta página, el proceso continúa su ejecución, provocando fallos cuando sea necesario hasta que todas las páginas que necesita se encuentren en memoria. Esto es la paginación por demanda pura: no traer una página a memoria hasta que se requiera.
En teoría, algunos programas pueden acceder a una nueva página de memoria con cada instrucción que ejecutan, provocando posiblemente un fallo de página por cada instrucción. Esta situación provocaría un rendimiento inaceptable. Por fortuna, los análisis de procesos en ejecución han mostrado que esta situación es muy poco probable. Los programas suelen poseer una localidad de referencias (como veremos más adelante), que brinda un rendimiento aceptable en la paginación bajo demanda.