Tema TTIT62 -Realtidsprocesser och reglering


Världsliga problem på Mars

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...


 Simin Nadjm-Tehrani

Last Modified: 14 January 2005