示例#1
0
文件: processus.c 项目: medjo/PS-TP
void ordonnance(void)
{
    cli();//Pour ne pas qu'une interruption empêche le changement d'état
    int previous = actif->pid;

    //pour éviter une boucle infinie on ne testera qu'une fois chaque processus.
    int count = 0;
    if ( actif->state == ELU )
        actif->state = ACTIVABLE;
    actif = &proc_table[(actif->pid + 1) % NB_PROCESSES];
    
    //Regarde tous les processus jusq'à trouver le premier qui est soit ACTIVABLE soit ENDORMI mais dont l'heure de réveil est arrivée
    while ( (((actif->state == ENDORMI) && (actif->ttw > time)) || actif->state == MORT) && count < NB_PROCESSES)
    {
        actif = &proc_table[(actif->pid + 1) % NB_PROCESSES];
        count++;
    }
    actif->state = ELU;
    affiche_etats();
    sti();

    //Change le contexte d'execution : effectue le changement de processus actif
    ctx_sw(proc_table[previous % NB_PROCESSES].reg, proc_table[actif->pid % NB_PROCESSES].reg);

}
示例#2
0
文件: processus.c 项目: palup/PSE
void ordonnance()
{
    // ne pas oublier de changer l'état des processus
    int32_t pid_actif = mon_pid();
    int32_t pid_suivant = (pid_actif +1)%NB_PROCESS;
    actif->etat = ACTIVABLE;
    actif = &(tab[pid_suivant]);
    actif->etat = ELU;
    ctx_sw(tab[pid_actif].sauvegarde_registre,tab[pid_suivant].sauvegarde_registre);

}