//Met à mort l'état du processus actif, puis appelle ordonnance() void fin_processus() { cli();//Pour ne pas qu'une interruption empêche le changement d'état actif->state = MORT; sti(); ordonnance(); }
void proc1(void) { for (;;) { printf("[%s] pid = %i\n", mon_nom(), mon_pid()); for (int32_t i = 0; i < 100000000; i++); ordonnance(); } }
void dors(uint32_t nbr_secs) { cli();//Pour ne pas qu'une interruption empêche le changement d'état actif->state = ENDORMI; actif->ttw = time + (nbr_secs * clock_freq); sti(); ordonnance(); }
void tic_PIT() { horloge ++; while ((!queue_empty(&sleeping)) && horloge >= (queue_top(&sleeping, sleeping_t, chain))->clock) { sleeping_t *sleep = queue_out(&sleeping, sleeping_t, chain); process_tab[sleep->pid].state = WAITING; queue_add(&process_tab[sleep->pid], &process_queue, process_t, chain, prio); mem_free(sleep, sizeof(sleeping_t)); // ordonnance si prioritaire ? y penser. } if(cmpt==p){ cmpt=0; ordonnance(); } else cmpt++; // TODO table des processus en attente d'un t à parcourir }