Page Replacement
Si existes, puedes regresar con nosotros.
Última actualización
Si existes, puedes regresar con nosotros.
Última actualización
Ya somos capaces de escribir los contenidos de los frames al Swap File e indicar que la página que estaba asociada a ese frame se encuentra en el Swap File.
Ahora nos enfocaremos en el complemento: Page Replacement.
Puede darse la ocasión que una página del proceso de encuentre en el Swap File, entonces cuando el proceso quiere utilizar esa página se provoca un page fault porque no se encuentra cargada en la RAM. Lo que ocurre internamente, es que durante el proceso de traducción se verifica un bit muy importante del Vector Flag que es el valid bit o también llamado present bit. Este bit le indica al OS que la página que busca el proceso está o no está cargada en la RAM. Si está cargada a RAM, el proceso de traducción puede seguir sin ningún problema, pero si no está cargada se genera un page fault.
Entonces, para solucionar estos tipos de page fault, debes de hacer lo siguiente:
Verificar que la página del proceso fue cargada a la RAM previamente.
Obtener un frame libre (o hacer page eviction).
Escribir contenido al frame libre:
Si la página del proceso se encuentra en el Swap File, leer los contenidos del Swap a ese frame Libre.
Si la página del proceso se encuentra en el ejecutable, leer los contenidos del ejecutable a ese frame libre.
Asociar la página del proceso que se quiso utilizar con el frame libre y actualizar la Page Table del proceso.
Implementar Page Replacement para completar Virtual Memory
Por algo hicimos la Supplementary Page Table, ¿no es así? Puedes saber si la página del proceso fue previamente cargada si encuentras un SPTE que tenga asociado la Page Address.
No hay mucho que explicar aquí
Si la página se encuentra en el Swap File, el proceso es bastante directo. Lees los contenidos del Swap File al Frame y liberas los sectores que fueron utilizados. (Recuerda que son 8 sectores que se deben de leer y liberar)
Si la página se encuentra en el ejecutable, el proceso puede ser bastante directo o complicado; depende si has guardado la información adecuada asociada a esa página.
Ya tenemos lista la frame, solo falta asociar el frame y la página del usuario y actualizar la Page Table del proceso.
¿Debo crear un nuevo SPTE?
No.
¿Debo crear un nuevo FTE?
Sí.
¿Hay otro estado en que puede estar la página del proceso?
Solamente hay 3 estados.
¿Algún consejo?
Sí, ahora debes de decidir si un page fault se trata de un Page Replacement, Stack Growth o si es un acceso inválido que mata el proceso.
Si has llegado hasta acá, entonces ya tienes toda la funcionalidad de Virtual Memory implementada y lo único que queda son los syscalls.
Si corres las pruebas, pasarás exitosamente las siguientes: