Explicaré un ejemplo simple al agregar una llamada al sistema en xv6.
Supongamos que tiene que agregar una llamada al sistema para obtener el tamaño de espacio de direcciones del programa de usuario en ejecución. Puede nombrar su llamada al sistema como getmysize() y llamar a esta llamada del sistema desde un programa de usuario.
Puede escribir su programa de usuario de la siguiente manera. Deje que el nombre del programa sea myprog.c Supongo que sabe cómo agregar un programa de usuario a xv6. Así que me saltearé mencionar estos pasos aquí porque estará fuera del tema.
#include "types.h"
#include "stat.h"
#include "user.h"
int main(void){
printf(1,"The size of my address space is %d bytes\n", getmysize());
exit();
}
Este programa está escrito con el propósito de demostrar el funcionamiento de sólo la llamada del sistema.
Ahora agregaremos nuestra llamada al sistema a xv6.
Primero agregue la siguiente línea al final del archivo syscall.h.
#define SYS_getmysize 23
Tenga en cuenta que el 23 aquí podría cambiar según el número proporcionado antes de la línea que va a agregar en el archivo. Es decir, si el número de llamada del sistema es 22 en la línea antes de la línea que va a agregar, su línea debería tener el número 23. Así de simple.
Ahora agregue las siguientes líneas al archivo syscall.c.
extern int sys_getmysize(void);
y en el conjunto de llamadas al sistema, añada la siguiente línea en.
[SYS_getmysize] sys_getmysize,
En el archivo sysproc.c, que es donde va la aplicación de la llamada al sistema si se trata de una llamada al sistema relacionada con el manejo del proceso o la administración de la memoria, realice la implementación de nuestra llamada al sistema de la siguiente manera.
int
sys_getmysize(void)
{
return proc->sz;
}
Ahora en el usys.S archivo, agregue la línea,
SYSCALL(getmysize)
A continuación, en el archivo user.h, añadir lo siguiente. Así es como su programa de usuario ve su llamada al sistema.
int getmysize(void);
Ok. Ahora está listo para ejecutar su programa de usuario y ver cómo se ejecuta su llamada al sistema.
Cuando ejecuta myprog.c que llama a su llamada al sistema, el tamaño del espacio de direcciones de este mismo programa se devolverá de acuerdo con lo que hemos implementado aquí.
¿Qué hay de defs.h? –
Usted es Reut, defs.h también es obligatorio. – itzhaki