Tentamen i Realtidsprogrammering Ordinarie tentamen Datum: 2006-10-20 Tid: 08:00 13:00 Ansvarig lärare: Telefon: 1438 (kontor) Hjälpmedel: Miniräknare Poäng: Tentamen omfattar 40 poäng fördelade på 7 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
2
Uppgift 1 (4 poäng) Förklara följande begrepp och vad som krävs för att kunna implementera dem. a) Ej föregripande schemaläggning (non-preemtive scheduling) b) Föregripande schemaläggning (preemptive scheduling) c) Tidsdelning (round-robin) Beskriv även nackdelarna respektive fördelarna med tidsdelning. Uppgift 2 (4 poäng) Förklara följande begrepp och vad finns det för problem/begränsningar med dem. a) Semaforer b) Monitorer c) Meddelandeköer d) Remote-Procedure-Call (RPC) Uppgift 3 (8 poäng) Antag att vi har ett system som innehåller de tre processerna P1, P2 och P3 som utför ett jobb periodiskt och gör en utskrift på skärmen när de är klara. P1 och P2 körs var 10'e millisekund och P3 körs var 8'e millisekund. Alla processerna tar 1 millisekund för varje jobb. Utskrifterna på skärmen tar 1ms och kan inte göras av två processer samtidigt utan att bli fel. Visa hur det här systemet kan implementeras på ett säkert sätt. Ni kan använda funktionerna nedan: void jobba(int i); // Utför jobbet för process i void print(int i); // Gör utskriften för i void sleepto(double time); // Sover ända till den givna tidpunkten. void taskcreate(int prio,fn funktion,... args...) // Skapar en ny process MSG_Q createq(); // Skapar en meddelandekö SEM createsem(); // Skapar en semafor void send(msg_q,void *msg,int len); // Skickar ett meddelande void receive(msg_q,void *buf,int len); // Läser ett meddelande void take(sem S); // Tar en semafor void give(sem S); // Ger en semafor a) Visa hur uppgiften ovan kan lösas genom att använda en separat process för att hantera alla utskrifter. Beskriv samtliga funktioner som behövs, inklusive en funktion för att starta systemet och alla processerna. b) Visa hur den här uppgiften kan lösas genom att istället implementera en monitor. Beskriv samtliga funktioner som behövs, inklusive en funktion för att starta systemet och alla processerna. 3
4
Uppgift 4 (6 poäng) Följande kod beskriver ett enkelt system som antingen läser eller tar emot ett antal kommandon från en operatör och skriver dom i en kö eller läser meddelanden ifrån kön och arbetar med dom. for(;;) { if(kommando_färdigt()) { kommando = nästa_kommando(); skriv(kö, kommando); } else { kommando = läs(kö); jobba(kommando); } } För att avgöra om systemet kommer att fungera som förväntat har petrinätet till höger skapats som en modell av den. I det här exemplet antar vi att vi startar med ett tecken i kön. a) Konstruera nåbarhetsgrafen för petrinätet. b) Vad innebär begreppet levande och är petrinätet levande? c) Vad innebär (global) rättvisa och är petrinätet rättvist? d) Vad innebär det att ett petrinät är begränsat? Är nätet ovan begränsat? 5
6
Uppgift 5 (6 poäng) I en industri finns en styrdator som kommunicerar över ett nätverk och kontrollerar ett antal maskiner. På den här datorn finns tre kontrollprocesser P1, P2 och P3 som samsas om tre kritiska resurser, minne, bandbredd och strömförbrukning, då de styr maskinerna. Ursprungligen har datorn 8MB minne, 6 kbit/s bandbredd och tillgång till 100mA ström. En bit in i körningen av datorn ser situationen ut som i den övre tabellen till höger. Available visar hur många resurser som just nu finns lediga, Allocation hur många resurser som just nu finns tilldelade varje process och Need hur mycket mer resurser som processerna kan behöva innan de blir färdiga. Available Minne Bandbredd Ström 4 4 50 Allocation Minne Bandbredd Ström P1 1 1 10 P2 1 0 40 P3 2 1 0 Need Minne Bandbredd Ström P1 4 2 0 P2 2 6 10 P3 5 0 50 a) Vid det här tillfället begär process P3 att få starta upp en till maskin som drar 10mA ström och förbrukar 2kbit/s i bandbredd. Kan detta beviljas utan att systemet går i dödlåsning? b) Antag att P2 istället begär att få allokera 10mA ström ifrån det här läget. Kan detta beviljas utan risk för dödlåsning? c) Antag att vi endast är intresserade av att detektera dödlåsning och att processerna begär resurserna enligt den nedre tabellen till höger. Är systemet i dödlåsning just nu? Available: samma som ovan Allocation: samma som ovan Request Minne Bandbredd Ström P1 4 0 0 P2 1 4 10 P3 3 0 60 7
8
Uppgift 6 (8 poäng) Antag att vi har ett system bestående av två sporadiska processer (P1, P2) och två periodiska processer (P3 och P4). De två sporadiska processerna tar bägge 2ms för varje körning. P1 körs i medelfallet var 10'e ms och i värsta fallet var 8'e, P2 alltid körs i medelfallet var 20'e ms och i värsta fallet var 10'e ms. Process P3 körs var 5'e ms och tar i medelfallet 1ms per körning och i värsta fallet 2ms per körning. Process P4 körs var 12'e ms och tar alltid 1ms per körning. a) Ge exekveringstiden, perioden och nyttjandegraden för processerna ovan för värsta fallet och för medelfallet. b) Går det att schemalägga det här systemet med RMS (Rate Monotonic Scheduling) i medelfallet? c) Går det att schemalägga det här systemet i värsta fallet med RMS? d) Antag att vi använde EDF (Earliest Deadline First) som schemalägningsmetod och att det värsta fallet inträffade. Visa hur systemet schemaläggs under de första 20ms. e) Under vilka omständigheter är det bättre att använda LST (LeastSlackTime first) istället för EDF när man schemalägger processer? Uppgift 7(4 poäng) Antag att vi har det färgade petrinätet nedan. a) Rita upp nåbarhetsgrafen för petrinätet om möjligt. b) Är petrinätet begränsat? c) Är petrinätet levande? 9