Extras
Estas son funciones extras que debe de cumplir la parte de USERPROG, pero que son extras a argument passing y a SYSCALLS.
Verificar Punteros
Esta es una función que ayuda a verificar que los punteros que el proceso de usuario envía a al Syscall Handler sean válidos. Para que sean válidos deben de cumplir estas dos condiciones:
El puntero no sea nulo o pertenezca a la memoria del kernel.
El puntero pertenece a la página de memoria del proceso.
Denegar la escritura de ejecutables.
Cuando un proceso es cargado es importante que el mismo proceso o otros procesos puedan modificar el contenido del archivo ejecutable del proceso. Este proceso se realiza en la función load
cuando la carga sea exitosa.
Algoritmo
Cargar el archivo.
Si se cargo exitosamente
Denegar la escritura al archivo.
Crear un
file descriptor
e ingresarlo a la lista defile descriptors
del thread
Cuando se termina el proceso , habilitar los permisos de escritura al archivo.
Cuando se llama la función file_close
, esta automáticamente habilita la escritura de un archivo abierto.
Verificar accesos a memoria
Esta verificación es similar a las verificaciones de punteros, solo que está verificación revisa los accesos a memoria mediante punteros que el proceso realiza. Estos accesos no son por medio de syscalls sino por medio de código.
Los casos que hay que revisar son:
Accede a un dirección nula
Accede a una dirección que no es del segmento de usuario.
La implementación de esta verificación se realiza en la función de page_fault
del archivo exception.c
, si sucede uno de esos dos casos, entonces se llama a la función exit(-1).
Last updated