Introducción al Minikernel 2 Diseño de Sistemas Operativos
Contenido Esquema global de funcionamiento Estructura de datos Mutex
Llamadas al sistema (llamsis.h) Esquema global Procesos de usuario Llamadas al sistema (llamsis.h) Minikernel Llamadas HAL (HAL.h) HAL S.O Linux Hardware
Estructura de datos: procesos typedef struct BCP_t *BCPptr; typedef struct BCP_t { int id; /* ident. del proceso */ int estado; /* TERMINADO|LISTO|EJECUCION|BLOQUEADO*/ contexto_t contexto_regs; /* copia de regs. de UCP */ void * pila; /* dir. inicial de la pila */ BCPptr siguiente; /* puntero a otro BCP */ void *info_mem; /* descriptor del mapa de memoria */ } BCP; finalizar Ejecución Terminado Cambio de contexto dormir despertar Listo Bloqueado
Estructura de datos: procesos /* Definicion del tipo que corresponde con la cabecera de una lista * de BCPs. Este tipo se puede usar para diversas listas (procesos * listos, procesos bloqueados, etc.). */ typedef struct{ BCP *primero; BCP *ultimo; } lista_BCPs; /* Variable global que identifica el proceso actual */ BCP * p_proc_actual=NULL; /* Variable global que representa la tabla de procesos */ BCP tabla_procs[MAX_PROC]; /* Variable global que representa la cola de procesos listos */ lista_BCPs lista_listos= {NULL, NULL};
Llamadas al sistema Minikernel /* Definición del tipo que corresponde con una entrada en la tabla de llamadas al sistema. */ typedef struct{ int (*fservicio)(); } servicio; /* Prototipos de las rutinas que realizan cada llamada al sistema */ int sis_crear_proceso(); int sis_terminar_proceso(); int sis_escribir(); /* Variable global que contiene las rutinas que realizan cada llamada */ servicio tabla_servicios[NSERVICIOS]={ {sis_crear_proceso}, {sis_terminar_proceso}, {sis_escribir}};
Mutex