Exam Concurrent and Real-Time Programming

Relevanta dokument
Tentamen Lösningar EDA698 Realtidssystem

Realtidssystem. - Dödläge - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 5

Tentamen Nätverksprogrammering Lösningsförslag

Concurrency Saker händer samtidigt. Process En instans av ett program

Tentamen EDA698 Realtidssystem (Helsingborg)

Realtidssystem. - Semaforer, trådsynkronisering - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 2

Deadlocks. detektera och undvik

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Tentamen EDA698 Realtidssystem (Helsingborg)

Aktivitetsschemaläggning för flerkärninga processorer

Realtidssystem. - Semaforer, trådsynkronisering - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp

Mekanismer. (implementation)

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

Support Manual HoistLocatel Electronic Locks

Trådar. Aktiva objekt

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Tentamen Nätverksprogrammering Lösningsförslag

Tråd C (ms) T (ms) A 4 16 B 3 10 C 4 25 D 2 12

Tentamensskrivning Nätverksprogrammering (EDA095) , kl 8-13

Realtidssystem. - Schemaläggning - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 6

1. Varje bevissteg ska motiveras formellt (informella bevis ger 0 poang)

Realtidssystem. - Schemaläggning - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 6

Tentamen EDA698 Realtidssystem (Helsingborg)

Synkronisering. Ordning och reda

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

Tentamen Nätverksprogrammering Lösningsförslag

Preschool Kindergarten

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

Recitation 4. 2-D arrays. Exceptions

Realtidssystem. - Monitorer, synkroniserade metoder - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

9 Aktiva objekt och trådar

Beijer Electronics AB 2000, MA00336A,

Objektorienterad Programkonstruktion. Föreläsning dec 2015

2.1 Installation of driver using Internet Installation of driver from disk... 3

Föreläsning 15: Parallella subrutiner. Parallellitet. Varför parallella underprogram?

Tentamen Nätverksprogrammering Lösningsförslag

Boiler with heatpump / Värmepumpsberedare

ÖVERVAKNING AV SQL SERVER

Tentamen. Datorteknik och realtidssystem

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Tentamen Nätverksprogrammering Lösningsförslag

SkillGuide. Bruksanvisning. Svenska

Hjälpmedel: Inga hjälpmedel förutom penna, suddgummi och glatt humör.

Realtidssystem. - Meddelanden och händelsehantering - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 4

Realtidsprogrammering Ordinarie tentamen

Summering av fält. Synkronisering. Summering av fält. Bounded Buffer. Bounded Buffer (get) Bounded Buffer (put)

1. Unpack content of zip-file to temporary folder and double click Setup

Styrteknik: Binära tal, talsystem och koder D3:1

Att skriva till och läsa från terminalfönstret

Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin


Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

Föreläsning 3: Booleans, if, switch

Parallellism, återblick

Tentamen Nätverksprogrammering Lösningsförslag

Omtentamen i Realtidsprogrammering för Au3, D3, E3

Alias 1.0 Rollbaserad inloggning

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Tentamen i TDIU16 Process- och operativsystemprogrammering

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin Micael Karlsson

1.1 Runnable och Thread

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Telia Anita 20i Nummerpresentatören med telesvarsindikation

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Tentamen i Objektorienterad modellering och design

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

F4. programmeringsteknik och Matlab

Tentamen i Objektorienterad modellering och design Helsingborg

JAVAUTVECKLING LEKTION 4

Realtidssystem. - Introduktion, jämlöpande exekvering - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 1

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Tentamen. Datorteknik och realtidssystem

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

LÖSNINGSFÖRSLAG

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

12.6 Heat equation, Wave equation

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Generiska konstruktioner. Kursbokens kapitel 13

LULEÅ TEKNISKA UNIVERSITET

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Lösningsförslag till tentamen

Make a speech. How to make the perfect speech. söndag 6 oktober 13

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

SNABBGUIDE. Telia Anita 20 Bruksanvisning. Bläddra bland lagrade telefonnummer. Radera ett nummer. Radera alla nummer

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Lösningsförslag till tentamen FYTA11 Javaprogrammering

Workplan Food. Spring term 2016 Year 7. Name:

Övning 7. Timer, serieport

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

Uttagning för D21E och H21E

Föreläsning Datastrukturer (DAT036)

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Lösningsförslag till tentamen Datastrukturer, DAT037,

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Trådar. Motivering. Många program måste kunna hålla på med flera saker samtidigt, till exempel. fleranvändarsystem.

Transkript:

LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Exam Concurrent and Real-Time Programming 2018 08 23, 14.00 19.00 1. Vad är prioritetsinversion? Illustrera med ett enkelt exempel. Redogör kortfattat för hur prioritetsinversion kan undvikas. (2p) Prioritetsinversion är ett fenomen som uppstår då en högprioriterad tråd blir blockerad av en lägre prioriterad tråd utan att de (för tillfället) delar på någon resurs. Exempel: En lågprioriterad tråd exekverar och tar en resurs. En högprioriterad tråd börjar exekvera och försöker i sin tur ta resursen, vilket misslyckas eftersom den är låst. Den högprioriterade tråden blockerar i väntan på att resursen ska släppas av den lågprioriterade tråden. Under tiden blir en tredje, mellanprioriterad tråd körbar och tar över CPU:n i kraft av sin prioritet och blockerar den lågprioriterade tråden. Indirekt blockeras därmed även den högprioriterade som får vänta på den lägre prioriterade (mellanprioriterade) tråden. Lösningen på problemet är att använda något slags prioritetsärvningsprotokoll som gör att prioriteten för den lågprioriterade tråden tillfälligt höjs när den blockerar en mer högprioriterad tråd. På så vis kan den mellanprioriterade tråden inte komma in och ta över CPU:n medan resursen som den högprioriterade tråden vill ha är låst. 2. Vilka fyra villkor måste vara uppfyllda för att dödläge ska kunna uppstå? (2p) De fyra villkoren är: Mutual exclusion - ömsesidig uteslutning. Endast en tråd tillåts använda en gemensam resurs åt gången, vilket medför att en annan tråd kan behöva vänta. Hold-and-wait, dvs att en tråd ska kunna ta en resurs och sedan blockeras när den försöker ta ytterligare en. No resource preemption - ingen yttre mekanism som kan tvinga en tråd att släppa en resurs i förtid. Circular wait cirkulär väntan. Det måste finnas en kedja av hold-and-wait-situationer som är cirkulär. 3. a) Vad brukar man kalla sättet att vänta på att den delade resursen ska bli tillgänglig (while (mutex==1);)? Vilken nackdel har denna metod? (1p) Man kallar detta sätt att vänta för busy-wait". Nackdelen är att man ödslar en mängd CPU-tid på att inte göra annat än att vänta på att villkoret blir uppfyllt. I värsta fall kan det innebära att den tråd som ska uppfylla villkoret aldrig får köra den kanske har lägre prioritet än den väntande tråden. b) Garanterar koden ovan ömsesidig uteslutning över anropet av dosomething? Motivera ditt svar. (1p) Nej, koden garanterar ej ömsesidig uteslutning. Antag att två trådar samtidigt försöker gå in i den kritiska regionen. Tråd ett exekverar while-satsen och konstaterar att resursen är ledig, men innan den hinner markera resursen som upptagen ( mutex = 1; ) blir det ett trådbyte och tråd två kommer igång. Den exekverar också while-satsen och eftersom mutex fortfarande är lika med noll fortsätter tråd två och går in i operationen dosomething. Medan tråd två exekverar dosomething blir det ett nytt trådbyte och tråd ett fortsätter även den in i dosomething. 4. a) Rita en resursallokeringsgraf för systemet. (2p)

2(5) b) Finns det risk för dödläge i systemet? Motivera ditt svar. (1p) Ja, det finns risk för dödläge! Om T1 är i begrepp att ta semafor S2 samtidigt som T2 försöker ta semafor S1 och T3 försöker ta semafor S4 så uppstår cirkulär väntan och risk för dödläge. Detta ser man i resursallokeringsgrafen genom den cirkulära struktur som markerats med breda pilar. Det är värt att notera att det även går att hitta andra cirkulära strukturer i grafen, men dessa skulle i så fall kräva att det fanns flera identiska trådar i systemet. Enligt uppgiften fanns det bara tre trådar i systemet - följdaktligen en av vardera T1, T2 och T3. 5. a) Vad blir svarstiderna för de tre olika trådarna om man tillämpar Rate Monotonic Scheduling (RMS)? Är systemet schemaläggningsbart, dvs klarar systemet av alla sina deadlines? (2p) Enligt Rate Monotonic Scheduling ska vi ge trådarna prioritet efter deras perioder - ju kortare period, desto högre prioritet. Detta ger att C ska ha högst prioritet, därefter B och A ska ha lägst prioritet. Om vi ritar upp hur trådarna exekverar vid det s.k. kritiska ögonblicket, dvs när alla trådarna vill börja köra samtidigt får vi svarstiderna för trådarna genom att se när de olika trådarna har kört färdigt första gången. Svarstiderna (i värsta fall) blir således för A: 6 ms, B: 3 ms och för C: 2 ms. Tråd B och C klarar sina tidskrav, dvs svarstiderna är mindre eller lika med deadline, men det gör inte tråd A. Systemet är alltså inte schemaläggningsbart med RMS! b) Vad blir svarstiderna för de tre trådarna om man i stället använder sig av Deadline Mono- tonic Scheduling (DMS)? Är systemet schemaläggningsbart? (2p) Vi gör samma analys som i uppgift a). Enligt Deadline Monotonic Scheduling ska man sätta prioriteterna på trådarna efter hur korta deadlines de har. Ju kortare deadline, desto högre prioritet. Vi får då att A ska ha högst prioritet, C därefter och B ska ha lägst prioritet. Svarstiderna blir nu för A: 3 ms, B: 6 ms och för C: 5 ms. Alla trådar klarar nu sina tidskrav! Systemet är således schemaläggningsbart! 6. I systemet förekommer blockering av två typer: direkt blockering (normal blocking) och pushthrough-blocking". För tråd T1, som har högst prioritet, förekommer endast direkt blockering eftersom pushthrough-blocking"kräver att det finns minst en tråd som har högre prioritet (och sådan finns inte) och en som har lägre prioritet samt att dessa två kommunicerar med varandra. T1 kan blockeras först av T2 i monitorn M1 i högst 0,5 ms (tiden det kan tänkas ta för T2 att köra fär- digt operationen c()). Sedan kan T1 tänkas anropa b() i monitorn M2 och då bli blockerad av T3 i högst 0,7 ms. Sammanlagd blockeringstid i värsta fall blir då 0,5+0,7=1,2 ms. Tråd T2 kan inte bli blockerad av T1 därför att T1 har högre prioritet. Visserligen kan T1 avbryta körningen av T2, men detta räknar vi inte som blockering av T2. Då återstår T3. T3 kan precis ha anropat operationen f() i M3 när T2 börjar köra och när T2 i sin tur anropar e() i samma monitor blir T2 blockerad i högst 0,2 ms. T3 kan dock alternativt precis ha anropat operationen d() i monitorn M2. Om nu T1 kommer in och vill börja köra och också den försöker gå in i M3 kommer

3(5) prioriteten för T3 att höjas till samma prioritet som T1 har så länge T3 är inne i operationen d(). Detta kan den vara i högst 0,7 ms och i och med att prioriteten har höjts över prioriteten för T2 kommer T3 att tränga sig föret2 i högst 0,7 ms. Detta kallas för push-through-blocking". Eftersom T3 enligt uppgiften inte kan vara både i monitor M2 och M3 samtidigt ska vi ta den längsta möjliga blockeringen som blockeringstid. 0,7>0,2 så blockeringstiden blir 0,7 ms. Tråden T3 har lägst prioritet och det finns alltså inga trådar med lägre prioritet som kan blockera den. Blockeringstiden för T3 blir således trivialt lika med 0 ms. SVAR: B1=1,2 ms, B2=0,7 ms och B3=0 ms.

4(5) 7. public class TimeoutEventQueue extends EventQueue { private TimeoutHandler handler; private PriorityBlockingQueue<Long> q = new PriorityBlockingQueue<>(); public TimeoutEventQueue() { handler = new TimeoutHandler(q, this); handler.start(); public synchronized RTEvent timedfetch(long timeout) { RTEvent e = tryfetch(); if (e!= null) { return e; long deadline = System.currentTimeMillis() + timeout; q.add(deadline); handler.interrupt(); while (System.currentTimeMillis() < deadline && e == null) { wait(); // wait for timeout or available message e = tryfetch(); return e; catch (InterruptedException ie) { throw new Error(ie); public synchronized void notifytimeoutexpired() { notifyall(); /** A thread that repeatedly picks the most imminent deadline from a priority queue, waits for it to occur, and then signals the corresponding event queue. */ public class TimeoutHandler extends Thread { private PriorityBlockingQueue<Long> q; private TimeoutEventQueue owner; public TimeoutHandler(PriorityBlockingQueue<Long> q, TimeoutEventQueue owner) { this.q = q; this.owner = owner; public void run() { while (true) { long r = q.take(); long now = System.currentTimeMillis(); if (r > now) { sleep(r - now); owner.notifytimeoutexpired(); catch (InterruptedException ie) { // new deadline received while sleeping: // put current deadline back, and pick a new one q.add(r);

5(5) catch (InterruptedException ie) { // take() was interrupted: // do nothing, just go back to take() again 8. We can use a single monitor holding the data to display: distance Traveled distance (meters) mode Current display mode (1..4) consumption Current fuel consumption (litres/100km), average from last ten seconds Four threads are needed: 1. A thread to compute travel distance. This thread waits for CarSensors.waitForRevolution(), and stores an updated distance in the monitor. 2. A thread to handle button presses. This thread waits for CarSensors.waitForButtonPress(), and updates the mode value in the monitor. 3. A thread, executing periodically 10 times per second, to read current fuel consumption using CarSensors.fuelFlow(), compute the current and average fuel consumption, and store the value as consumption in the monitor. 4. A thread, executing periodically once per second, to update the display. The last two threads above can be combined to a single, periodic thread. When the Mode button is pressed, there may be a delay of up to a second until the display is updated. This delay may be reduced by using, for example, interrupt, as outlined in the previous task. This is not required here, however.