25.06.2014 Views

Núcleo de un Sistema Operativo

Núcleo de un Sistema Operativo

Núcleo de un Sistema Operativo

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!