Kommentarer till uppgift 1

Uppgift 1-4

Enkelt räknar man ut att det tar ca 2 minuter för ett tåg att passera tunneln, och att en signalist på den tiden hinner skicka ca 50 tecken.

Många resonerar nu så att signalisterna har gott om tid att fråga varandra hur många tåg som åkt ut eller varna för att ett extra tåg gått in i tunneln. Det är naturligtvis fortfarande mycket viktigt att ha ett vettigt protokoll för dessa meddelanden, speciellt i detta fall, eftersom man inte hinner skicka mer än två-tre stycken enligt förslag som "Varning: ett tåg till har åkt in! Hur många har åkt ut?". Vad ska mottagaren göra om detta meddelande börjar komma in samtidigt som det första tåget åker ut? Och vad ska sändaren göra om ytterligare ett tåg kommer förbi medan han sänder detta?

Uppgift 1-5

Här föreslår några att problemet enkelt löses genom att man låter semaforen normalt stå på rött, och att tågen måste be om lov att komma in i tunneln. Frågan är ju hur protokollet mellan signalisterna ska se ut för att olyckor helt ska kunna undvikas.

En intressant och riktigt iakttagelse är att det inte är så viktigt att ha en semafor om man ändå har flaggor: detta kan ses som att man väntar sig det oväntade (i detta fall att semaforen är trasig), och att semaforen kan ses som en optimering av en manuell signalering.

En intressant men mindre bra lösning är att låta meddelandet "train in tunnel" användas både för att signalera att ett tåg är på väg in i tunneln, och för att svara på frågan "is tunnel empty". Med lämpliga antaganden om hur signalisterna beter sig fungerar det förmodligen i detta fall, men generellt kan sådana lösningar ge upphov till s.k. race conditions som kan göra att meddelandet blir tvetydigt.

Viktiga ledtrådar i frågan är

Do not assume that the number of trains in the tunnel is always either zero or one
dvs det kan komma in fler än ett tåg i tunneln samtidigt. Originalprotokollet gjorde detta antagande.
and do not assume that trains always travel in one direction.
dvs tåg kan backa. Vi behöver därför hålla reda på vilket spår tågen åker in eller ut på, inte bara vilken tunnelände.

Denna uppgift visar sig mycket svår att lösa generellt, utan att göra vissa antaganden om verkligheten. Det främsta problemet är naturligtvis att det kan komma ett tåg från vardera hållet precis samtidigt: bägge signalisterna antar att tunneln är tom och släpper förbi tåget, efter att ha talat om för andra änden att ett tåg är på väg. Om även dessa meddelanden skickas samtidigt, och detta inte upptäcks, har man problem. Man måste alltså anta att protokollet upptäcker kollisioner (gärna på ett lägre skikt).

Ett annat problem är huruvida signalisterna tar emot alla meddelanden, eller om de kan tappas bort (t.ex. när signalisten letar efter en flagga eller uträttar naturbehov). Det blir onekligen enklare att lösa uppgiften om inga meddelanden tappas bort, men är det ett rimligt antagande?

Verktyg för protokollutveckling och analys

Med verktyget SPIN, som utveckats av Gerard Holzmann och som beskrivs i senare kapitel av hans bok, kan man beskriva protokollet i ett slags programmeringsspråk ("Promela") och

Den som är intresserad kan titta på min beskrivning i Promela av ett protokoll för detta exempel här, och exempel på tillståndsdiagram och tidssekvensdiagram.



© Björn Victor
Senast ändrad: Tue, 10-Sep-2002 11:37 MEST
[Valid HTML 4.01!]