This shows you the differences between two versions of the page.
sde2:teme:tema_fr_3_rust_2023 [2023/04/23 02:23] cristiana.andrei |
sde2:teme:tema_fr_3_rust_2023 [2023/04/23 12:01] (current) cristiana.andrei [Algorithmes de planification] |
||
---|---|---|---|
Line 10: | Line 10: | ||
<note important> | <note important> | ||
- | Date limite: ** Le 25 avril, 23h55 ** \\ | + | Date limite: ** Le 15 mai, 23h59 ** \\ |
Note: ** 2 points ** de la note \\ | Note: ** 2 points ** de la note \\ | ||
- | Téléchargement du devoir: [[https://classroom.github.com/a/m5-_C3XT| Github]] \\ | + | Lien: [[https://classroom.github.com/a/pT49MSxZ| Devoir 3]] \\ |
+ | Télécharger en retard: **1 point / jour** (maximum 4 jours) | ||
</note> | </note> | ||
Line 55: | Line 56: | ||
* ''list'' - retourner l'état des processus | * ''list'' - retourner l'état des processus | ||
Pour cela, vous pouvez créer des fichiers séparés pour chaque planificateur et exportez-le dans ''scheduler/src/schedulers/mod.rs''. | Pour cela, vous pouvez créer des fichiers séparés pour chaque planificateur et exportez-le dans ''scheduler/src/schedulers/mod.rs''. | ||
+ | |||
+ | <note important> | ||
+ | Vous devez implémenter le trait ''Scheduler'' pour les **3** algorithmes de planification et **rien d'autre**. Les autres informations présentées ci-dessous sont des détails de mise en œuvre du modèle existant, afin que vous compreniez mieux le fonctionnement du planificateur | ||
+ | </note> | ||
+ | |||
+ | ==== Temps d'exécution ==== | ||
+ | Dans un système réel, pour le contrôle d'exécution, le comptage du temps d'exécution d'un processus est effectué à chaque interruption d'horloge. | ||
+ | |||
+ | Pour faciliter la mise en œuvre, le modèle de thème simulera un système réel comme celui-ci : | ||
+ | * Le système simulé utilisera un temps virtuel (logique) indépendant du temps réel pour compter le temps de fonctionnement sur le processeur. | ||
+ | * Vous considérerez qu'une instruction dure une seule période d'horloge (unité de temps logique). | ||
+ | * Chacune des fonctions présentées ci-dessus représente une seule instruction exécutable par un processus à un instant donné. | ||
==== Crate scheduler ==== | ==== Crate scheduler ==== | ||
Line 95: | Line 108: | ||
* **NoRunningProcess** - L'appel système a été émis alors qu'aucun processus n'était planifié. | * **NoRunningProcess** - L'appel système a été émis alors qu'aucun processus n'était planifié. | ||
+ | ==== Processor library ==== | ||
+ | Cette bibliothèque est utilisée pour simuler le planificateur à partir de la crate **scheduler**. | ||
+ | |||
+ | === ProcessInfo struct === | ||
+ | Contient les informations suivantes sur un processus: | ||
+ | * Pid | ||
+ | * State | ||
+ | * Timings - temps total, temps d'appel système, running time | ||
+ | |||
+ | === Simulateur de processeur === | ||
+ | Le simulateur utilise les fonctions suivantes: | ||
+ | * **fork** - Envoie un appel système ''Syscall::Fork'' | ||
+ | * **exec** - Exécuter une unité de temps. | ||
+ | * **wait** - Envoie un appel système ''Syscall::Wait'' | ||
+ | * **signal** - Envoie un appel système ''Syscall::Signal'' | ||
+ | * **sleep** - Envoie un appel système ''Syscall::Sleep'' | ||
+ | * **exit** - Arrête le processus; le processus informe le système d'exploitation qu'il a terminé son exécution | ||
+ | <note important> | ||
+ | Le premier appel de fonction dans le planificateur doit être un **fork**, afin de créer le premier processus, sinon nous aurons une erreur. | ||
+ | </note> | ||
===== Algorithmes de planification ===== | ===== Algorithmes de planification ===== | ||
<note> | <note> | ||
Line 111: | Line 144: | ||
=== Round Robin avec des priorités === | === Round Robin avec des priorités === | ||
- | Cet algorithme est identique au précédent, avec la modification suivante: tous les processus commencent par la priorité 5. | + | Cet algorithme est identique au précédent, avec la modification suivante: la priorité initiale du processus est celle qu'il reçoit à la **fork**. Cette priorité **ne peut jamais** être surmontée. |
Chaque fois qu'un processus dépasse son temps, il est pénalisé de 1. À chaque fois le processus se termine avant de dépasser son quantum, il est récompensé par 1. | Chaque fois qu'un processus dépasse son temps, il est pénalisé de 1. À chaque fois le processus se termine avant de dépasser son quantum, il est récompensé par 1. | ||
Line 128: | Line 161: | ||
Apres chaque exécution d'un processus on va ajouter le numéro d'unités de traitement exécutées par le processus a ''virtualruntime'' (la valeur est en fait quantum_temps - process.quantum). | Apres chaque exécution d'un processus on va ajouter le numéro d'unités de traitement exécutées par le processus a ''virtualruntime'' (la valeur est en fait quantum_temps - process.quantum). | ||
</note> | </note> | ||
+ | |||
+ | ===== Documents d'aide ===== | ||
+ | * [[:sde2:cursuri:05]] | ||