CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[JAVA] Algorithmes de plannification

coquine_93
coquine_93
Niveau 7
10 mars 2018 à 00:14:09

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 :oui:

Merci d'avances pour les prochaines pistes que vous me proposerez :ok: je suis preneur !

Pseudo supprimé
Pseudo supprimé 10 mars 2018 à 00:21:11

Tu devrais créer une classe CompareProcess implémentant l'interface générique Compartor. Et tu créé ta priorityQueue en lui donnant en paramètre une instance de CompareProcess

Tuto pour Comparator : https://www.tutorialspoint.com/java/java_using_comparator.htm

Bunyan
Bunyan
Niveau 17
11 mars 2018 à 17:08:40

Fais en sorte que tes éléments triés implémentent l'interface Comparable puis utilises une collection implémentant SortedSet pour manipuler ta liste ?
Mais si tu peux insérer 2 fois le même objets (VRAIMENT le même objet), ça ne sera pas une bonne idée vu que c'est un Set (qui, par nature, sont sans doublon).
Tu peux vite avoir de gros soucis de performance, dépendant de la manière dont tu pars.

@pmlggtsjdknazxv : une PiorityQueue NE GARANTIT PAS son ordre d'itération. Elle est bien triée, mais son itérateur ne garantie pas de la parcourir dans le sens de tri.
CF commentaire de la première réponse : https://stackoverflow.com/questions/416266/sorted-collection-in-java

coquine_93
coquine_93
Niveau 7
11 mars 2018 à 18:19:34

Merci pour vos réponses !

J'ai une idée d'implémentation mais je ne suis pas sure de son fonctionnement :

--> j'ai créer une int que j'initialise à 0
cette int je vais l'utiliser pour verifier si les elements de la queue sont supérieurs au temps quantum
--> tant qu'il y a encore des elements ds ma queue prioritaire :
si le 1er element prends moins de temps que le temps quantum : je l'execute

sinon j'augmente mon int (initialisé auparavant) de 1 pour indiquer qu'il y a 1 element de plus ds la liste qui est supérieur à ce temps quantum . Ensuite je compare le nombre d'élément qu'il y a dans la queue prioritaire à l'int que j'ai initialisé (là où je compare les elements si tous les elements de la liste sont supérieur au temps quantum) et si c'est le cas j'augmente le time quantum (disons de 1.25) pour que les prochains elements plus grands puissent être exécutés !

À la fin je rappelle la méthode pour continuer de traiter les elements de la queue :)

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment