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;
}

Relacionados

  • Meio ambiente
    318445 palavras | 1274 páginas