Bonsoir la foule,
Voici un petit probl=E8me int=E9r=E9ssant, pas de l'=E9lectronique mais bon pour les m=E9ninges : j'ai sur un bus un r=E9seau de cartes que je voudrais num=E9roter automatiquement. (je vais tenter une description en mode t=E9l=E9graphique)
Soit un bus avec un maitre et N esclaves. Les =E9changes se font via un protocole (genre JBUS) qui inclut le num=E9ro d'esclave [ 1...N ] auquel le maitre s'adresse, et on r=E9serve le num=E9ro z=E9ro pour s'adresser =E0 tous. Ni le maitre ni aucun esclave n'envoient de trame sur le bus si celui-ci est d=E9ja occupp=E9. (chaque esclave recoit toutes les trames, mais ne prend en compte que celle qui lui est adress=E9e par son propre num=E9ro, et dans ce cas il r=E9pond au maitre. Seule la trame de num=E9ro z=E9ro sera prise en compte par tous les esclaves, et dans ce cas aucun ne r=E9pond - sinon il y a collision)
Ceci =E9tant pos=E9, voici ce qu'il faut r=E9soudre : Sachant qu'=E0 la toute premi=E8re mise sous tension, aucun esclave n'a de num=E9ro, comment le maitre peut-il attribuer =E0 chacun un num=E9ro unique dans [ 1...N ] ?
--------
J'ai pens=E9 =E0 cet algo : le maitre envoie =E0 tous les esclaves une trame signifiant =AB voici un num=E9ro, qui en veut ? =BB Chaque esclave n'ayant pas encore de num=E9ro r=E9pond =AB moi je veux bien =BB, le maitre renvoie un acknowledge signifiant : =AB ok, alors garde-le =BB puis passe au suivant. L'astuce consiste =E0 ce que chaque esclave, avant de r=E9pondre, attende pendant une dur=E9e al=E9atoire comprise entre 0 et N-1, (ou que chaque esclave ne r=E9ponde qu'avec une probabilit=E9 1/N) afin d'=E9viter les collisions avec une probabilit=E9 non nulle.
Deux cas possibles :
1=B0) Plus d'un esclave r=E9pond en m=EAme temps : il y a collision, la trame est perdue, le num=E9ro courant n'est pas attribu=E9, et le maitre r=E9it=E8re.2=B0) Un esclave r=E9pond avant tous les autres : les autres esclaves voyant passer sa trame se taieront, le maitre recevra sa r=E9ponse et lui reverra l'acknowledge, le num=E9ro sera attribu=E9, le maitre passe =E0 l'attribution suivante.
M=EAme si l'attribution d=E9pend du d=E9lai al=E9atoire (ou de la proba en 1/N) n=E9c=E9ssaire =E0 l'anti-collision, pour une vitesse de bus assez =E9lev=E9e et un nombre d'esclaves pas trop grand, apr=E8s un temps fini 'T' on atteindra TOUJOURS la limite o=F9 chaque esclave pr=E9sent sur le bus aura un num=E9ro unique attribu=E9.
Premi=E8re question : vaut-il mieux que les esclaves :
- Attendent pendant une dur=E9e al=E9atoire comprise entre 0 et N-1.
- Ne r=E9pondent qu'avec une probabilit=E9 1/N.
Seconde question : y a-t'il une faille dans cet algo, qui ferait que ca ne fonctionne pas du tout, ou est-ce que ca tient bien la route ?