Symulacja sieci z krazacym znacznikiem (token ring) --------------------------------------------------- Zestaw procesow polaczonych ze soba w pierscien symuluje siec z krazacym znacznikiem (ang. token ring). Pierwszy proces uruchamia sie z poziomu interpretatora polecen, podajac mu jako parametr wywolania liczbe procesow, ktore maja brac udzial w symulacji (dlugosc pierscienia). Proces ten tworzy po kolei odpowiednia liczbe procesow, laczac je za pomoca laczy w (zakniety) pierscien, on sam ma byc pierwszym elementem tego pierscienia. Procesy w pierscieniu numerujemy kolejno, jako pierwszy przyjmujac proces poczatkowy. Nastepnie proces ten rozpoczyna symulacje, przekazujac do pierscienia (wpisujac go do lacza) pakiet reprezentujacy znacznik. Pakiety przesylane w pierscieniu maja staly format, opisany nastepujaca struktura: struct pakiet { int czy_znacznik ; int numer_nadawcy ; int numer_odbiorcy ; } Znacznik jest reprezentowany przez pakiet majacy pole czy_znacznik rowne 1, a komunikat adresowany do ktoregos z odbiorcow - przez pakiet z polem czy_znacznik o wartosci 0, polu numer_nadawcy zawierajacym numer nadawcy i polu numer_odbiorcy zawierajacym numer odbiorcy. Symulacja przebiega nastepujaco. Kazdy proces w pierscieniu w losowych odstepach czasu decyduje sie wyslac komunikat do losowego odbiorcy. W tym celu ustawia sobie budzik na wybierany losowo, krotki okres czasu (np. rzedu kilku sekund). W procedurze obslugi sygnalu budzika sprawdza, czy ma juz komunikat do wyslania, jesli tak, to po prostu wraca z niej, jesli zas nie, to losuje numer odbiorcy w pierscieniu i zapamietuje, ze ma komunikat do wyslania. Procesowi wolno wyslac komunikat tylko wtedy, gdy dostanie znacznik (pakiet o polu czy_znacznik rownym 1). W pierscieniu przez caly czas krazy jeden pakiet, ktory reprezentuje znacznik lub zaadresowany komunikat. Proces odbierajacy pakiet zachowuje sie nastepujaco: - jesli pakiet reprezentuje znacznik i biezacy proces chce wyslac komunikat, to wpisuje do pakietu swoj numer, numer adresata, zmienia wartosc pola czy_znacznik i przekazuje pakiet nastepnemu procesowi - jesli pakiet reprezentuje znacznik, ale biezacy proces nie ma nic do wyslania, to przekazuje pakiet nastepnemu procesowi bez zmian - jesli pakiet reprezentuje zaadresowany komunikat, to proces porownuje numer odbiorcy z pakietu ze swoim numerem; jesli numer jest rowny, to wypisuje na ekran informacje o odebraniu pakietu, zawierajaca biezacy czas, numer nadawcy i numer odbiorcy, a nastepnemu procesowi posyla pakiet reprezentujacy znacznik; w przeciwnym przypadku (komunikat nie jest adresowany do biezacego procesu) przekazuje pakiet nastepnemu procesowi bez zmian Powodzenia, Grzes Grudzinski