next up previous
Next: Resumo e Conclusões Up: Imposição de Políticas de Previous: Servidor de Impressora: SJF

Escalonador SJF

 
void requestPrinter(int fileSize) {

lock(mutex);

while (busy) { enterQueue(Q, fileSize, mutex); }

busy = true;

unlock(mutex);

}

void releasePrinter(void) {

lock(mutex);

busy = false;

select(Q, mutex);

unlock(mutex);

}

void enterQueue(queue Q; int priority; key mutex) {

int s = freeSlot(Q);

Q.slots[s].free = false;

Q.slots[s].priority = priority;

Q.n++;

sleep(Q.slots[s].b, mutex);

Q.slots[s].free = true;

}

void select(queue Q; key mutex) {

if(Q.n > 0) {

int s = bestSlot(Q);

wakeup(Q.slots[s].b, mutex);

Q.n-;

}

}



Osvaldo Sergio F. de Carvalho
Wed Mar 19 14:56:39 EST 1997