void opcao(node *PRONTOS,node *EXECUTANDO, node *BLOQUEADO,node *FINALIZADOS,int op){ node *tmp; switch(op){ case 0: libera(PRONTOS); break; case 1: libera(PRONTOS); inicia(PRONTOS); break; case 2: listaProcessos(PRONTOS,EXECUTANDO, BLOQUEADO, FINALIZADOS); break; case 3: insere(PRONTOS); break; case 9: Escalonador_Simples(PRONTOS,EXECUTANDO, BLOQUEADO,FINALIZADOS); break; case 4: tmp= retira(PRONTOS); if(tmp != NULL){ printf("Retirado: %3d\n\n", tmp->num); libera(tmp); } break; default: printf("Comando invalido\n\n"); } }
void comparaAmostras(User u,Proc** amostras,int texto,char*** lista){ int i,j,k,warn=0,lim=u->iterado; int tam=0; Proc p[u->nAmostras*u->nproc]; int value[u->nAmostras*u->nproc]; if(u->iterado>u->nAmostras)lim=u->nAmostras; tam=listaProcessos(lim,u->nproc,amostras,p,tam); avisos(tam,value,p,amostras,lim,u->nproc); avisar(tam,value,u->aviso,texto,lim,u->nproc,amostras,p,*lista); }
int Escalonador_Simples(node *PRONTOS, node *EXECUTANDO, node *BLOQUEADO, node *FINALIZADOS) { int i, j,k, finalizou; node *tmp; node *tmp2; node *novo ; while(qtprontos!=tam) { listaProcessos(PRONTOS,EXECUTANDO, BLOQUEADO, FINALIZADOS); tmp = PRONTOS->prox; while( tmp != NULL){ sleep(1); finalizou=0; tmp->cpu_feitos++; tmp->situacao=1; novo = transfereEntre(tmp, EXECUTANDO,PRONTOS); listaProcessos(PRONTOS,EXECUTANDO, BLOQUEADO, FINALIZADOS); sleep(2); if(novo->io_feitos==novo->io && novo->cpu_feitos==novo->cpu){ novo->situacao=3; novo = transfereEntre(novo, FINALIZADOS,EXECUTANDO); listaProcessos(PRONTOS,EXECUTANDO, BLOQUEADO, FINALIZADOS); sleep(2); qtprontos++; finalizou=1; } if(novo->io_feitos<novo->io && finalizou==0) { if(!vazia(BLOQUEADO)){ tmp2 = BLOQUEADO->prox; tmp2->situacao=0; transfereEntre(tmp2, PRONTOS,BLOQUEADO); listaProcessos(PRONTOS,EXECUTANDO, BLOQUEADO, FINALIZADOS); sleep(1); } novo->io_feitos++; novo->situacao=2; novo = transfereEntre(novo, BLOQUEADO,EXECUTANDO); listaProcessos(PRONTOS,EXECUTANDO, BLOQUEADO, FINALIZADOS); sleep(2); } else { novo->situacao=0; transfereEntre(novo, PRONTOS,EXECUTANDO); listaProcessos(PRONTOS,EXECUTANDO, BLOQUEADO, FINALIZADOS); sleep(2); } tmp = tmp->prox; } } return 0; }