Requisito previo: sistema operativo Xv6: agregue un programa de usuario
En la última publicación , supimos cómo agregar un programa de usuario en el sistema operativo Xv6. Ahora aquí verá cómo agregar una nueva llamada al sistema en el sistema operativo Xv6.
Agregar una nueva llamada al sistema a xv6:
una llamada al sistema es una forma en que los programas interactúan con el sistema operativo. Un programa de computadora hace una llamada al sistema cuando hace una solicitud al kernel del sistema operativo. Las llamadas al sistema se utilizan para servicios de hardware, para crear o ejecutar procesos y para comunicarse con los servicios del núcleo, incluida la programación de aplicaciones y procesos.
Descripción general:
va a implementar una llamada al sistema llamada getyear que siempre devolverá 1975 desde el kernel. Unix versión 6 fue lanzado en ese año. Para definir su propia llamada al sistema en xv6, debe realizar cambios en 5 archivos. Es decir, estos archivos son los siguientes.
Para definir su propia llamada al sistema en xv6, debe realizar cambios en 5 archivos. Es decir, estos archivos son los siguientes.
Cree una llamada al sistema para devolver el año en que se lanzó la versión 6 de Unix:
puede comenzar a trabajar desde el archivo syscall.h donde se asigna un número a cada llamada al sistema en este sistema Xv6. Como puede ver, hay 21 llamadas al sistema ya definidas en este archivo. Avancemos y agreguemos la siguiente línea al número de llamada del sistema de reserva para su propia llamada al sistema.
#define SYS_getyear 22
A continuación, debe agregar un puntero a la llamada del sistema en el archivo syscall.c. Este archivo contiene una array de punteros de función que utiliza números definidos anteriormente (índices) como punteros a las llamadas al sistema que se definen en una ubicación diferente. Para agregar su llamada de sistema personalizada, agregue la siguiente línea a este archivo.
[SYS_getyear] sys_getyear
¿Qué cambios suceden aquí?
Esto significa que, cuando se produjo una llamada al sistema con el número de llamada al sistema 22, se llamará a la función señalada por el puntero de función sys_getyear. Entonces, tienes que implementar esta función. Sin embargo, este archivo no es el lugar donde lo va a implementar. Simplemente colocará el prototipo de función aquí dentro de este archivo.
Por lo tanto, busque un lugar adecuado dentro de este archivo y agregue la siguiente línea. Puede ver que todas las demás funciones de llamada al sistema 21 se definen de manera similar.
El prototipo de función que debe agregarse al archivo syscall.c es el siguiente.
extern int sys_getyear(void)
A continuación, implementará la función de llamada al sistema. Para hacer esto, abra el archivo sysproc.c donde se definen las funciones de llamada al sistema.
//return the year of which //Unix version 6 was released int sys_getyear(void) { return 1975; }
Ahora solo tiene dos pequeños archivos para editar y estos archivos contendrán una interfaz para que su programa de usuario acceda a la llamada del sistema. Abra el archivo llamado usys.S y agregue la siguiente línea al final.
SYSCALL(getyear)
A continuación, abra el archivo llamado user.h y agregue la siguiente línea. Esta es la función que llamará el programa de usuario. Como sabe ahora, no existe tal función implementada en el sistema. En su lugar, la llamada a la siguiente función desde el programa del usuario simplemente se asignará al número de llamada del sistema 22, que se define como directiva de preprocesador SYS_getyear. El sistema sabe qué es exactamente esta llamada al sistema y cómo manejarla.
int getyear(void);
Si ha completado todo el procedimiento anterior, ha agregado con éxito una nueva llamada al sistema a xv6. Sin embargo, para probar la funcionalidad de esto, deberá agregar un programa de usuario que llame a esta llamada del sistema.
El programa de usuario podría ser el siguiente:
#include "types.h" #include "stat.h" #include "user.h" int main(void) { printf(1, "Note: Unix V6 was released in year %d\n", getyear()); exit(); }
Para agregar este programa de usuario a xv6, debe seguir los pasos anteriores para agregar el programa de usuario. Por último, ejecute el programa de usuario en la ventana qemu que se puede obtener ejecutando el comando make qemu en la terminal.
Después de ejecutar todo con éxito, accederá a la terminal.
Producción:
"Note:Unix V6 was released in year 1975"
Publicación traducida automáticamente
Artículo escrito por sambhav228 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA