ANNEXE : ETTuDE DE L'ouTiL DE A
siMuLATioN NS-2
SoMMAiRE
A.1 PREuvE Du TlgoREME TRuc
80
A. Annexe: Étude de l'outil de simulation
NS-2
A.1 Preuve Du
théorème truc
Ce théorème est un résultat
classique donné, par exemple, par. . .
ANNEXE : LEs scRipTs DE Nos
simuLATioNs
SommAiRE
B.1 LE scRipT TCL
(sysTèmE RépARTi) 82
B.2 LE ScRipT TCL AD
HOC 85
DANs cette annexe nous
présentons deux exmples parmi les scripts
réalisés.
|
B
|
B.1 LE script TCL
(systèmE réparti)
#
========================================================================= #
Definition des options # #
=========================================================================
set ns [new Simulator]
;# Creation d'un nouveau Objet simulateur
set bw akemac.dat ;# Le ficher
Trace
set nf [ open akemac.nam
w] ;# Ouverture du Visualisateur NAM
set f0 [ open $bw w] ;#
Declaration de f0 pour ecrire sur le fi c h ie r
$ns namtrace-all $nf ;# Afin de generer le fi c h ie r
Trace
set bw nbr_msg_tps.txt ;# ficher . t x t
qui contient les resultats
set mesure [ open $bw
w] ;# mesure pour ecrire sur le . t x t
set val(stop)
10 ;# Temps de simulation ( ( Durree ) )
#
========================================================================= # Le
Corps des Procedures #
#
=========================================================================
#
========================================================================= #
Procedure d' affichage concernant la simulation #
#
=========================================================================
proc Affichage { } {
global mesure nbr nbrk nbrequete ;#
Declaration de variables globales puts $mesure " "
puts $mesure " Les Resultats de la
Simulation . "
puts $mesure " " puts
$mesure "============ Informations de Simulation ==============="
puts $mesure " . " puts $mesure "Le Nombre de
Sites = $nbr "
puts $mesure "Le Nombre de Ressources K
= $nbrk "
puts $mesure "Le Nombre de Requetes =
$nbrequete "
puts $mesure " . "
puts $mesure
"=======================================================" puts
$mesure "================================="
puts $mesure " Resultats pour chaque
site : "
puts $mesure
"================================="
} ;# Ecriture dans le f i c hi e r des
resultats
#
========================================================================= #
Procedure de Terminaison de la simulation # #
=========================================================================
proc finish { } {
;# Declaration de variables globales global ns
nf f0 nbr nbrequete tpatt nmsg p mesure
for { set i 0} {$i <
$nbr} { incr i} { ;# compter le nombre de
message total set nmsg [ expr
[$p($i) set
nb_message_]+$nmsg]
} ;# la somme des messages de chaque noeud
puts $mesure
"=========================================================" puts
$mesure " Le NMM et le TAM . " puts $mesure
"=========================================================" puts
$mesure "Le nombre total des messages = $nmsg"
puts $mesure " "
puts $mesure "Le nombre de message moyen
=
$nmsg/$nbrequete = [ expr $nmsg/$nbrequete ] "
puts $mesure " "
set tpatt [ expr
$tpatt/$nbrequete] ;# Calcul du temps moyen d'
attente puts $mesure "Le temps d' attente moyen = $tpatt
"
$ns flush-trace ;# Pour Confirmer l '
ecriture
close $f0 ;# Fermer le f ic hi er . t x
t
puts " running nam... " ;# Affichage de "Running NAM ...
"
|
exec nam akemac.nam & ; ;# lancer le
NAM automatiquement
exit 0 ;# Sortie de la
procedure
}
#
========================================================================= #
Procedure d' enregistrement des temps d' attente dans le f ic hi er text # #
=========================================================================
proc record {p n mutex hour} {
global f0 nbrequete tpatt mesure ;#
Declaration des variables globales
set ns [Simulator
instance] ;# Instancier la commande NS
set bw0 [$ns now] ;#
bw0 est le temps actuelle
set bw0 [ expr $bw0-
[$p set dem ] ] ;# bw0
:= bw0 - Temps de la demande puts
$mesure "Temps d' attente pour le site N° [$n node-addr]
=
$bw0 ==> ( ( Date_Requete = $hour **
Duree SC = $mutex ) ) "
puts $mesure
"-------------------------------------------------------"
set tpatt [ expr
$tpatt+$bw0] ;# le temps d' attente
}
#
========================================================================= #
Procedure de Diffusion des demandes d' entrer en Section Critique # #
=========================================================================
proc diffusion {p n mutex hour} {
global nbr ;# Variables
globales
set ns [Simulator
instance] ;# Instancier la commande NS
set nowe [$ns now] ;#
Le temps actuelle NOWE
set nbrk [$p
set nbracine] ;# nbrk := nbracine ;
$ns at $nowe " tester $p $n $mutex $hour" ;# execution de
tester
$ns at $nowe "$p demander-sc" ;# execution de
demander-sc
$ns trace-annotate " [ $n node-addr] demande la SC
"
$ns at $nowe "$n color limegreen " ;# Colorer noeud
demandeur
}
#
========================================================================= #
Procedure de test d' entrer et la liberation de la Section Critique # #
=========================================================================
proc tester {p n mutex hour} {
global nbr mesure ;# Variables
globales
set ns [Simulator
instance] ;# definir commande ns
set time 0.01 ;# Temps de test pour
SC
set now [$ns now] ;#
Definir now
set a [$p set
sc] ;# Affectation a := sc ;
set b [$p set
racine] ;# b := racine ;
i f { $a == 1} { ;# Condition entrer en
SC
$ns at $now " record $p $n $mutex $hour" ;# Record pour
le TAM
$ns at $now "$n label \"<SC> \" "
;# l ib e le <SC> au noeud
$ns at [ expr
$now+$mutex] "$n label \" \" " ;# Effacer
<SC>
$ns at [ expr
$now+$mutex] "$p liberation-sc";# Appel de
liberation-sc
$ns at [ expr
$now+$mutex] "$p set sc -1" ;# sc :=
-1 pour so r ti r
i f { $b == -1} { ;# racine devient
rouge
$ns at [ expr
$now+$mutex] "$n color red" ;# Colorer la racine }
else { ;# Sinon
$ns at [ expr
$now+$mutex] "$n color black";# Colorer noeud en
noir
}
} else { ;# noeud veut entrer SC
$ns at [ expr
$now+$time] "$p attendre " ;# attendre MAJ sc <-
1
$ns at $now "$n color blue" ;# Colorer BLEU
$ns at [ expr
$now+$time] " tester $p $n $mutex $hour"
} ;# rappeler la procedure
} ;# TESTER ( ( Recursif ) )
#
========================================================================
#
========================================================================= # Le
programme Principale # #
========================================================================= #
========================================================================= #
========================================================================= #
Lecture des donnees a partir d'un f i c hi e r texte # #
=========================================================================
set f [ open " les_demandes.txt " " r "
] ;# lire ( les_demandes.txt )
set nbr [ gets $f] ;# (
( nbr ) ) <-- premier ligne
set nbrk [ gets $f] ;#
( ( nbrk ) )<-- deuxiemme ligne
set nbrequete [ gets
$f] ;# ( nbrequete )<-- troisiemme ligne
for { set j 0} {$j <
$nbrequete} { incr j} { ;# Boucle pour lire
les Scenarios for { set k 0} {$k <
2} { incr k} {
set table($j,$k) [
gets $f] ;# Remplir par ( s i t e , heur, duree )
}
}
close $f ;# Enfin Fermer le f i c h i e
r .
#
========================================================================= #
Declaration des couleurs selon les numeros # #
=========================================================================
)
$ns
|
color 0 blue
|
;#
|
Le
|
0
|
est
|
la
|
Couleur
|
Bleu ( (
|
Demande ) )
|
$ns
|
color 1 red
|
;#
|
Le
|
1
|
est
|
la
|
Couleur
|
Rouge (
|
( Requete ) )
|
$ns
|
color 2 limegreen
|
;#
|
Le
|
2
|
est
|
la
|
Couleur
|
Vert ( (
|
Liberation )
|
$ns
|
color 3 brown
|
;#
|
Le
|
3
|
est
|
la
|
Couleur
|
Marron
|
( ( Accord ) )
|
$ns
|
color 4 magenta
|
;#
|
Le
|
4
|
est
|
la
|
Couleur
|
Violet
|
( ( Aide ) )
|
$ns
|
color 5 black
|
;#
|
Le
|
4
|
est
|
la
|
Couleur
|
Noir ( (
|
Recherche ) )
|
#
========================================================================= #
Affichage des informations dans le f i c hi e r des resultats # #
=========================================================================
set now [$ns now] ;#
Definir now --> le temps actuelle
$ns at $now " Affichage " ;# Afficher les informations
dans . t x t
#
========================================================================= #
Creation des noeuds et leurs connections aux agents " Akema " # #
=========================================================================
for { set i 0} {$i <
$nbr} { incr i} { ;# i=0 a
i=nbr--1 --> creer ( nbr ) noeuds
set n($i) [$ns
node] ;# Creation d'un noeud
set p($i) [new
Agent/Akemac] ;# Creation d'un Agent
AKEMAC
$p($i) set nb_noeud_
$nbr ;# I n i t i a l i s e r ( nb_noeud_ ) par ( nbr )
$p($i) set nbracine
$nbrk ;# I n i t i a l i s e r ( nbracine ) par ( nbrk )
$ns at 0.0 "$p ( $i ) initial" ;# i n i t i a l i s e r
chaque agent AKEMAC
$ns attach-agent $n($i)
$p($i) ;# attacher les noeuds aux
agents
$p($i) set packetSize_
400 ;# La t a i l l e du paquet a envoyer
}
#
========================================================================= #
Creation des liens et la connection des agents # #
=========================================================================
for { set i 0} {$i <
$nbrk} { incr i} { ;# Boucle pour les
liens
$n($i) color " red " ;#
Colorer chaque noeud racine
$ns duplex-link $n($i) $n
( [ expr ($i+1)%$nbrk
] ) 1Mb 10ms DropTail $ns connect
$p($i) $p ( [ expr
($i+1)%$nbrk] ) ;# Creation
d'un lien
} ;# Connecter les agents entre eux
for { set i 0} {$i <
$nbrk} { incr i} { ;# Boucle pour les
liens
for { set j [ expr
($i+1) ] } {$j <
$nbrk} { incr j} {
$ns duplex-link $n($i)
$n($j) 1Mb 10ms DropTail ;#
Creation d'un lien
$ns connect $p($i)
$p($j) ;# Connecter les agents entre
eux
}
}
for { set i $nbrk} {$i
< $nbr} { incr i} { ;# Boucle pour
les liens
$ns duplex-link $n ( [ expr
($i)%$nbrk ] )
$n($i) 1Mb 10ms DropTail
$ns connect $p ( [ expr
($i)%$nbrk ] )
$p($i) ;# Creation d'un lien
} ;# Bi-directionnel Racine-Fils
#
========================================================================= #
Initialisation des variables globaux #
#
=========================================================================
set tpatt 0 ;# Initialisation de tpatt
pour calculer le temps d' attente
set nmsg 0 ;# Initialisation de nmsg
pour calculer le nombre de messages
set duree 1 ;# La durree de la Section
Critique
#
========================================================================= # L'
execution des scenarios de la simulation # #
========================================================================= for {
set j 0} {$j <
$nbrequete} { incr j} { ;# lire les Scenarios
du tableau
set site $table($j,0)
;# lire l ' identificateur du site
set heur $table($j,1)
;# lire l ' heur de la demande
$ns at $heur "$p ( $site ) set dem $heur " ;# affe cte r
la demande a l ' heur
$ns at $heur " diffusion $p ( $site ) $n ( $site ) $duree
$heur "
} ;# Appel de diffusion
#
========================================================================= #
Finalisation de la simulation et debut du RUN # #
=========================================================================
$ns at [ expr $val(stop) +
0.1] " finish" ;# Finir la Simulation apres (STOP)
puts " debut de la simulation ... " ;# Ecrire "debut de
la simulation.. "
$ns run ;# Debut de la Simulation NAM
|
le Script TCL (Système
réparti)
|