Read & Write
Nuestros viejos amigos... un gusto volverlos aver
Un poco de Explicación...
En la fase 2 no tenías que lidiar con reads o write que usen más de una página, pero en esta fase, es un problema tedioso.
Cuando se hace un read o un write, se deben de pre-cargar las páginas y frames que el proceso utilizará.
¿Por qué se deben de pre-cargar? Asume un archivo que su tamaño total ocupa 5 frames y quieres leer todo contenido, entonces dentro del proceso existirán 5 páginas adicionales que luego en el proceso de traducción se traducen a esos 5 frames.
Si no los pre-cargas, se generan page faults. La diferencia de estos page faults con los anteriores que has lidiado, es que en los anteriores se provocan en el modo user. Estos page faults generados por los syscalls hacen que el sistema transicione del modo user a modo kernel.
Como anteriormente lo planteamos, si ocurre un page fault en modo kernel y no dependes exclusivamente de page_fault() para manejar validaciones de direcciones, entonces matas al proceso de manera inmediata.
Para evitar lo anterior, es por ello que se pre-cargan los frames y las páginas que el proceso utilizará.
Implementación
Te dejaré el código base sobre las 2 funciones que debes implementar:
Yo sé, soy una guía muy generosa :D
Te divertirás haciendo un poco de matemática.
FAQ
¿En dónde coloco estas funciones?
Te he dado una pista en la sección de "Un poco de Explicación...".
¿Solo es necesario hacer esto en el Syscall de Read y Write?
Sí.
Make Grade
Con estos syscalls implementados, pasas todas las pruebas que no utilizan Mmap o Unmap.
Al correr las pruebas, aprobarás exitosamente los siguientes:
Functionality
Robustness
Última actualización
¿Te fue útil?