2.3 MODIFICATION N°1
Pour mettre en place cette modification, on applique la
modification suivante :
Modification N°1 : Libérer la Section
Critique 1 Début
2
|
Demandeuri +-- Faux;
|
|
|
|
3
|
Si Suivanti =6 NIL
Alors /* S'il y a une demande
|
en
|
attente
|
*/
|
4
|
|
Envoyer Accord (Jeton) à
Suivanti;
|
|
|
|
5
|
|
Jetoni +-- Faux;
|
|
|
|
6
|
|
Suivanti +-- NIL;
|
|
|
|
7
|
Sinon
|
|
|
|
8
|
Envoyer Information (Jeton, i) à tous les voisins
immédiat;
|
|
|
|
9
|
Finsi
|
|
|
|
10 Fin
Une autre remarque
Si un site veut entrer en SC, il va automatiquement
envoyer sa requête vers son père, mais dans certains cas, ce
père peut être lui-même en SC, ou il a déjà
reçu plusieurs demandes, donc cette requête doit attendre la
satisfaction de toutes les requêtes de la file d'attente, une chose qui
est très pénalisante en terme de temps d'attente moyen, alors
qu'il peut exister des jetons libres au niveau des autres arbres, si on arrive
à utiliser l'un de ces jetons on pourra certainement minimiser le temps
d'attente.
Solution proposée
Initialement, et après chaque fin de la file
des requêtes, les sites qui détiennent les jetons informent leurs
voisins immédiats afin de former les k-arbres ou simplement informer le
plus de voisins immédiats qui n'appartiennent à aucun arbre,
cependant, il se peut qu'il y ait des sites qui reçoivent plusieurs
messages d'information de plusieurs sites différents, il vaut mieux donc
exploiter cette caractéristique, et ajouter les identifiants des
messages Information en plus dans une file des pères (secondaires), et
donc le site en question va avoir un père principale et une file des
pères secondaires auxquels il peut adresser sa requête dans le cas
où le père principale est en SC, ou dans le cas où il ne
détient plus le jeton.
Afin d'utiliser la file des pères, il faut que
le père principale informe ces voisins immédiats qu'il va entrer
en SC ou il va servir une requête, et donc les sites qui possèdent
une files des pères doivent mettre à jour leurs pères
principaux en mettant celui qui se trouve dans la tête de la file. Pour
informer les voisins immédiat, les pères vont utiliser un nouveau
message de type Rejet.
2.4 MODIFICATION N°2
Cette modification nécessite des changements au
niveau des procédures suivantes :
Modification N°2 : Demander la Section
Critique
1 Début
2
|
Demandeuri ?- Vrai;
|
|
|
3
|
Si Perei =6 NIL Alors
/* Si je possède
|
un père
|
*/
|
4
|
Envoyer Requête (Jeton, i) à
Perei;
|
|
|
5
|
Sinon
|
|
|
6
|
|
Si Perei = Ø Alors
/* Si je ne possède pas
|
de père
|
*/
|
7
|
|
Envoyer Requête (Jeton, i) à un voisin
immédiat;
|
|
|
8
|
|
Finsi
|
|
|
9
|
Finsi
|
|
|
10
|
Perei ?- NIL;
|
|
|
11
|
Attendre (Jeton = Vrai);
|
|
|
12
|
Envoyer Rejet (Jeton, i) à tous les voisins
immédiat;
|
|
|
13
|
< Entrer en Section Critique>
|
|
|
14 Fin
|
|
|
Modification N°2 : Réception de Information
(Jeton,j) 1 Début
2
|
Si Perei = Ø Alors
/* Si
|
je
|
ne possède pas
|
un père
|
*/
|
3
|
Perei ?- j;
|
|
|
|
|
4
|
Sinon
|
|
|
|
|
5
|
|
Si (j ?/ Les_peresi) & (Perei
=6 j) Alors
|
|
|
|
|
6
|
|
Les_peresi ?- Les_peresi
+ {j};
|
|
|
|
|
7
|
|
Finsi
|
|
|
|
|
8
|
Finsi
|
|
|
|
|
9 Fin
|
|
|
|
|
Modification N°2 : Réception de Requête
(Jeton, j)
1 Début
2
3
4
5
|
Si
|
Perei = NIL Alors
/* Si je suis un père */
Si Demandeuri = Vrai
Alors /* Si je suis déjà demandeur */
Suivanti ?- j;
Sinon /* Si je n'ai pas fait une demande */
|
6
|
|
|
Jetoni ?- Faux;
|
|
|
7
|
|
|
Envoyer Accord (Jeton) à j;
|
|
|
8
|
|
|
Envoyer Rejet (Jeton, i) à tous les voisins
immédiat;
|
|
|
9
|
|
Finsi
|
|
|
10
|
Sinon
|
|
|
11
|
|
Si Perei =6 Ø
Alors /* Si je possède
|
un père
|
*/
|
12
|
|
Envoyer Requête (Jeton, j) à
Perei;
|
|
|
13
|
|
Sinon /* Si je ne possède pas
|
un père
|
*/
|
14
|
|
Envoyer Requête (Jeton, j) à un voisin
immédiat;
|
|
|
15
|
|
Finsi
|
|
|
16
|
Finsi
|
|
|
17
|
Perei ?- j;
|
|
|
18 Fin
|
|
|
Modification N°2 : Réception de Rejet (Jeton,
j)
1 Début
Si Les_peresi =6 {}
Alors
Si Perei = j
Alors
Perei ?- la_tete_de_la_file_des_peres;
Supprimer la tête de la file des
pères;
Sinon
Si j ? Les_peresi Alors
Les_peresi ?- Les_peresi
- {j};
Finsi
Finsi
Finsi
2
3
4
5
6
7
8
9
10
11
12 Fin
|