Núcleo de un Sistema Operativo
Núcleo de un Sistema Operativo
Núcleo de un Sistema Operativo
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
RUTINAS PARA MANEJO DE COLAS<br />
struct item {<br />
struct item *siguiente;<br />
struct item *anterior;<br />
int prioridad;<br />
};<br />
struct cola {<br />
struct item *primero;<br />
struct item *ultimo;<br />
};<br />
void inicializar_cola (struct cola *cola);<br />
int vacia (struct cola *cola);<br />
struct item *primero (struct cola *cola);<br />
/* Elimina y <strong>de</strong>vuelve el primer elemento <strong>de</strong> cola */<br />
struct item *extraer (struct cola *cola, int prio);<br />
/* Elimina y <strong>de</strong>vuelve el primero <strong>de</strong> los <strong>de</strong> prioridad prio */<br />
struct item *extirpar (struct cola *cola, struct item *elem);<br />
/* Elimina y <strong>de</strong>vuelve el elemento ap<strong>un</strong>tado por elem */<br />
void encolar (struct cola *cola, struct item *elem);<br />
/* Encola elem al final <strong>de</strong> cola */<br />
void insertar(struct cola *cola, struct item *elem, int prio);<br />
/* Encola elem al final <strong>de</strong> los <strong>de</strong> prioridad prio */<br />
void meter(struct cola *cola, struct item *elem, int estado);<br />
/* Inserta elem actualizando estado en el PCB */<br />
RUTINAS AUXILIARES DIVERSAS<br />
Figura 4. Rutinas auxiliares para manejo <strong>de</strong> colas<br />
void copiar (char *str1 , char *str2 , int lon);<br />
int comparar (char *str1, char *str2 , int lon);<br />
int buscar (char *str, char car, int lon);<br />
void rellenar (char *str, char car, int lon);<br />
void mayuscula (char *str, int lon);<br />
void minuscula (char *str, int lon);<br />
int long_a_ascii (long num, char *str, int base, int lon);<br />
int int_a_ascii (int num, char *str, int base, int lon);<br />
long ascii_a_long (char *str, int lon, int base);<br />
int ascii_a_ int (char *str, int lon, int base);<br />
Figura 5. Otras rutinas auxiliares<br />
3.3 Rutinas para la gestión <strong>de</strong> procesos<br />
La gestión <strong>de</strong> procesos está soportada por rutinas que manejan colas y proporcionan cambios<br />
<strong>de</strong> estado en los procesos: bloquear(), scheduler(), dispatcher. Otras rutinas inicializan<br />
estructuras <strong>de</strong> datos (PCB y pila) para los procesos en su creación. Estas rutinas se muestran<br />
en la Figura 6 y se estudiarán más a<strong>de</strong>lante.<br />
RUTINAS PARA LA GESTION DE PROCESOS<br />
void bloquear (struct cola *cola, int estado);<br />
struct item *scheduler();<br />
void dispatcher (struct item este_item)<br />
void crear_pcb(void (*codigo)(), int *pila, int prio, int q, int id_proc));<br />
void crear ();<br />
Figura 6. Rutinas para la gestión <strong>de</strong> procesos<br />
UPV/EHU ATC Laboratorio <strong>de</strong> <strong>Sistema</strong>s <strong>Operativo</strong>s 6