Tentamen i Realtidsprogrammering Ordinarie Tentamen Datum: 2011-05-14 Tid: 08:15 11:15 Ansvarig lärare: Telefon: 301438 Hjälpmedel: Miniräknare Poäng: Tentamen omfattar 40 poäng fördelade på 5 uppgifter. 20 poäng krävs för betyget 3, 30 poäng för betyget 4 och 35 poäng för betyget 5. Övrigt: Använd ett nytt blad för varje uppgift, och lämna gärna lite plats i marginalen. Motivera alltid dina svar. Om du tycker att någonting är oklart, så gör själv nödvändiga antaganden. Redovisa alltid dessa antaganden. Lycka till! 1
Uppgift 1 (10 poäng) Svara med sant/falsk på följande påståenden, du behöver inte ge någon motivation till dina svar. Rätt svar ger +1 poäng, fel svar ger -1 poäng. Läs påståendena noggrant! Observera att det är tillåtet att inte svara på påståenden där du är osäker (ger +/- 0 poäng) och att du inte kan få mindre än 0 poäng totalt på hela uppgiften. 1. Realtidsspråk är programspråk som kan ge garantier för när program i språket uppfyller realtidskrav. 2. Realtidsspråk kräver ett realtids operativsystem för att köra program skrivet i språket. 3. Att två trådar/processer har en delad minnesrymd innebär att globala variabler med samma namn är åtkomliga från bägge processerna. 4. En mutex semafor skiljer sig ifrån en binär semafor då den bara får användas för att skydda kritiska regioner, men kan igengäld underlätta för schemaläggaren. 5. Generella semaforer kan få vilka positiva eller negativa värden som helst under en körning. 6. Felträdsanalys används är en metod för att hitta buggar främst i datastrukturer som länkade listor och (binära)-träd. 7. Färgade petrinät används för att ge detaljerade petrinätsmodeller, men är mer krävande att analysera. 8. Att använda moderna fler kärninga processorer är bra för majoriteten av inbyggda system eftersom de kan jobba snabbare än gamla processorer. 9. Dynamisk skapande av processer i takt med att det kommer in nya jobb är bra för realtidssystem eftersom vi då slipper ha onödigt många processer. 10.Om man har ett val av två olika algoritmer så skall man alltid välja den med lägst asymptotisk komplexitet, ex. O(n). 2
Uppgift 2 (6 poäng) Vad innebär dödlåsning och vilka är Coffmans fyra villkor för dödlåsning? Förklara varje villkor och beskriv för var och en av dem vilka metoder man kan använda för att undvika dom. Uppgift 3 (8 poäng) I styrdatorn till en avancerad svarv finns tre processer P1,P2 och P3 som ansvarar för att utföra olika arbeten med svarven samt en process P4 som tar emot indata ifrån operatören. Pga begränsat utrymme i svarven kan endast två av arbetsprocesserna (P1-P3) arbeta samtidigt. Indata processen läser periodiskt av kommandon ifrån operatören och skickar ett jobb till någon av de tre arbetsprocesserna mha. en meddelandekö. Observera att P1-P3 endast arbetar så länge det både finns jobb och ledigt utrymme för deras arbete. Visa hur detta kan implementeras i VxWorks med hjälp av semaforer och meddelande köer. Skriv en funktion init() som körs när programmet startar och en funktion för varje process som körs. Ni kan använda följande VxWorks funktioner: sem = semcgreate(sem_q_fifo, startvärde) semtake(sem,wait_forever) semgive(sem) q = msgqcreate(16,4,msg_q_fifo); msgqsend(q,msg,4,wait_forever,msg_pri_normal) msgqreceive(q,msg,4,wait_forever) Dessutom kan ni använda följande funktioner för att utföra arbetet i processerna resp. läsa nästa operatörs kommando. jobba(int i) int getnextjobb() Utför arbetet för process i Väntar pä nästa operatörs kommando och returnerar numret på nästa jobb som ska utföras (1 3). 3
Uppgift 4 (10 poäng) Tänk dig att du ska implementera tre asynkrona processer A,B och C som körs cykliskt. Process A och B kan köras parallellt och först när de bägge är färdiga med sitt första jobb kan process C köras. När process C är färdig med ett jobb kan process A och B börja om igen. a) Visa hur detta kan implementeras i VxWorks med hjälp av semaforer. Du kan använda funktionerna: semtake(sem, WAIT_FOREVER) semgive(sem) sem = semgcreate(sem_q_fifo, startvärde) b) Beskriv din lösning i ett Petri-nät. Använd olika platser/tecken för varje process. Visa genom att ge nåbarhetsgrafen för den att din lösning är korrekt. Tips: varje semafor blir en egen plats i petrinätet. c) Diskutera betydelsen av SEM_Q_FIFO i semgcreate anropet ovan. Vad har det för betydelse i ditt program och vad har det för betydelse för petrinätet? Förklara varför ditt petrinät är en bra modell av programmet med SEM_Q_FIFO eller förklara varför den inte är det (men i övrigt är korrekt) du får poäng för bägge alternativen! 4
Uppgift 5 (6 poäng) a) Vilka två varianter av petrinät med tid finns det och hur fungerar dem? Vad är skillnaden mellan dem? b) Rita tillståndsgrafen för petrinätet till höger med tid. c) Vilken avfyrningsfrekvens har petrinätet och vad innebär avfyrningsfrekvens? 5