OSP Devices FCFS
563 palavras
3 páginas
/***************************************************************************** *Seque abaixo uma implementacao do algoritimo FCFS * para o Modulo Device do OSP*******************************************************************************/
/****************************************************************************/
/* */
/* */
/* Module DEVICES */
/* Internal Routines */
/* */
/* */
/****************************************************************************/
///FUNCOES
#include
#include
typedef struct _fila Fila;
struct _fila{ IORB *inicio; IORB *fim;
};
#define TRATAR_ERRO
#undef TRATAR_ERRO
#ifdef TRATAR_ERRO void err(const char * func, const char *causa, int id)
{
printf("\nERRO: [%s] \"%s\"\n", func, causa); exit(id);
}
#endif
#define N_INICIO inicio->next
#define N_FIM fim->prev
#define INICIO_FILA fila->inicio
#define FIM_FILA fila->fim
Fila * Fila_New()
//Inicializa uma estrutura de FIFO com nos de cabecalho
{
Fila *fila = (Fila *) malloc(sizeof(Fila)); INICIO_FILA = (IORB *) malloc(sizeof(IORB)); FIM_FILA = (IORB *) malloc(sizeof(IORB));
#ifdef TRATAR_ERRO if(fila == NULL) err("Fila_New", "malloc return NULL", 12); if(INICIO_FILA == NULL) err("Fila_New", "malloc return NULL", 12); if(FIM_FILA == NULL) err("Fila_New", "malloc return NULL", 12); #endif
INICIO_FILA->prev = NULL; FIM_FILA->next = NULL;
fila->N_INICIO = FIM_FILA; fila->N_FIM = INICIO_FILA;
return fila;
}
void inQueue(Fila *fila, IORB *iorb)
//Adiciona o IORB numa FIFO
{
#ifdef TRATAR_ERRO if(fila == NULL) err("inQueue", "fila == NULL", 13); if(iorb == NULL) err("inQueue", "iorb == NULL", 13);
#endif
iorb->next = FIM_FILA; iorb->prev = fila->N_FIM;
fila->N_FIM->next = iorb; fila->N_FIM = iorb;
}