Cet
essai consistait à formuler un code qui sera d’une part adapté à la
fonctionnalité du langage c#, et d’autre part pouvoir approcher notre problème
par un modèle représentant le mieux possible la réalité
Le code est
basé sur les deux structures suivantes :
ü Calendrier qui trace la succession des programmes depuis l’émission
jusqu’à la fin d’exécution.
ü Programme qui permet de compter le nombre des programmes émis.
Données à
saisir :
ix, iy, iz : germes de la fonction alea.
tmiep : temps minimum inter émission de programmes (défaut : 5s)
tmxiep : temps maximum inter
émission de programmes (défaut : 40s)
tm : taille mémoire (défaut : 1000 pages)
tmp : taille minimum d’un programme (défaut : 10)
tmxp : taille maximum d’un programme (défaut : 80)
dme : durée minimum d’exécution d’un programme (défaut : 13)
dmxe : durée maximum d’exécution d’un programme (défaut : 50)
dq : durée d’un quantum (défaut : 3 s)
ds ; durée d’un scénario (défaut : 12*3600)
Données à
calculer
Np : nombre de programmes exécutés dans le système (calculé à
l’aide d’un compteur d’entrée des programmes)
Tma : temps moyen d’attente pour le chargement en mémoire (calculé en
divisant la durée séparant le temps d’émission de chaque programme et le temps
de chargement du programme)
Tmr : temps moyen de résidence dans le système (calculé en
additionnant les durées séparant le temps d’émission de chaque programme à sa fin d’exécution et en divisant par le
nombre de programmes émis)
Tup : taux d’utilisation du processeur central (calculé en
comptabilisant toutes les durées d’inactivité du processeur, en le détectant à
chaque début de quantum, et en divisant leur total par ds et
prendre son complémentaire à 1)
Tum : taux d’utilisation de la mémoire (calculé en comptabilisant
le taux de remplissage à chaque top de quantum et en divisant par ds/3)
Variables
intermédiaires
H : temps courant
Prog[tp,tep,tcp,tfe] : tableau dynamique qui
trace chaque programme en enregistrant sa taille, sa date d’entrée, sa date de chargement
et sa date de fin d’exécution.
Ttp : taille totale des programmes en mémoire
FileC[num_prog] : file d’attente des programmes à charger en mémoire.
FileE[num_prog,
nb_quantum, reste] : file
d’attente des programmes à exécuter.
Calendrier[H,evenement,Programme
] : calendrier des événements à prévoir.
Evénements
1-
Emission_pg()
2-
Chargement_pg()
3-
Fin_execution()
4-
Top_quantum()
Emission_pg()
ü Calcul de la prochaine émission de programme tant que H<dsàcalendrier(,« émission »,)
ü Calcul de la taille du programme tp
ü Enregistrer sa taille tp, sa date d’entrée tep dans Prog[]
ü Incrémentation de Np
ü Vérification si le premier programme dans la file peut être chargé
en mémoire (tp<=(tm-Ttp) ), si oui àcalendrier(,« chargement »,) sinon Mettre le programme dans la file d’attente
Chargement_pg()
ü Vérification si le premier programme dans la file peut être chargé
en mémoire (tp<=(tm-Ttp) ), si oui charger en mémoire (enregistrer le temps
de chargement dans le tableau Prog , sinon passer au prochain dans la
file jusqu’à la fin de la file.
ü Enregistrer le temps d’exécution du programme.
ü Calcul progressif du temps moyen d’attente Tma.
ü Calculer sa durée d’exécution tex
ü Calcul du nombre de quantums nécessaires à l’exécution du programme
(Nq=tex/tq) ainsi que le reste (reste=Nq-tex/tq) et son enregistrement
ü Mettre le programme dans la file d’exécution FileE[].
Fin_execution()
ü Libération mémoire du programme. (Ttp=Ttp-tp)
ü Enregistrement du temps de fin d’exécution tfe.
ü Calcul progressif du temps moyen de résidence Tmr.
ü Appeler Chargement_pg()
Top_quantum()
ü Se positionner sur le programme suivant (en gérant une file
d’attente circulaire, chaque élément contient le N° du programme, son temps
d’exécution tex)
ü tex=tex-3
Si
tex>3--->calendrier(H+3, « top_quantum »,)
Sinon --à calendrier(H+tex, « fin_execution»,)
Algorithme :