Farkosten
"Pathfinder" landade på Mars den 4:e juli 1997. En händelse
som av
media betraktades som en stor succé. En spektakulär
landning med den ovanliga tekniken:
hoppandes skyddad av en massa krockkuddar. Snart började
farkosten skicka
stora mängder data tillbaka till jorden, bilder som fick stor
uppmärksamhet i
världsmedia. Men under de första två veckorna efter
landningen, när Pathfinder
hade börjat samla meteorologiska data, så började
systemet att uppträda
märkligt. Gång på gång fick farkosten
"total system reset"
vilket resulterade i att mängder av data gick förlorat. Media
rapporterade
problemet med knapphändiga uppgifter såsom "mjukvarufel"
eller "att
systemet försökt göra för mycket på samma
gång".
Några månader senare, vid den
årliga forskningskonferensen om realtidssystem, beskrev David
Wilner, chefen
för tekniskt utveckling på företaget Wind River Systems
hur det egentligen stod
till. Företaget marknadsför VxWorks: Realtidskärnan som
användes på Mars
Pathfinder.
VxWorks använder preemptiv
schemaläggning av trådar. Processer på farkosten
exekveras som trådar med fasta
prioriteter som tilldelats bl a med avseende på processernas
periodicitet. Pathfinder
använder en "informationsbuss" som ett medium för att skicka
data mellan olika delar av farkosten. En busshanteringstråd
körs ofta med
hög prioritet för att föra information till och
från bussen. Tillgången till
bussen synkroniseras med lås som garanterar ömsesidig
uteslutning (mutex). En
kommunikationstråd med en prioritet på mellannivå
körs också på farkosten.
Den meteorologiska
datasamlingsprocessen kördes som en lågfrekvent
lågprioritetstråd och använde
bussen för att publicera sin data. Den skulle skaffa låset,
skriva på bussen,
och frigöra låset därefter. Om busshanteraren
blev schemalagd medan låset
var upptaget av meteorologiska tråden så skulle den inte
kunna hämta data från
bussen utan bli blockerad tills den meteorologiska processen
blivit klar
och släppt låset.
I de flesta fall fungerade detta
förfarande bra. Men ibland var det möjligt för den
mellanprioriterade
kommunikationstråden att bli schemalagd medan den
högprioriterade
busshanteraren satt blockerad väntandes på den
lågprioriterade meteorologiska
processen. I dessa fall blev meteorologiska tråden avbruten, den
långa
kommunikationsberäkningen utfördes, och under hela den tiden
var den
högprioriterade busshanteringstråden stoppad. Efter en viss
tid blev en
"watchdog" aktiverad. Den skulle märka att busshanteraren inte
kört
på länge, anta att något var drastiskt fel och
aktivera en "total system
reset".
Efter många timmars testande på
JPL-laboratoriet i kalifornien återskapade man samma scenario
på jorden. Man
insåg då vari felet låg. Lösningen till
sådana problem inom
schemaläggningsteorin är kända sedan början av
90-talet. Hur skulle det
implementeras då i praktiken? VxWorks mutex-objekt har en boolsk
parameter som
anger huruvida prioritetsärvning skall tillämpas på
objektet. Den givna mutexen
hade varit initialiserad med parametern satt till "off". Det tog inte
lång tid förran man insåg hur de
världsberömda återstarterna skulle kunna ha
undvikits...
Last Modified: 14 January 2005