Bienvenue dans le blog de PAGAL CHEF

LES ALGORITMES D'ORDONNACEMENT

ROUND-ROBIN

 

Dans ce document nous allons effectuer l’algorithme de Round-Robin dans trois (3) situations différentes :

- Round-Robin, premier arrivé le premier servi

- Round-Robin priorité

- Round-Robin priorité avec traitement du phénomène de famine

 

Pour effectuer ces algorithmes nous aurons besoins :

- d’une liste de processus en attente d’exécution

- des fonctions et des procédures qu’on ne détaillera pas

-des variables

 

La liste

La liste se présentera sous forme de tableau dans lequel on trouvera le nom du processus, son temps d’exécution en milliseconde (ms) et de sa priorité.

 

Nom du processus

Temps d’exécution (ms)

Priorité

processus1

10

3

processus2

1

1

processus3

2

3

processus4

1

4

processus5

5

2


 Les processus à forte priorité sont les processus qui ont les plus petits chiffres. Comme toute liste, elle utilise des observateurs, des transformateurs et des prédicats.

Prédicat : on utilisera le prédicat liste_vide(L) qui nous informe si la liste est vide où L est une 

                liste

Observateur : premier_élément(L) qui nous donne le premier élément de la liste où L est une    

                      liste

Transformateur : - ordonner_par_arrivé (L) qui ordonne la liste par ordre d’arrivée

                            - ordonner_par_priorité (L) qui ordonne la liste par priorité i.e. de la

                               priorité la plus haute à la priorité la plus basse. Dans cet algorithme, si

                               deux ou plusieurs processus ont la même priorité, on les classe par ordre

                               d’arrivée.

                            - mettre_en_fin_liste (L, P) qui met un processus en fin de liste   

Dans cette liste chaque processus sera relié à son temps d’exécution et à sa priorité.

 

Fonctions et procédures

1-      charger_sur_processeur (P) qui charge un processus P sur le processeur

2-      enregistrer_paramètre (P) qui enregistre les paramètres d’un processus arrêté.

3-      charger_paramètre (P) qui charge les paramètres d’un processus qui a été mis en attente ou d’un nouveau paramètre.

4-      exécuter (P) qui exécute un processus

5-      arrêter_exécution (P) qui arrête le processus P en cours d’exécution

6-      augmenter_priorité_processus(L) qui augmente la priorité des processus présentent dans la liste.

7-      supprimer (L, P) qui supprime un processus de la liste des processus.

 

Les variables

temps_exécution : Temps /* elle nous informe sur le temps que ce processus a besoin pour

                                              terminer son exécution sans être interrompue */

temps_utilisé : Temps /* elle nous donne le temps utilisé par le processus */

liste_processus : Liste /* elle nous donne la liste des processus en attente */

processus : Processus

nombre_quantum : Entier /* elle nous renseigne sur le nombre de quantum déjà utilisé */

Nous aurons aussi besoin d’une constante quantum : Temps qui nous donne le temps alloué à chaque processus par le système pour s’exécuter.

 

Algorithme Round-Robin : premier arrivée, premier servi

 

Début

 

         Tant que liste_vide (liste_processus) == NON faire

 

                  liste_processus := ordonner_par_arrivée (liste_processus) ;

                  processus := premier_élément (liste_processus) ;

                  charger_sur_processeur (processus) ;

                  charger_paramètre (processus) ;

                  temps_utilisé := 0 ;

 

                   Répéter

 

                               exécuter (processus) ;

                               processus.temps_exécution := processus.temps_exécution – 1 ;

                               temps_utilisé := temps_utilisé + 1

      

                  jusqu’à processus.temps_exécution == 0 ou temps_utilisé == quantum

 

                  arrêter_exécution (processus) ;

                 

                  Si processus.temps_exécution != 0 alors

 

                               enregistrer_paramètre (processus) ;

                               metter_en_fin_liste (liste_processus, processus) ;

   

                 sinon

 

                               supprimer (liste_processus, processus) ;

 

                 fin si              

 

          fin tant que

 

Fin

                                                

Algorithme Round-Robin avec priorité

 

C’est le même algorithme que celui de Round-Robin premier arrivé premier servi, avec la différence qu’au lieu d’ordonner par arrivée, on va ordonner par priorité.

 

Début

 

         Tant que liste_vide (liste_processus) == NON faire

 

                  liste_processus := ordonner_par_priorité (liste_processus) ;

                  processus := premier_élément (liste_processus) ;

                  charger_sur_processeur (processus) ;

                  charger_paramètre (processus) ;

                  temps_utilisé := 0 ;

 

                   Répéter

 

                               exécuter (processus) ;

                               processus.temps_exécution := processus.temps_exécution – 1 ;

                               temps_utilisé := temps_utilisé + 1

      

                  jusqu’à processus.temps_exécution == 0 ou temps_utilisé == quantum

 

                  arrêter_exécution (processus) ;

                 

                  Si processus.temps_exécution != 0 alors

 

                               enregistrer_paramètre (processus) ;

                               metter_en_fin_liste (liste_processus, processus) ;

   

                 sinon

 

                               supprimer (liste_processus, processus) ;

 

                 fin si              

 

          fin tant que

 

Fin

 

Algorithme Round-Robin priorité avec traitement du phénomène de famine

 

Pour résoudre le phénomène de famine, nous allons augmenter la priorité des processus en attente après deux quantums de temps. Les processus de faible priorité vont leur priorité d’un pas et les processus dont la priorité est maximale resteront inchangés i.e. leur priorité ne changera pas.

 

Début

 

       nombre_quantum := 0 ;

 

       Tant que liste_vide (liste_processus) == NON  faire

 

                  liste_processus := ordonner_par_arrivée (liste_processus) ;

                  processus := premier_élément (liste_processus) ;

                  charger_sur_processeur (processus) ;

                  charger_paramètre (processus) ;

                  temps_utilisé := 0 ;

 

                   Répéter

 

                               exécuter (processus) ;

                               processus.temps_exécution := processus.temps_exécution – 1 ;

                               temps_utilisé := temps_utilisé + 1

      

                  jusqu’à processus.temps_exécution == 0 ou temps_utilisé == quantum

 

                  arrêter_exécution (processus) ;

                  nombre_quantum := nombre_quantum + 1 ;

 

                  Si nombre_quantum == 2 alors

 

                              augmenter_priorité_processus (liste_processus) ;

                              nombre_quantum := 0 ;

 

                  fin si

                 

                  Si processus.temps_exécution != 0 alors

 

                               enregistrer_paramètre (processus) ;

                               metter_en_fin_liste (liste_processus, processus) ;

   

                 sinon

 

                               supprimer (liste_processus, processus) ;

 

                 fin si              

 

          fin tant que

  

Fin

 



23/02/2012
0 Poster un commentaire

A découvrir aussi


Inscrivez-vous au blog

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 6 autres membres