// Mettre en attente un processus s'il doit attendre à la barrière private void attenteSiBarriere(Processus processus) { foreach (Barriere barriere in lstBarrieres) { if (barriere.getBarrierePassee() == false) { foreach (KeyValuePair <int, int> kvp in barriere.getBarriere()) { if (processus.getPID() == kvp.Key) { if (processus.getNbInstructionsExecutees() == kvp.Value) { processus.mettreEnAttenteBarriere(); processus.setEtat(Enums.etatProcessus.Pret); foreach (Thread thread in processus.getThreads()) { thread.setEtat(Enums.etatThread.Pret); updateInfoThread(processus); } } } } } } }
// Exécution d'un calcul private void executerCalcul(Instruction instruction, Thread thread, Processus processus) { processus.setEtat(Enums.etatProcessus.Actif); thread.setEtat(Enums.etatThread.Actif); instruction.Etat = Enums.etatInstruction.EnCours; decrementerTempsESBloque(); updateInfoThread(processus); updateCouleur(); sleep(); instruction.Etat = Enums.etatInstruction.Termine; updateCouleur(); }
// Exécution d'une E/S private List <Processus> executerES(Instruction instruction, Thread thread, Processus processus) { instruction.Etat = Enums.etatInstruction.EnCours; processus.setEtat(Enums.etatProcessus.Bloque); thread.setEtat(Enums.etatThread.Bloque); updateInfoThread(processus); updateCouleur(); decrementerTempsESBloque(); sleep(); if (executePCA == true) { return(OrderListProcessusPCA(lstProcessus)); } else { return(OrderListProcessusPP(lstProcessus)); } }