LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen EDA698 Realtidssystem (Helsingborg) 2014 10 28, 14.00 19.00 Det är tillåtet att använda Java snabbreferens och miniräknare, samt ordbok. Det går bra att använda både engelska och svenska uttryck för svaren. Den här tentamen består av två delar: teori, frågor 1-6 (18 poäng), och programmering & design, fråga 7 och 8 (12 poäng). För godkänd (betyg 3) krävs sammanlagt ca hälften av alla 30 möjliga poäng samt att det krävs ca en tredjedel av poängen i varje del för sig. 1. a) Vad menas med jämlöpande processer, och vad krävs för att ett program med sådana skall anses vara korrekt? (1p) b) Vad menas med en kritisk region? Illustrera med ett exempel. (1p) c) Vad innebär begreppet kapplöpning? Förklara med ett kort exempel. (1p) d) Vad innebär live-lock? Förklara med ett exempel. (1p) 2. a) Vad är prioritetsinversion? Illustrera med ett exempel. (1p) b) Vad är ett prioritetsärvningsprotokoll och hur kan det användas för att undvika prioritetsinversion? (1p) 3. I ett realtidssystem finns tre stycken trådar, T1, T2 och T3. Deras run-metoder innehåller nedanstående kodsekvenser. S1, S2, S3, S4 och S5 är alla mutex-semaforer. T1.run() T2.run() T3.run() S5.take(); uses5(); S5.give(); S5.take(); uses2s5(); uses5(); S5.give(); S1.take(); uses1s2(); S1.give(); S4.take(); uses4(); S5.take(); S1.take(); uses1s4s5(); S1.give(); S5.give(); S4.give(); S3.take(); uses2s3(); S3.give(); S1.take(); uses1(); S1.give(); S3.take(); uses2s3(); S4.take(); uses2s3s4(); S4.give(); S3.give(); a) Rita en resursallokeringsgraf för systemet. (2p) b) Finns det risk för dödläge i systemet? Motivera ditt svar. (1p)
2(6) 4. Betrakta ett system bestående av tre oberoende periodiskt exekverande trådar med nedanstående karaktäristika (C = värstafallsexekveringstid, D = deadline, T = period). Tråd C (ms) D (ms) T (ms) A 2 6 10 B 9 25 25 C 3 7 7 a) Vad blir de maximala svarstiderna för de tre olika trådarna om man tillämpar Rate Monotonic Scheduling (RMS)? (2p) b) Är systemet schemaläggningsbart, dvs klarar systemet alltid av alla sina deadlines? Motivera ditt svar! (1p) Tips: R i = C i + Ri T C j j j hp(i) 5. Ett realtidssystem (med dynamisk prioritetsbaserad schemaläggning och prioritetsarv) innehåller tre trådar (T1, T2 och T3) som kommunicerar med varandra genom att anropa monitoroperationerna a, b, c, d, e och f i monitorerna M1, M2 och M3 och med maximala exekveringstider (i millisekunder) enligt figur. Trådarna anropar en monitoroperation i taget. T1 har högst prioritet och T3 har lägst prioritet. Ange för varje tråd (T1, T2 och T3) hur lång tid tråden i värsta fall kan bli blockerad av lägre prioriterade trådar under en och samma körning. Motivera ditt svar. (2p) 6. a) Nämn två fördelar med statisk schemaläggning jämfört med dynamisk schemaläggning. (2p) b) Nämn två nackdelar med statisk schemaläggning jämfört med dynamisk schemaläggning.(2p)
3(6) TRAFIKLJUS MED KAMERA 7. Idag är det vanligt att använda sig av fartkameror för att övervaka och reglera bilhastighet på vägar. I kombination med datainsamling av fortkörningshändelser kan detta leda till oönskade effekter både vad gäller personlig integritet och juridisk hantering: Individers förehavanden kan kartläggas genom systemet (och på vägen) utan att de är medvetna om detta. Det har förekommit att lagligt körande bilförare har bötfällts pga tekniska fel i sensorerna. Då upprepade bötfällningar hanteras som brott i många länder kan felaktiga sensorer, dvs tekniska fel, leda till att rättssystemet urholkas. Situationen är speciellt svår i vissa länder, såsom Storbritannien, där man övervakar inte bara momentan hastighet vid fartkamerorna, utan också genomsnittlig hastighet mellan kameror. Men det finns länder som har utvecklat alternativ. I Portugal tillämpas straffande trafikljus vid infarter till byar. Detta är trafikljus integrerade med hastighetsmätare, ofta utan koppling till korsning eller övergångsställe. Trafikljuset slår om till rött när uppmätt hastighet ligger över den tillåtna. Fortköraren måste stanna för rödljuset och blir dessutom utpekad som orsaken till stoppet för bakomvarande bilister, ett inte obefintligt socialt tryck. Idén kan vidareutvecklas genom att även övervaka stopplinjen vid trafikljuset. Då kan man registrera förare som kör mot rött ljus, eller håller så pass hög hastighet att man inte lyckas stanna i tid, till exempel vid halt väglag. En stor fördel är att sensorosäkerhet inte leder till rättsosäkerhet. En bild av bilens registreringsplåt och trafikljus tagen av en kamera kan enkelt verifieras till skillnad från hastighetsmätningar, vilka är betydligt svårare att verifiera i efterhand. Straffet för fortkörningen tillämpas omedelbar (man förlorar tid) eller leder i värre fall till bötfällning för körning mot rött ljus. Trafikverket har bestämt sig för att utveckla och testa en prototyp. Du har blivit ombedd att implementera en del av systemet (monitorn), övriga delar är redan klara. Uppgift Du ska utveckla delar av styrsystemet till ett straffande trafikljus med passageövervakning. Gränssnitten till hårdvaran för att styra trafikljuset, detektera hastighet och passering, samt ta bilder (för att kunna rapportera överträdelser) är redan givna och beskrivna nedan. Hårdvarugränssnitt (givna) Gränssnitt mot trafikljuset. Innehåller en metod som ställer ut rött, gult, eller grönt ljus. Reagerar omedelbart och är icke-blockerande. class Signal { * Uppdatera trafikljussignalen. static synchronized void show(boolean red, boolean yellow, boolean green) { /*... Gränssnitt mot sensorsystemet. Två sensorsystem används: ett fartmätningssystem som är placerat en bit från trafikljuset och används via metoderna awaitspeed och freespeed; ett passagesystem som registrerar fordon som passerar trafikljusets stopplinje och används via metoderna awaitpassage och freepassage. class Detection { * Blockerar tills fordon detekteras. * @return hastighet hos detekterat fordon.
4(6) synchronized float awaitspeed() { /*... * Stang av hastighetskontroll. synchronized void freespeed() { /*... * Blockerar tills ett fordon har passerat trafikljuset eller tills freepassage anropas. * @return sant om ett fordon passerat, annars falskt. synchronized boolean awaitpassage() { /*... * Avsluta passagekontroll for fordon (anvands nar det inte langre ar rodljus) synchronized void freepassage() { /*... Gränssnitt mot kamera. Innehåller en metod som tar bild av en passerande bil och trafikljuset. Kameran är positionerad så att den tar bild av enbart den passerande bilen och inga andra bilar. public class Camera { public static void snapshot() {... Trådar och tillstånd (givna, ändringar får göras) Hastighetsmätaren (tråden SpeedObtainer) ansvarar för att registrera en inkommande bils hastighet i monitorn, se nedan. public class SpeedObtainer extends Thread { Detection sensing; Monitor mon; public SpeedObtainer(Detection sensing, Monitor mon) { this.sensing = sensing; this.mon = mon; public void run() { while (!isinterrupted()) { mon.registerspeed(sensing.awaitspeed()); Trafikljusstyrningen (tråden LightController) ansvarar för att ändra ljusets färg enligt sekvensen grönt-gult-rött-grönt (GYRG). Den är också ansvarig för att starta GYRG-sekvensen vid uppmätning av en för hög hastighet, och även starta upp passagemätning för att registrera en eventuell överträdelse (körning mot rött) och bildtagning. public class LightController extends Thread { Monitor mon; public LightController(Monitor mon) {this.mon = mon; public void run() { while (!isinterrupted()) {mon.color(); Straffrapporteraren (PenaltyReporter) ansvarar för att samla underlag för rapport i fall där det blev en överträdelse (körning mot rött), inkl bilden som då ska ha tagits. (Själva rapporteringen ingår inte i uppgiften.)
5(6) public class PenaltyReporter extends Thread { Monitor mon; Detection trigger; public PenaltyReporter(Monitor mon, Detection trigger) { this.mon = mon; this.trigger=trigger; public void run() { while (!isinterrupted()) { mon.awaitred(); if (trigger.awaitpassage()) { System.out.println("You are busted!"); Camera.snapshot(); else { System.out.println("Have a nice day!"); En uppräkningstyp listar de olika trafiksituationer som motsvarar monitorns (se nedan) tillstånd. enum STATE { EMPTY, TRAFFIC, SPEEDING, RED // Ingen trafik, dvs inga fordon har detekterats pa ett tag // Fordon med laglig hastighet passerar // Fordon som overtratt gallande hastighet har detekterats // Stoppa trafik efter SPEEDING, via gult ljus Monitor (att implementera) public class Monitor { Attribut, kan anvandas eller andras... private STATE state = STATE.EMPTY; // Trafik-tillstand private float maxspeed, overspeed; // [m/s] = [km/h]/3.6 private Detection trigger; // Hastighets- och passagedetektor private long recentlyany; // Tidpunkt da senaste fordon detekterats private long recentlyfast; private char c = ; Konstruktor public Monitor(float limit, Detection trigger) { maxspeed = limit; this.trigger = trigger; * Anropas da ett fordon narmar sig trafikljuset. * @param spd ar den uppmatta hastigheten hos fordonet. synchronized void registerspeed(float spd) {/*... // Tidpunkt for senaste hastighetsovertradelse // Trafikljus-tillstand // R = rott, Y = gult (yellow), G = gront * Anropas for att uppdatera trafikljus- och trafik-tillstand synchronized char color() {/*... * Blockera tills trafikljuset visar rott, dvs tills det finns en * hastighetsovertradelse.
6(6) synchronized void awaitred() {/*... a) Implementera metoden awaitred i monitorklassen. Metoden ska blockera tills trafikljuset blir rött. (2p) b) Implementera metoden registerspeed i monitorklassen. Metoden ska uppdatera trafik-tillstånd till antingen TRAFFIC eller SPEEDING och andra relevanta tillståndsattribut i monitorn (recentlyx). (3p) c) Implementera metoden color i monitorklassen. Metoden är ansvarig för att styra GYRG-sekvensen i trafikljuset. När det är grönt ljus ska en sådan sekvens startas ifall en överträdesle av hastighetsbegränsningen registrerats (SPEEDING). Gult ljus ska då visas under en tidsperiod (2 sekunder), varpå ljuset ändras till rött. Rött ljus ska visas i 15 sekunder. Registreras ytterligare en forkörning räknas tiden för rött ljus upp med 15 sekunder utifrån tiden då fortkörningen registrerades. (4p) Tips: Metoden wait(long t) ger möjlighet att vänta tills t ms har gått eller att den anropande tråden väckts på annat sätt. OBS: visa dina eventuella ändringar i existerande klasser TYDLIGT. Visa också tydligt eventuellt tillagda tillstånd (attribut) i monitorklassen. Ändringar och tillägg ska skrivas som kod med motiverande kommentar till varför tillägget gjorts. ALTERNATIV DESIGN AV STRAFFANDE TRAFIKLJUS 8. Ersätt den givna lösningen där trådarna delar information via en monitor med en lösning med meddelande-baserad kommunikation för synkronisering och utbyte av information. Hur skulle den struktureras? Svara med en figur som visar de involverade trådarna, meddelande-buffertarna och hur de kommunicerar. Motivera din ritade figur. (3p) A Kort, specifik Java-referens med eventuellt lämpliga metoder Tidshantering, trådhantering, väntelägen, etc klass Math och klass System: public static double Math.random(): ger ett slump-värde mellan 0 och 1. public static long System.currentTimeMillis(): aktuell systemtid i millisekunder klass Thread: public static void sleep( long t): försätta en tråd i viloläge under t ms public static void yield(): dra tråden tillbaka och sätt i kön för ny schemaläggning public void join(): vänta att tråden dör public void start(): starta upp tråden public void run(): trådens arbete klass Object: public final void wait(): försätta en tråd i vänteläge public final void wait( long t): försätta en tråd i vänteläge under max t ms. Kan dock väckas i förtid! public final void notify(): meddela nästa tråden i vänte-kön att ett tillstånd har ändrats public final void notifyall(): meddela alla trådar i vänteläge att ett tillstånd har ändrats