Illustrations en Smalltalk
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
2/27 http://lsewww.epfl.ch/
q NB: Les références suivantes sont données à titre indicatif.
q Programmes et Objets Informatiques º C. Rapin, Polycopié EPFL, 1989
q Algorithms (2nd ed.)
º R. Sedgewick, Addison-Wesley, 1988
q Simulation par événements discrets º P.-J. Erard, P. Déguénon, PPUR, 1996
Références
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
3/27 http://lsewww.epfl.ch/
qDéfinition
º Une queue de priorité est un ensemble de données dans lequel il est possible d’insérer de nouveaux éléments.
º Les éléments d’une queue de priorité sont retirés de la queue selon un critère de priorité fixé à l’avance.
qRelation de priorité (notée→) 1. not (x→y and y→ x)
2. not (x→y or y→x) ⇒ (z→x⇔ z→y) 3. (x→y and y→z)⇒ x→z
qOpérations
º add: insère un nouvel élément dans la liste.
º first retourne l’élément de plus grande priorité.
º remo veFirst élimine de la queue son élément de plus grande priorité.
º isEmpty retourne vrai si la queue est vide.
Queues de priorité
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
4/27 http://lsewww.epfl.ch/
q Liste triée
º Possible mais, l’insertion d’un élément est O(n).
º Le retrait de l’élément prioritaire est O(1).
º Implémentation naïve à éviter!
q Arbre de priorité
º L’insertion d’un élément est O(log n).
º Le retrait de l’élément prioritaire est O(log n).
º Un arbre de priorité est un arbre binaire.
º La valeur stockée à chaque noeud est celle qui a la plus grande priorité.
º Les deux sous-arbres contiennent des valeurs de plus faible priorité que le noeud.
Implantation
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
5/27 http://lsewww.epfl.ch/
qExemple avec la relation x<y
Arbre de priorité (exemple)
0.9
º Dans un arbre de priorité, si on échange les deux sous-arbres d’un noeud quelconque, alors l’arbre résultant est encore un arbre de priorité.
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
6/27 http://lsewww.epfl.ch/
q Idée
º Basé sur le principe que la fusion de deux arbres prend un temps raisonnable.
q Ajouter un élément
º On fabrique un arbre de priorité avec un noeud dans lequel est stocké la nouvelle valeur.
º On fusionne les deux arbres.
q Retirer l’élément prioritaire
º On élimine le noeud à la racine de l’arbre, après en avoir récupéré la valeur.
º On fusionne les deux sous-arbres de ce noeud (droite et gauche) q Fusionner deux arbres
º Soient p et q les deux arbres que l’ont veut fusionner.
º Si q est vide, le résultat est p. Si p est vide, le résultat est q.
º On fait en sorte que p soit prioritaire par rapport à q. (On les échange au besoin) º On échange les deux sous-arbres de p. (Important sinon l’arbre dégénère en liste triée!) º On fusionne (récursivement) l’arbre q avec l’un des sous-arbres de p.
Arbre de priorité (principe)
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
7/27 http://lsewww.epfl.ch/
Arbre de priorité (structure)
qAttributs qHéritage
Block Tree left value right
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
8/27 http://lsewww.epfl.ch/
Collection subclass: #PriorityQueue instanceVariableNames: 'order tree' class methods
withRelation: aBlock
^(super new initialize) order: aBlock instance methods
order: aBlock order := aBlock.
first ^tree first testing
isEmpty ^tree first isNil
Queue de priorité
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
9/27
remo veFirst
|first|
first := tree first.
tree := tree remo veFirstUsing: order.
^first
remo ve: anObject ifAbsent: aBlock self shouldNotImplement
enumerating do: aBlock
tree do: aBlock
Queue de priorité (suite)
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
10/27 http://lsewww.epfl.ch/
Arbre de priorité
Tree
left value right
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
11/27 http://lsewww.epfl.ch/
Object subclass: #Tree
instanceVariableNames: '' instance methods
adding
add: anObject using: aBlock
^self merge: (Node with: anObject) using: aBlock accessing
first self subclassResponsibility enumerating
do: aBlock self subclassResponsibility removing
remo veFirstUsing: aBlock
self subclassResponsibility private
mer ge: aTree using: aBlock self subclassResponsibility
Arbre de priorité (Tree)
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
12/27 http://lsewww.epfl.ch/
Tree subclass: #Leaf
instanceVariableNames: '' instance methods
remo veFirstUsing: aBlock
^self private
mer ge: aTree using: aBlock
^aTree
Arbre de priorité (Leaf)
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
13/27 http://lsewww.epfl.ch/
Tree subclass: #Node
instanceVariableNames: 'left value right' instance methods
aBlock value: value.
left do: aBlock.
right do: aBlock.
removing
remo veFirstUsing: aBlock
^left merge: right using: aBlock
Arbre de priorité (Node)
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
14/27 http://lsewww.epfl.ch/
private
mer ge: aTree using: aBlock aTree first isNil
ifTrue:[^self].
(aBlock value: aTree first value: self first) ifTrue:[^aTree merge: self using: aBlock].
^PriorityNode with: value
left: (right merge: aTree using: aBlock) right: left
Arbre de priorité (PriorityNode)
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
15/27 http://lsewww.epfl.ch/
|queue|
queue := PriorityQueue withRelation:[:x :y|x < y].
queue addAll: #(34,13,19,5,17,22,13,18,3,17).
Exemple (queue de priorité)
3 remo veFirst
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
16/27 http://lsewww.epfl.ch/
q Objectif
º Simuler un système réel, au moyen d’un ordinateur.
º Le temps intervient explicitement, il s’agit de simuler l’évolution d’un système pendant une période donnée.
º Deux approches: simulation continue et simulation discrète.
q Simulation continue
º Le système évolue de manière continue au cours du temps; il est représenté au moyen d’une équation différentielle, d’une équation aux dérivées partielles ou d’un système.
º L’ordinateur intervient pour résoudre ces équations numériquement.
q Simulation discrète
º Le système ne change d’état qu’à des instants bien déterminés; t1, t2, t3, ..., tn. º Chaque changement d’état du système est déclanché par un événement.
º L’ordonnancement correct des événements est géré par un échéancier.
Simulation
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
17/27 http://lsewww.epfl.ch/
qSimulation continue
º Simulation de l’évolution de l’atmosphère terrestre pour effectuer des prévisions météo.
º À partir des propriétés des gaz composant l’atmosphère, son évolution est représentée au moyen d’équations aux dérivées partielles découlant des lois de la physique.
qSimulation discrète
º Simulation de guichets pour optimiser les files d’attente.
º Le système change d’état, p.ex., à chaque fois qu’un nouveau client se présente.
º Les clients arrivent aléatoirement selon une loi de probabilité donnée.
º Les événements sont par exemple: “nouveau client”, “début transaction”, “départ client”.
Simulation (exemples)
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
18/27 http://lsewww.epfl.ch/
q Temps virtuel
º Le système doit gérer le temps pour le système simulé. On parle de temps virtuel.
q Événements
º Un événement déclanche une action.
º Un événement est activé à un instant donné. (en temps virtuel)
q Échéancier
º L’échéancier gère l’ordonnancement des événements.
º Il gère aussi l’évolution du temps virtuel.
º Il est généralement construit autour d’une queue de priorité de notices d’événement.
Simulation discrète
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
19/27 http://lsewww.epfl.ch/
qAction future
º p.ex.,[charles embarquer]
º On peut la représenter sous la forme d’un bloc.
º Le bloc est évalué lors du déclanchement de l’événement.
qHeure de déclanchement º p.ex., 16:30
º L’action doit être déclanchée lorsque le temps virtuel est égal à l’heure de déclanchement.
Événements
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
20/27 http://lsewww.epfl.ch/
Object subclass: #Event
instanceVariableNames: 'time action' class methods
at: aTime do: aBlock
^(super new) time: aTime; action: aBlock; yourself instance methods
private
time: aTime time := aTime action: aBlock action := aBlock accessing
time ^time
evaluating
trigger action value comparing
precedes: anEvent
^(time < anEvent time)
Événements
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
21/27 http://lsewww.epfl.ch/
º L’échéancier gère le temps virtuel.
º L’échéancier est responsable de gérer correctement l’ordonnancement des événements.
º Les événements sont extraits de l’échéancier en fonction de l’heure de déclanchement de l’action correspondante.
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
22/27 http://lsewww.epfl.ch/
Object subclass: #Simulator
instanceVariableNames: 'queue clock' class methods
new
^(super new) initialize instance methods
initialize-release initialize
queue := PriorityQueue withRelation:[:x :y | x precedes: y].
clock := 0.
scheduling
at: aTime do: aBlock
queue add: (Event at: aTime do: aBlock).
w ait: aDuration thenDo: aBlock self at: clock + aDuration do: aBlock.
Échéancier
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
23/27
ifFalse:[self basicStep] run
[queue isEmpty]
w hileFalse:[self basicStep] private
basicStep
clock := queue first time.
(queue remo veFirst) trigger.
Échéancier (suite)
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
24/27 http://lsewww.epfl.ch/
q Événements º Ouverture de la poste º Fermeture de la poste º Nouveau client º Début transaction º Fin transaction
q Initialisation de la simulation º 8:00 Ouverture de la poste º 12:00 Fermeture de la poste
Exemple: simulation de guichets de poste
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
25/27 http://lsewww.epfl.ch/
qOuverture de la poste º Poste ouverte.
º Générer événement “nouveau client”.
qFermeture de la poste º Poste fermée.
qNouveau client
º Si la poste est fermée: ne rien faire.
º Générer événement “nouveau client”. (le client suivant) º Si queue alors faire la queue.
º Sinon, générer événement “début transaction”.
qDébut transaction
º Générer événement “fin transaction”.
qFin transaction
º Générer événement “début transaction”. (pour le client suivant)
Poste (événements)
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
26/27 http://lsewww.epfl.ch/
0 100 200 300 400 500 600 700 800 900 1000
q Chaque guichet a sa propre file d’attente º Modèle suisse, français, ...
q Quel est le temps moyen d’attente?
º temps minimum: 0 º temps moyen: 161.508 º temps maximum: 1048.93
Files d’attente distribuées
ÉCOLEPOLYTECHNIQUEFÉDÉRALE DELAUSANNE Laboratoire de Systèmes d’Exploitation - Xavier Défago - Jun 1999
27/27 http://lsewww.epfl.ch/
0 100 200 300 400 500 600 700 800 900 1000
qUne seule file d’attente pour tous les guichets º Modèle américain, anglais, japonais, ...
qQuel est le temps moyen d’attente?
º temps minimum: 0 º temps moyen: 149.837 º temps maximum: 398.2
File d’attente centralisée