La tolérance aux pannes des algorithmes de partage de ressources dans les systèmes répartis et les réseaux Ad Hoc (simulation par ns-2)( Télécharger le fichier original )par Sami et Abdelmadjid Oubbati et Benarfa Université Amar Telidji Laghouat - Ingénieur d'état en informatique 2010 |
B.2 LE SCRIPT TCL AD HOC
$ns_ use-newtrace ;# nouveau f ic h i er trace set topo [new Topography] ;# Nouvelle Topologie # ========================================================================= # Creation des f i c hi e rs trace pour NS et NAM # # ========================================================================= set tracefd [ open adhoc.tr w] set namtrace [ open adhoc.nam w] set bw nbr_msg_tps.txt ;# Ficher . t x t ( resultat simulation ) set mesure [ open $bw w] $ns_ trace-all $tracefd $ns_ namtrace-all-wireless $namtrace $val(x) $val(y) # ========================================================================= # Procedure d' affichage concernant la simulation # # ========================================================================= proc Affichage { } { global mesure nbr nbrk nbrequete ;# Declaration des variables globales puts $mesure " " puts $mesure " Les Resultats de la Simulation ( K--Exclusion Adhoc ) . " 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 "=================================" } #========================================================================== # Procedure de Terminaison de la simulation # # ========================================================================= proc finish { } { global ns_ nf f0 nbr nbrequete tpatt nmsg p mesure ;# Variables globales for { set i 0} {$i < $nbr} { incr i} { set nmsg [ expr [$p($i) set nb_message_]+$nmsg] ;# Somme des messages puts $mesure "================================= " puts $mesure " Le NMM et le TAM. } " puts $mesure "======================================================" puts $mesure " Messages total = $nmsg" ;# Calcul du nombre moyen puts $mesure " " puts $mesure "Le NMM = $nmsg/$nbrequete = [ expr $nmsg/$nbrequete ] " puts $mesure " " set tpatt [ expr $tpatt/$nbrequete] ;# Calcul du TAM puts $mesure "Le TAM = $tpatt " ;# Affichage du TAM $ns_ flush-trace ;# Ecriture dans le f ic h i er TEXT close $mesure ;# Fermer le f ic hi er des resultat puts " running nam... " ;# Affichage de "Running NAM . . . " exec nam adhoc.nam & ;# lancer le NAM automatiquement exit 0 ;# Sortie de la procedure } #========================================================================== # ============================ global f0 nbrequete tpatt mesure ;# 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 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 " colorLm $p $n" ;# 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 " colorRd $p $n" ;# Colorer le noeud en SC $ns_ at $now "$n label \"<SC> \" " ;# l ib el e <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 orange $ns_ at [ expr $now+$mutex] " colorOr $p $n" ;# Colorer la racine } else { ;# Sinon $ns_ at [ expr $now+$mutex] " colorBk $p $n" ;# Colorer noeud en noir } } else { ;# noeud veut entrer SC $ns_ at [ expr $now+$time] "$p attendre " ;# attendre MAJ sc <- 1 $ns_ at [ expr $now+$time] " tester $p $n $mutex $hour" } } # ========================================================================= # ========================================================================= # 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 O est la Couleur Bleu ( tous messages) # ========================================================================= # Definition de la topologie # # ========================================================================= $topo load_flatgrid $val(x) $val(y) # ========================================================================= # Creation du God ( voisinage ) # # ========================================================================= set god_ [create-god $nbr] #
========================================================================= $ns_ node-config -adhocRouting $val(adhocRouting) \ -llType $val(ll) \ -macType $val(mac) \ -ifqType $val(ifq) \ -ifqLen $val(ifqlen) \ -antType $val(ant) \ -propType $val(prop) \ -phyType $val(netif) \ -channelType $val(chan) \ -topoInstance $topo \ -agentTrace ON \ -routerTrace ON \ -macTrace OFF # ========================================================================= # Creation des noeuds # # ========================================================================= for { set i 0} {$i < $nbr} { incr i} { ;# i=0 a i=nbr--1 --> creer ( nbr ) noeuds set node_($i) [$ns_ node] ;# Creation d'un noeud $node_($i) random-motion 0 ;# desactiver mouvement aleatoire $node_($i) color Black ;# Colorer chaque noeud en noir $god_ new_node $node_($i) ;# chaque god associe au noeud set p($i) [new Agent/Kradhoc] ;# Creation d'un Agent KRAD HOC $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 KRAD HOC $ns_ attach-agent $node_($i) $p($i) ;# attacher les noeuds aux agents $p($i) set packetSize_ 1024 ;# La t a i l l e du paquet a envoyer } # # La connexion des agents pour permettre la communication # # ========================================================================= for { set i 0} {$i < $nbr} { incr i} { for { set j [ expr $i+1]} {$j < $nbr} { incr j} { $ns_ connect $p($i) $p($j) ;# Connecter les agents entre eux } } # ========================================================================= # Coloration des noeuds a chaque couleur associe # # ========================================================================= proc colorRd {p node_ } { set ns_ [Simulator instance] set nowe [$ns_ now] $ns_ at $nowe "$node_ color red" ;# Coloration avec le rouge <SC> } proc colorBl {p node_ } { set ns_ [Simulator instance] set nowe [$ns_ now] $ns_ at $nowe "$node_ color blue" ;# Coloration avec le Bleu } proc colorBk {p node_ } { set ns_ [Simulator instance] set nowe [$ns_ now] $ns_ at $nowe "$node_ color black" ;# Coloration avec le noir <Dehors> } proc colorLm {p node_ } { set ns_ [Simulator instance] set nowe [$ns_ now] $ns_ at $nowe "$node_ color limegreen " ;# Coloration avec le vert <Demande> } proc colorOr {p node_ } { set ns_ [Simulator instance] set nowe [$ns_ now] $ns_ at $nowe "$node_ color Orange" ;# Coloration avec l ' orange<racine > } # ========================================================================= # Coloration des racines # # ========================================================================= for { set i 0} {$i < $nbrk} { incr i} { ;# Boucle de coloration $ns_ at 0.0 " colorOr $p ( $i ) $node_ ( $i ) " ;# Colorer racines avec l ' orange } ;# des le debut de la simulation # ========================================================================= # Appel des f i c hi e rs de mouvement # # ========================================================================= i f { $val(sc) == " " } { puts " *** NOTE: no connection pattern specified. " set val(sc) "none" } else { puts " Loading connection pattern..." source $val(sc) } #
========================================================================= set nmsg1 0 ;# Initialisation de nmsg1 set nmsg 0 ;# Initialisation de nmsg set tpatt 0 ;# Initialisation de tpatt #
=========================================================================
le Script TCL (AD HOC) |
|