Bonjour,
Je suis entrain de travailler sur un projet de système d'exploitation. L'objectif étant d'implémenter des algorithmes de planification (d'ordonnancement de processes) en java. J'ai 4 algo à implémenter, j'en ai déjà fais 2.
Le premier que j'aimerai implémenter est une queue multi niveaux avec Round Robin.
On m'a conseiller d'utiliser une queue prioritaire où les priorités correspondent aux niveaux (les plus petits nb correspondent à la plus grande priorité). Je dois en plus prendre compte : un processe est rétrograder si il utilise toute sa tranche de temps. Le planificateur est préemptif.
--> j'ai pour l'instant implémenter une queue prioritaire où j'ajoute mes elements processes.
Mais j'aimerai la trier en ordre croissant (plus grande priorité au debut).
Je peux accéder à une méthode qui me retourne un int :
public int compareTo(Process other) {
return new Integer(priority).compareTo(new Integer(other.getPriority()));
}
Pour le moment vu que je ne sais pas comment la trier, je me suis dit que vu qu'on a un int en retour pourquoi pas faire un test sur ce int :
if (process.compareTo(readyPriorityQueue.element()) < 0) {
//ajoute à la fin car priorité faible
}
else if (process.compareTo(readyPriorityQueue.element()) == 0) {
//même priorité
}
else if (process.compareTo(readyPriorityQueue.element()) > 0) {
//priorité plus haute
}
Cependant je ne suis pas sure de cette méthode et si elle était fiable je ne sais pas comment ajouter au début de la queue prioritaire. Donc je ne suis pas sure de ce bout de code au dessus (qui trierait donc). Je n'arrive pas à penser à une autre implémentation (du moins je pense que la méthode compareTo() de au dessus me parait utile).
Ensuite je pense que enlever un element de cette queue prioritaire pour l'exécuter est un jeu d'enfant !
--> mon deuxième algorithme s'occupe des jobs les plus court utilisant la moyenne exponentielle. Je peut lire initialBurstEstimate et alphaBurstEstimate depuis les paramètres et là j'utiliserai une méthode qui nous est fourni pour les récupérer.
Pour chaque processe, je peux utiliser la moyenne exponentielle pour estimer sa prochaine durée de burst (qui définira la priorité du processe) depuis sa précédente durée de burst. Ici une méthode nous est fourni pouvant récupérer le burst recent (durée du cpu burst le plus recent d'un processe). Et là le planificateur est non préemptif.
Sur celui ci je bloque pas mal
Merci d'avances pour les prochaines pistes que vous me proposerez
je suis preneur !