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

Storlek: px
Starta visningen från sidan:

Download "Realtidssystem. - Semaforer, trådsynkronisering - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp 2015-09-02"

Transkript

1 Realtidssystem - Semaforer, trådsynkronisering - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp Stora delar baserad på: Föreläsningsmaterial EDA040 (Klas Nilsson, Mathias Haage) samt EDA698 (Mats Lilja) 1

2 Förtydligande: Kursens fokus och mål Praktik-Fokus: Trådar i OS-process semaforer monitorer meddelanden i kö (mailbox / event queue) Teori-Fokus: Trådarnas samspel dödläge / svält / livelock exekveringstider prioriteter schemaläggning och schemaläggningsanalys Man ska kunna bygga flertrådiga program som i princip kan uppfylla realtidskrav Man ska kunna läsa kod av flertrådiga program och kunna lösa problem i koden Man ska bygga upp en förståelse för vad som kan hända när flera trådar måste hanteras Man ska bygga upp en uppfattning om vilka verktyg som finns för att utföra en analys av ett tilltänkt system och kunna utföra enklare analyser 2

3 Dagens agenda Recap: Exekveringstillstånd, kontextbyte, gemensam resurshantering Synkronisering / Ömsesidig uteslutning: Semaforer MutexSem Signalling Counting semaphore 3

4 Dagens agenda Recap: Exekveringstillstånd, kontextbyte, gemensam resurshantering Synkronisering / Ömsesidig uteslutning: Semaforer MutexSem Signalling Counting semaphore 4

5 Exekveringstillstånd Due to scheduler / kernel / OS Running Priority, time-sharing Ready Due to application By this : wait, synchronized call Blocked By other: notify, synchronized return Schemaläggningstillstånd (scheduling state) Running Ready (genom t.ex. Semaphore.give()) Blocked (genom t.ex. Semaphore.take()) 5

6 Pre-emption 6

7 Pre-emption Det finns olika strategier för tillåtelse av kontextbyten: 6

8 Pre-emption Det finns olika strategier för tillåtelse av kontextbyten: Non-pre-emptive scheduling ( icke-avbrytbar schemaläggning): Tråden som kör kan inte avbrytas tills den släpper CPUn frivilligt explicit genom att anropa yield() eller implicit genom (synchronized) operationer som kan blockera. 6

9 Pre-emption Det finns olika strategier för tillåtelse av kontextbyten: Non-pre-emptive scheduling ( icke-avbrytbar schemaläggning): Tråden som kör kan inte avbrytas tills den släpper CPUn frivilligt explicit genom att anropa yield() eller implicit genom (synchronized) operationer som kan blockera. Pre-emption point based scheduling ( avbrytningspunktbaserad schemaläggning): Tråden som kör kan avbrytas vid vissa punkter i programmet (definierad genom språket eller run-time systemet) 6

10 Pre-emption Det finns olika strategier för tillåtelse av kontextbyten: Non-pre-emptive scheduling ( icke-avbrytbar schemaläggning): Tråden som kör kan inte avbrytas tills den släpper CPUn frivilligt explicit genom att anropa yield() eller implicit genom (synchronized) operationer som kan blockera. Pre-emption point based scheduling ( avbrytningspunktbaserad schemaläggning): Tråden som kör kan avbrytas vid vissa punkter i programmet (definierad genom språket eller run-time systemet) Pre-emptive scheduling ( avbrytbar schemaläggning): Tråden som kör kan avbrytas när som helst av schemaläggaren (som styrs av hårdvaru-interrupts). 6

11 Pre-emption Det finns olika strategier för tillåtelse av kontextbyten: Non-pre-emptive scheduling ( icke-avbrytbar schemaläggning): Tråden som kör kan inte avbrytas tills den släpper CPUn frivilligt explicit genom att anropa yield() eller implicit genom (synchronized) operationer som kan blockera. Pre-emption point based scheduling ( avbrytningspunktbaserad schemaläggning): Tråden som kör kan avbrytas vid vissa punkter i programmet (definierad genom språket eller run-time systemet) Pre-emptive scheduling ( avbrytbar schemaläggning): Tråden som kör kan avbrytas när som helst av schemaläggaren (som styrs av hårdvaru-interrupts). För att det ska bli rätt med schemaläggningen och väntetiderna, antar våra program att kärnan är pre-emptive, dvs. trådar kan avbrytas vid behov och då hanterar systemet kontextbytet på ett korrekt sätt. 6

12 Exekverande tråd vs trådobjekt En exekverande tråd är en enhet i run-time-systemet (löptidssystem), som man får tillgång till via ett trådobjekt. Trådobjektet är - innan start() har anropats - som vilket objekt som helst; start() är ingenting vi behöver implementera, det är en del av systemets nativa (native) kod. När någontrådobjekt.start() anrops, ger native-metoden start() anropet vidare till någon OSrutin som skapar den exekverande tråden. start() anropar run() som beskriver arbetet som ska utföras. Om man enbart anropar run() utförs detta i den anropande trådens kontext, dvs det blir ingen förgrening! 7

13 Concurrent computing Jämlöpande exekvering Mjukvaran måste utföra alla beräkningar logiskt korrekt reagera på inmatningar jämlöpande " 0 " 2 " "0 " 5 5 % $ alltid ha konsistent data att arbeta med " 5 + % +1 &$! 0" %3 6$ "##$%"$# " "% + 5! &% 2! + 0" " "$ 8

14 Concurrent computing Jämlöpande exekvering Mjukvaran måste utföra alla beräkningar logiskt korrekt reagera på inmatningar jämlöpande " 0 " 2 " "0 " 5 5 % $ alltid ha konsistent data att arbeta med " 5 + % +1 &$! 0" %3 6$ " "% + 5! Software application borde vara ett reaktivt system, &% 2! + 0" " "$ "##$%"$# 8

15 Concurrent computing Jämlöpande exekvering Mjukvaran måste utföra alla beräkningar logiskt korrekt reagera på inmatningar jämlöpande " 0 " 2 " "0 " 5 5 % $ alltid ha konsistent data att arbeta med " 5 + % +1 &$! 0" %3 6$ " "% + 5! Software application borde vara ett reaktivt system, &% 2! + 0" " "$ "##$%"$# 8

16 Concurrent computing Jämlöpande exekvering Mjukvaran måste utföra alla beräkningar logiskt korrekt reagera på inmatningar jämlöpande " 0 " 2 " "0 " 5 5 % $ alltid ha konsistent data att arbeta med " 5 + % +1 &$! 0" %3 6$ " "% + 5! Software application borde vara ett reaktivt system, &% 2! + 0" " "$ som svarar både på tidsenheter som går (varje månad ska lönen läggas "##$%"$# till på kontot), 8

17 Concurrent computing Jämlöpande exekvering Mjukvaran måste utföra alla beräkningar logiskt korrekt reagera på inmatningar jämlöpande " 0 " 2 " "0 " 5 5 % $ alltid ha konsistent data att arbeta med " 5 + % +1 &$! 0" %3 6$ " "% + 5! Software application borde vara ett reaktivt system, &% 2! + 0" " "$ som svarar både på tidsenheter som går (varje månad ska lönen läggas "##$%"$# till på kontot), 8

18 Kapplöpning class HelloWorld extends Thread { public static void main( String[] arg) { System.out.print( Hello ); new HelloWorld().start(); sleep( 1); System.out.println( World! ); public void run() { System.out.print( and goodbye ); Vem får resursen (println, dvs konsolen...?) Det behövs alltså fler egenskaper och mekanismer, samt regler för programmering av multi-trådade program, än bara möjligheten att skapa trådar och låta dem köra samtidigt. 9

19 Kapplöpning class HelloWorld extends Thread { public static void main( String[] arg) { System.out.print( Hello ); new HelloWorld().start(); sleep( 1); System.out.println( World! ); pc:~ user$ java HelloWorld Hello World! and goodbye pc:~ user$ public void run() { System.out.print( and goodbye ); Vem får resursen (println, dvs konsolen...?) Det behövs alltså fler egenskaper och mekanismer, samt regler för programmering av multi-trådade program, än bara möjligheten att skapa trådar och låta dem köra samtidigt. 9

20 Kapplöpning class HelloWorld extends Thread { public static void main( String[] arg) { System.out.print( Hello ); new HelloWorld().start(); sleep( 1); System.out.println( World! ); public void run() { System.out.print( and goodbye ); pc:~ user$ java HelloWorld Hello World! and goodbye pc:~ user$ pc:~ user$ java HelloWorld Hello and goodbye World! pc:~ user$ Vem får resursen (println, dvs konsolen...?) Det behövs alltså fler egenskaper och mekanismer, samt regler för programmering av multi-trådade program, än bara möjligheten att skapa trådar och låta dem köra samtidigt. 9

21 Kapplöpning class HelloWorld extends Thread { public static void main( String[] arg) { System.out.print( Hello ); new HelloWorld().start(); sleep( 1); System.out.println( World! ); public void run() { System.out.print( and goodbye ); pc:~ user$ java HelloWorld Hello World! and goodbye pc:~ user$ pc:~ user$ java HelloWorld Hello and goodbye World! pc:~ user$ pc:~ user$ java HelloWorld Hello and goodbye World! pc:~ user$ Vem får resursen (println, dvs konsolen...?) Det behövs alltså fler egenskaper och mekanismer, samt regler för programmering av multi-trådade program, än bara möjligheten att skapa trådar och låta dem köra samtidigt. 9

22 Kapplöpning class HelloWorld extends Thread { public static void main( String[] arg) { System.out.print( Hello ); new HelloWorld().start(); sleep( 1); System.out.println( World! ); public void run() { System.out.print( and goodbye ); pc:~ user$ java HelloWorld Hello World! and goodbye pc:~ user$ pc:~ user$ java HelloWorld Hello and goodbye World! pc:~ user$ pc:~ user$ java HelloWorld Hello and goodbye World! pc:~ user$ pc:~ user$ java HelloWorld Hello and goodbye World! pc:~ user$ Vem får resursen (println, dvs konsolen...?) Det behövs alltså fler egenskaper och mekanismer, samt regler för programmering av multi-trådade program, än bara möjligheten att skapa trådar och låta dem köra samtidigt. 9

23 Kapplöpning class HelloWorld extends Thread { public static void main( String[] arg) { System.out.print( Hello ); new HelloWorld().start(); sleep( 1); System.out.println( World! ); public void run() { System.out.print( and goodbye ); pc:~ user$ java HelloWorld Hello World! and goodbye pc:~ user$ pc:~ user$ java HelloWorld Hello and goodbye World! pc:~ user$ pc:~ user$ java HelloWorld Hello and goodbye World! pc:~ user$ pc:~ user$ java HelloWorld Hello and goodbye World! pc:~ user$ pc:~ user$ java HelloWorld Hello World! and goodbye Vem får resursen (println, dvs konsolen...?) Det behövs alltså fler egenskaper och mekanismer, samt regler för programmering av multi-trådade program, än bara möjligheten att skapa trådar och låta dem köra samtidigt. 9

24 Bankkontot igen Situation 1: A: Läs 5000 B: Läs 5000 A: Belopp = B: Belopp = A: Skriv 4000 B: Skriv A: Läs 5000 Situation 2: B: Läs 5000 B: Belopp = B: Skriv A: Belopp = A: Skriv 4000 Två aktiviteter (program, trådar (threads), processer) utförs samtidigt, då de hanterar samma resurser. I båda situationer blir resultatet fel. Här behövs det alltså någon mekanism för ömsesidig uteslutning (mutual exclusion) för att hantera kritiska sekvenser (critical sections) och odelbara aktioner (atomic actions). 10

25 Kritiska sekvenser (Critical sections) Delar av ett program (en sekvens) som behöver tillgång till en delad resurs. Får inte bli avbruten av en annan programsekvens, eller av en ny upprop till sig själv. Kraven kan uppfyllas med hjälp av Semaforer, Monitorer eller Postlådor (Mailboxes) På låg nivå (native code) kan man också slå av interrupts (avbrott). 11

26 Begrepp / abstraktioner för jämlöpande exekvering 12

27 Begrepp / abstraktioner för jämlöpande exekvering Vad är det som ett programmeringsspråk måste stödja för att kunna erbjuda jämlöpande exekvering? 12

28 Begrepp / abstraktioner för jämlöpande exekvering Vad är det som ett programmeringsspråk måste stödja för att kunna erbjuda jämlöpande exekvering? Tråd - en aktivitet, programsekvens 12

29 Begrepp / abstraktioner för jämlöpande exekvering Vad är det som ett programmeringsspråk måste stödja för att kunna erbjuda jämlöpande exekvering? Tråd - en aktivitet, programsekvens Exekveringsstatus - aktiv / inaktiv, använd av en tråd eller ej; kontext + aktivitetsstatus 12

30 Begrepp / abstraktioner för jämlöpande exekvering Vad är det som ett programmeringsspråk måste stödja för att kunna erbjuda jämlöpande exekvering? Tråd - en aktivitet, programsekvens Exekveringsstatus - aktiv / inaktiv, använd av en tråd eller ej; kontext + aktivitetsstatus Synkronisering - hantering av gemensamma resurser 12

31 Dagens agenda Recap: Exekveringstillstånd, kontextbyte, gemensam resurshantering Synkronisering / Ömsesidig uteslutning: Semaforer MutexSem Signalling Counting semaphore 13

32 Kan man få till ömsesidig uteslutning utan systemanrop? class T extends Thread { public void run() { while( true) { noncriticalsection(); preprotocol(); criticalsection(); postprotocol(); class T2 extends Thread { public void class run() T extends { Thread { while( true) public { void run() { noncriticalsection(); while( true) { preprotocol(); noncriticalsection(); criticalsection(); preprotocol(); postprotocol(); criticalsection(); postprotocol(); Critical Section (CS) Jämför Bankkonto-exemplet Vi kommer titta på konstruktionen av pre-/postprotocol Antagandet: En tråd kommer inte att blockeras inom dess kritiska sekvens (critical section). Krav: Ömsesidig uteslutning, ingen dödläge, inget svält, hög verkningsgrad (efficiency). 14

33 Ömsesidig uteslutning, tråden class T extends Thread { public void run() { while( true) { noncriticalsection(); preprotocol(); criticalsection(); postprotocol(); 15

34 Ömsesidig uteslutning, kraven Det här måste uppfyllas: 1. Ömsesidig uteslutning (Mutual exclusion): Exekvering av en kod i en kritisk sekvens får inte flätas ihop med någon annan tråds kodsekvens. 2. Inget dödläge (No deadlock): Om en eller fler tråd(ar) försöker starta exekvering av en kritisk sekvens, måste det finnas någon av dem som faktiskt kan göra det. 3. Ingen svält (No starvation): En tråd måste få möjlighet att någon gång påbörja exekveringen av dess kritiska sekvens. 4. Effektivitet (Efficiency): Liten overhead (förvaltningskostnad) när det finns enbart en tråd, det hela måste fungera bra även om det bara finns en tråd (det får inte finnas en obligatorisk väntemoment på en annan tråd när en sådan inte kan garanteras finnas). Kan de här kraven uppfyllas med vanlig Java-kod? 16

35 Ömsesidig uteslutning - version 1 - int turn = 1; class T1 extends Thread { public void run() { while( true) { noncs1(); while( turn!= 1); cs1(); turn = 2; class T2 extends Thread { public void run() { while( true) { noncs2(); while( turn!= 2); cs2(); turn = 1; 17

36 Ömsesidig uteslutning - version 1 - int turn = 1; class T1 extends Thread { public void run() { while( true) { noncs1(); while( turn!= 1); cs1(); turn = 2; class T2 extends Thread { public void run() { while( true) { noncs2(); while( turn!= 2); cs2(); turn = 1; Ömsesidig uteslutning: OK 17

37 Ömsesidig uteslutning - version 1 - int turn = 1; class T1 extends Thread { public void run() { while( true) { noncs1(); while( turn!= 1); cs1(); turn = 2; class T2 extends Thread { public void run() { while( true) { noncs2(); while( turn!= 2); cs2(); turn = 1; Ömsesidig uteslutning: OK Inget dödläge: OK, en av dem kan alltid köra. 17

38 Ömsesidig uteslutning - version 1 - int turn = 1; class T1 extends Thread { public void run() { while( true) { noncs1(); while( turn!= 1); cs1(); turn = 2; class T2 extends Thread { public void run() { while( true) { noncs2(); while( turn!= 2); cs2(); turn = 1; Ömsesidig uteslutning: OK Inget dödläge: OK, en av dem kan alltid köra. Inget svält: OK, omväxlande protokoll. 17

39 Ömsesidig uteslutning - version 1 - int turn = 1; class T1 extends Thread { public void run() { while( true) { noncs1(); while( turn!= 1); cs1(); turn = 2; class T2 extends Thread { public void run() { while( true) { noncs2(); while( turn!= 2); cs2(); turn = 1; Ömsesidig uteslutning: OK Inget dödläge: OK, en av dem kan alltid köra. Inget svält: OK, omväxlande protokoll. Effektivitet / en tråd?: NEJ (en tråd kommer hänga sig efter max en omgång), plus vi har en busy-wait (ineffektiv). För många trådar dessutom rörig. 17

40 Ömsesidig uteslutning - version 1 - int turn = 1; class T1 extends Thread { public void run() { while( true) { noncs1(); while( turn!= 1); cs1(); turn = 2; class T2 extends Thread { public void run() { while( true) { noncs2(); while( turn!= 2); cs2(); turn = 1; Ömsesidig uteslutning: OK Inget dödläge: OK, en av dem kan alltid köra. Inget svält: OK, omväxlande protokoll. Effektivitet / en tråd?: NEJ (en tråd kommer hänga sig efter max en omgång), plus vi har en busy-wait (ineffektiv). För många trådar dessutom rörig. Ej acceptabelt! 17

41 Ömsesidig uteslutning - version 2 - int c1, c2; c1 = c2 = 1; class T1 extends Thread { public void run() { while( true) { noncs1(); while( c2!= 1); c1 = 0; cs1(); c1 = 1; class T2 extends Thread { public void run() { while( true) { noncs2(); while( c1!= 1); c2 = 0; cs1(); c2 = 1; 18

42 Ömsesidig uteslutning - version 2 - int c1, c2; c1 = c2 = 1; class T1 extends Thread { public void run() { while( true) { noncs1(); while( c2!= 1); c1 = 0; cs1(); c1 = 1; class T2 extends Thread { public void run() { while( true) { noncs2(); while( c1!= 1); c2 = 0; cs1(); c2 = 1; Ömsesidig uteslutning: NEJ... (testa sammanflätning) 18

43 Ömsesidig uteslutning - version 2 - int c1, c2; c1 = c2 = 1; class T1 extends Thread { public void run() { while( true) { noncs1(); while( c2!= 1); c1 = 0; cs1(); c1 = 1; class T2 extends Thread { public void run() { while( true) { noncs2(); while( c1!= 1); c2 = 0; cs1(); c2 = 1; Ömsesidig uteslutning: NEJ... (testa sammanflätning) c1 = 1; c2 = 1; while( c2!= 1); while( c1!= 1); c1 = 0; c2 = 0; cs1(); cs2(); 18

44 Ömsesidig uteslutning - version 2 - int c1, c2; c1 = c2 = 1; class T1 extends Thread { public void run() { while( true) { noncs1(); while( c2!= 1); c1 = 0; cs1(); c1 = 1; class T2 extends Thread { public void run() { while( true) { noncs2(); while( c1!= 1); c2 = 0; cs1(); c2 = 1; Ömsesidig uteslutning: NEJ... (testa sammanflätning) c1 = 1; c2 = 1; while( c2!= 1); while( c1!= 1); c1 = 0; c2 = 0; cs1(); cs2(); Ingen lösning, även om det kan fungera länge tills det kraschar (genom interrupt i noncs1, eller noncs2!) 18

45 Ömsesidig uteslutning - version 3 - int c1, c2; c1 = c2 = 1; class T1 extends Thread { public void run() { while( true) { noncs1(); c1 = 0; while( c2!= 1); cs1(); c1 = 1; class T2 extends Thread { public void run() { while( true) { noncs2(); c2 = 0; while( c1!= 1); cs1(); c2 = 1; 19

46 Ömsesidig uteslutning - version 3 - int c1, c2; c1 = c2 = 1; class T1 extends Thread { public void run() { while( true) { noncs1(); c1 = 0; while( c2!= 1); cs1(); c1 = 1; class T2 extends Thread { public void run() { while( true) { noncs2(); c2 = 0; while( c1!= 1); cs1(); c2 = 1; Ömsesidig uteslutning: OK 19

47 Ömsesidig uteslutning - version 3 - int c1, c2; c1 = c2 = 1; class T1 extends Thread { public void run() { while( true) { noncs1(); c1 = 0; while( c2!= 1); cs1(); c1 = 1; class T2 extends Thread { public void run() { while( true) { noncs2(); c2 = 0; while( c1!= 1); cs1(); c2 = 1; Ömsesidig uteslutning: OK Inget dödläge: Nej (alltså ja): 19

48 Ömsesidig uteslutning - version 3 - class T1 extends Thread { public void run() { while( true) { noncs1(); c1 = 0; while( c2!= 1); cs1(); c1 = 1; int c1, c2; c1 = c2 = 1; class T2 extends Thread { public void run() { while( true) { noncs2(); c2 = 0; while( c1!= 1); cs1(); c2 = 1; Ömsesidig uteslutning: OK Inget dödläge: Nej (alltså ja): c1 = 0; c2 = 0; while( c2!= 1); // I all evighet... while( c1!= 1); //... och lite till... 19

49 Ömsesidig uteslutning - version 3 - class T1 extends Thread { public void run() { while( true) { noncs1(); c1 = 0; while( c2!= 1); cs1(); c1 = 1; int c1, c2; c1 = c2 = 1; class T2 extends Thread { public void run() { while( true) { noncs2(); c2 = 0; while( c1!= 1); cs1(); c2 = 1; Ömsesidig uteslutning: OK Inget dödläge: Nej (alltså ja): c1 = 0; c2 = 0; while( c2!= 1); // I all evighet... while( c1!= 1); //... och lite till... Ingen lösning, även om det kan fungera länge tills det kraschar (genom interrupt i noncs1, eller noncs2)! 19

50 Ömsesidig uteslutning - version 4 - int c1, c2; c1 = c2 = 1; class T1 extends Thread { //... noncs1(); c1 = 0; while( c2!= 1){ c1 = 1; //** c1 = 0; cs1(); c1 = 1; //.. class T2 extends Thread { //... noncs2(); c2 = 0; while( c1!= 1){ c2 = 1; //** c2 = 0; cs2(); c2 = 1; //.. 20

51 Ömsesidig uteslutning - version 4 - int c1, c2; c1 = c2 = 1; class T1 extends Thread { //... noncs1(); c1 = 0; while( c2!= 1){ c1 = 1; //** c1 = 0; cs1(); c1 = 1; //.. class T2 extends Thread { //... noncs2(); c2 = 0; while( c1!= 1){ c2 = 1; //** c2 = 0; cs2(); c2 = 1; //.. Ömsesidig uteslutning: OK 20

52 Ömsesidig uteslutning - version 4 - int c1, c2; c1 = c2 = 1; class T1 extends Thread { //... noncs1(); c1 = 0; while( c2!= 1){ c1 = 1; //** c1 = 0; cs1(); c1 = 1; //.. class T2 extends Thread { //... noncs2(); c2 = 0; while( c1!= 1){ c2 = 1; //** c2 = 0; cs2(); c2 = 1; //.. Ömsesidig uteslutning: OK Inget dödläge: OK (//** är yield) 20

53 Ömsesidig uteslutning - version 4 - int c1, c2; c1 = c2 = 1; class T1 extends Thread { //... noncs1(); c1 = 0; while( c2!= 1){ c1 = 1; //** c1 = 0; cs1(); c1 = 1; //.. class T2 extends Thread { //... noncs2(); c2 = 0; while( c1!= 1){ c2 = 1; //** c2 = 0; cs2(); c2 = 1; //.. Ömsesidig uteslutning: OK Inget dödläge: OK (//** är yield) Inget svält: NEJ, det kan hända att en tråd får köra, men kommer aldrig så långt att den får verkligen utföra CS (kallas livelock om det händer fler trådar så att hela systemet jobbar utan att göra något). 20

54 Ömsesidig uteslutning - version 4 - int c1, c2; c1 = c2 = 1; class T1 extends Thread { //... noncs1(); c1 = 0; while( c2!= 1){ c1 = 1; //** c1 = 0; cs1(); c1 = 1; //.. class T2 extends Thread { //... noncs2(); c2 = 0; while( c1!= 1){ c2 = 1; //** c2 = 0; cs2(); c2 = 1; //.. Ömsesidig uteslutning: OK Inget dödläge: OK (//** är yield) Inget svält: NEJ, det kan hända att en tråd får köra, men kommer aldrig så långt att den får verkligen utföra CS (kallas livelock om det händer fler trådar så att hela systemet jobbar utan att göra något). Ej acceptabelt! 20

55 Ömsesidig uteslutning - version 4 - int c1, c2; c1 = c2 = 1; class T1 extends Thread { //... noncs1(); c1 = 0; while( c2!= 1){ c1 = 1; //** c1 = 0; cs1(); c1 = 1; //.. Ömsesidig uteslutning: OK Inget dödläge: OK (//** är yield) Inget svält: NEJ, det kan hända att en tråd får köra, men kommer aldrig så långt att den får verkligen utföra CS (kallas livelock om det händer fler trådar så att hela systemet jobbar utan att göra något). Ej acceptabelt! class T2 extends Thread { //... noncs2(); c2 = 0; while( c1!= 1){ c2 = 1; //** c2 = 0; cs2(); c2 = 1; //.. c1 = 0; c2 = 0; while( c1!= 1) { c2 = 1;... while( c2!= 1); cs1(); c1 = 1; noncs1(); c1 = 0;... c2 = 0; while( c1!= 1) { c2 = 1; while( c2!= 1); cs1(); c1 = 1;... 20

56 Dekkers algoritm int c1, c2, turn; c1 = c2 = turn = 1; class DA1 extends Thread { //... noncs1(); c1 = 0; while( c2!= 1){ if( turn == 2) { c1 = 1; while( turn == 2); c1 = 0; cs1(); c1 = 1; turn = 2; class DA2 extends Thread { //... noncs2(); c2 = 0; while( c1!= 1){ if( turn == 1) { c2 = 1; while( turn == 1); c2 = 0; cs2(); c2 = 1; turn = 1; 21

57 Dekkers algoritm int c1, c2, turn; c1 = c2 = turn = 1; class DA1 extends Thread { //... noncs1(); c1 = 0; while( c2!= 1){ if( turn == 2) { c1 = 1; while( turn == 2); c1 = 0; cs1(); c1 = 1; turn = 2; class DA2 extends Thread { //... noncs2(); c2 = 0; while( c1!= 1){ if( turn == 1) { c2 = 1; while( turn == 1); c2 = 0; cs2(); c2 = 1; turn = 1; Ömsesidig uteslutning: OK 21

58 Dekkers algoritm int c1, c2, turn; c1 = c2 = turn = 1; class DA1 extends Thread { //... noncs1(); c1 = 0; while( c2!= 1){ if( turn == 2) { c1 = 1; while( turn == 2); c1 = 0; cs1(); c1 = 1; turn = 2; class DA2 extends Thread { //... noncs2(); c2 = 0; while( c1!= 1){ if( turn == 1) { c2 = 1; while( turn == 1); c2 = 0; cs2(); c2 = 1; turn = 1; Ömsesidig uteslutning: OK Inget dödläge: OK 21

59 Dekkers algoritm int c1, c2, turn; c1 = c2 = turn = 1; class DA1 extends Thread { //... noncs1(); c1 = 0; while( c2!= 1){ if( turn == 2) { c1 = 1; while( turn == 2); c1 = 0; cs1(); c1 = 1; turn = 2; class DA2 extends Thread { //... noncs2(); c2 = 0; while( c1!= 1){ if( turn == 1) { c2 = 1; while( turn == 1); c2 = 0; cs2(); c2 = 1; turn = 1; Ömsesidig uteslutning: OK Inget dödläge: OK Inget svält: OK (inte bara yield, men blockerar tills CS har körts en gång minst) 21

60 Dekkers algoritm int c1, c2, turn; c1 = c2 = turn = 1; class DA1 extends Thread { //... noncs1(); c1 = 0; while( c2!= 1){ if( turn == 2) { c1 = 1; while( turn == 2); c1 = 0; cs1(); c1 = 1; turn = 2; class DA2 extends Thread { //... noncs2(); c2 = 0; while( c1!= 1){ if( turn == 1) { c2 = 1; while( turn == 1); c2 = 0; cs2(); c2 = 1; turn = 1; Ömsesidig uteslutning: OK Inget dödläge: OK Inget svält: OK (inte bara yield, men blockerar tills CS har körts en gång minst) Effektivitet / en tråd?: Inte bra. 21

61 Dekkers algoritm int c1, c2, turn; c1 = c2 = turn = 1; class DA1 extends Thread { //... noncs1(); c1 = 0; while( c2!= 1){ if( turn == 2) { c1 = 1; while( turn == 2); c1 = 0; cs1(); c1 = 1; turn = 2; class DA2 extends Thread { //... noncs2(); c2 = 0; while( c1!= 1){ if( turn == 1) { c2 = 1; while( turn == 1); c2 = 0; cs2(); c2 = 1; turn = 1; Ömsesidig uteslutning: OK Inget dödläge: OK Inget svält: OK (inte bara yield, men blockerar tills CS har körts en gång minst) Effektivitet / en tråd?: Inte bra. Dekkers algoritm fungerar bra för många trådar, men blir då komplex, den löser problemet ömsesidig uteslutning, MEN med busy-wait. Kan vara användbar i vissa system med flera processorer. 21

62 Ömsesidig uteslutning - Semafor - MutexSem mutex = new MutexSem(); class T1 extends Thread { public void run() { while( true) { noncs1(); mutex.take(); cs1(); mutex.give(); class T2 extends Thread { public void run() { while( true) { noncs2(); mutex.take(); cs2(); mutex.give(); 22

63 Ömsesidig uteslutning - Semafor - MutexSem mutex = new MutexSem(); class T1 extends Thread { public void run() { while( true) { noncs1(); mutex.take(); cs1(); mutex.give(); class T2 extends Thread { public void run() { while( true) { noncs2(); mutex.take(); cs2(); mutex.give(); Ömsesidig uteslutning: OK 22

64 Ömsesidig uteslutning - Semafor - MutexSem mutex = new MutexSem(); class T1 extends Thread { public void run() { while( true) { noncs1(); mutex.take(); cs1(); mutex.give(); class T2 extends Thread { public void run() { while( true) { noncs2(); mutex.take(); cs2(); mutex.give(); Ömsesidig uteslutning: OK Inget dödläge: OK 22

65 Ömsesidig uteslutning - Semafor - MutexSem mutex = new MutexSem(); class T1 extends Thread { public void run() { while( true) { noncs1(); mutex.take(); cs1(); mutex.give(); class T2 extends Thread { public void run() { while( true) { noncs2(); mutex.take(); cs2(); mutex.give(); Ömsesidig uteslutning: OK Inget dödläge: OK Inget svält: OK (give() startar upp den blockerade tråden direkt) 22

66 Ömsesidig uteslutning - Semafor - MutexSem mutex = new MutexSem(); class T1 extends Thread { public void run() { while( true) { noncs1(); mutex.take(); cs1(); mutex.give(); class T2 extends Thread { public void run() { while( true) { noncs2(); mutex.take(); cs2(); mutex.give(); Ömsesidig uteslutning: OK Inget dödläge: OK Inget svält: OK (give() startar upp den blockerade tråden direkt) Effektivitet / en tråd: OK. Blockerade trådar sövs (sleep), dvs de använder inte CPUn. 22

67 Ömsesidig uteslutning - Semafor - MutexSem mutex = new MutexSem(); class T1 extends Thread { public void run() { while( true) { noncs1(); mutex.take(); cs1(); mutex.give(); class T2 extends Thread { public void run() { while( true) { noncs2(); mutex.take(); cs2(); mutex.give(); Ömsesidig uteslutning: OK Inget dödläge: OK Inget svält: OK (give() startar upp den blockerade tråden direkt) Effektivitet / en tråd: OK. Blockerade trådar sövs (sleep), dvs de använder inte CPUn. Acceptabelt! 22

68 Semafor - basfakta 23

69 Semafor - basfakta Semaforer utgör en minimal mekanism för ömsesidig uteslutning 23

70 Semafor - basfakta Semaforer utgör en minimal mekanism för ömsesidig uteslutning En semafor är egentligen bara en integer-variabel med två metoder, take() och give(): 23

71 Semafor - basfakta Semaforer utgör en minimal mekanism för ömsesidig uteslutning En semafor är egentligen bara en integer-variabel med två metoder, take() och give(): class SemaphorePrinciple { int count; public void take() { while( count < 1) suspend executing thread // here, currentthread() is used! --count; public void give() { if( any thread suspended ) resume the first one in queue ; count++; 23

72 Semafor - basfakta Semaforer utgör en minimal mekanism för ömsesidig uteslutning En semafor är egentligen bara en integer-variabel med två metoder, take() och give(): class SemaphorePrinciple { int count; public void take() { while( count < 1) suspend executing thread // here, currentthread() is used! --count; public void give() { if( any thread suspended ) resume the first one in queue ; count++; 23

73 Semafor - basfakta Semaforer utgör en minimal mekanism för ömsesidig uteslutning En semafor är egentligen bara en integer-variabel med två metoder, take() och give(): class SemaphorePrinciple { int count; public void take() { while( count < 1) suspend executing thread // here, currentthread() is used! --count; public void give() { if( any thread suspended ) resume the first one in queue ; count++; OBS 1: take och give är odelbara (atomic) operationer, som kräver systemsupport när de ska implementeras (t ex deaktivera hårdvaruinterrupts). 23

74 Semafor - basfakta Semaforer utgör en minimal mekanism för ömsesidig uteslutning En semafor är egentligen bara en integer-variabel med två metoder, take() och give(): class SemaphorePrinciple { int count; public void take() { while( count < 1) suspend executing thread // here, currentthread() is used! --count; public void give() { if( any thread suspended ) resume the first one in queue ; count++; OBS 1: take och give är odelbara (atomic) operationer, som kräver systemsupport när de ska implementeras (t ex deaktivera hårdvaruinterrupts). OBS 2: take blockerar den anropande tråden sålänge count == 0. Detta kan inte implementeras i vanlig Java-kod. 23

75 Typer av semaforer 24

76 Typer av semaforer MutexSem - MutualExclusion semaphore: Den som tar flaggan får jobba med gemensamma resurser, den som vill ha den samtidigt, får vänta (blockeras). 24

77 Typer av semaforer MutexSem - MutualExclusion semaphore: Den som tar flaggan får jobba med gemensamma resurser, den som vill ha den samtidigt, får vänta (blockeras). CountingSem - Counting semaphore, signalling: Den som gör plats / en resurs tillgänglig, signalerar genom att lägga en flagga på högen, den som vill utnyttja en resursplats tar en flagga från högen. Finns inga fria flaggor, måste den som vill ha en vänta. 24

78 Typer av semaforer MutexSem - MutualExclusion semaphore: Den som tar flaggan får jobba med gemensamma resurser, den som vill ha den samtidigt, får vänta (blockeras). CountingSem - Counting semaphore, signalling: Den som gör plats / en resurs tillgänglig, signalerar genom att lägga en flagga på högen, den som vill utnyttja en resursplats tar en flagga från högen. Finns inga fria flaggor, måste den som vill ha en vänta. 24

79 Semaforer vs omvärlden 25

80 Semaforer vs omvärlden Mutual exclusion (MutexSem): Tåg ska köra mellan Malmö och Lund när det för tillfället råder enkelspårsdrift. 25

81 Semaforer vs omvärlden Mutual exclusion (MutexSem): Tåg ska köra mellan Malmö och Lund när det för tillfället råder enkelspårsdrift. Signaling (CountingSem): Check-In på Kastrup: Man väntar i en lång rad och blir tilldelad en fri disk så fort det finns en sådan. 25

82 Semaforer vs omvärlden Mutual exclusion (MutexSem): Tåg ska köra mellan Malmö och Lund när det för tillfället råder enkelspårsdrift. Signaling (CountingSem): Check-In på Kastrup: Man väntar i en lång rad och blir tilldelad en fri disk så fort det finns en sådan. Rendezvous: Last från ett godståg ska lastas om / kopplas om på ett annat tåg utan att något ska lagras. Båda tågen måste alltså stå i omlastningsområdet samtidigt. 25

83 Semaforer vs omvärlden Mutual exclusion (MutexSem): Tåg ska köra mellan Malmö och Lund när det för tillfället råder enkelspårsdrift. Signaling (CountingSem): Check-In på Kastrup: Man väntar i en lång rad och blir tilldelad en fri disk så fort det finns en sådan. Rendezvous: Last från ett godståg ska lastas om / kopplas om på ett annat tåg utan att något ska lagras. Båda tågen måste alltså stå i omlastningsområdet samtidigt. 25

84 Signalera med en sorts signal 26

85 Signalera med en sorts signal Patienten på rummet behöver hjälp och trycker på signalknappen - lampan utanför rummet tänds och larmet i expeditionen går. (signal.give()) 26

86 Signalera med en sorts signal Patienten på rummet behöver hjälp och trycker på signalknappen - lampan utanför rummet tänds och larmet i expeditionen går. (signal.give()) Sjuksköterskan kommer in i rummet och slår av signalen - lampan och larmet släcks och alla utanför vet att problemet åtgärdas - ingen annan behöver eller ska komma och hjälpa. (signal.take()) 26

87 Signalera med en sorts signal Patienten på rummet behöver hjälp och trycker på signalknappen - lampan utanför rummet tänds och larmet i expeditionen går. (signal.give()) Sjuksköterskan kommer in i rummet och slår av signalen - lampan och larmet släcks och alla utanför vet att problemet åtgärdas - ingen annan behöver eller ska komma och hjälpa. (signal.take()) Detta kan hända på flera rum samtidigt, eller med korta mellanrum. Sålänge det finns sjuksköterskor kan de ta över rum efter rum, sen måste kanske en patient vänta lite längre. Om ingen larmar, måste sjuksköterskorna vänta på nästa problem att lösa. (signal.give() + signal.give() + signal.take() + signal.give() + signal.take() + signal.take()) 26

88 Signalera med en sorts signal Patienten på rummet behöver hjälp och trycker på signalknappen - lampan utanför rummet tänds och larmet i expeditionen går. (signal.give()) Sjuksköterskan kommer in i rummet och slår av signalen - lampan och larmet släcks och alla utanför vet att problemet åtgärdas - ingen annan behöver eller ska komma och hjälpa. (signal.take()) Detta kan hända på flera rum samtidigt, eller med korta mellanrum. Sålänge det finns sjuksköterskor kan de ta över rum efter rum, sen måste kanske en patient vänta lite längre. Om ingen larmar, måste sjuksköterskorna vänta på nästa problem att lösa. (signal.give() + signal.give() + signal.take() + signal.give() + signal.take() + signal.take()) 26

89 Signalera med två olika signaler 27

90 Signalera med två olika signaler Chefen och Sekreteraren har ett postfack för att överlämna dokument till varandra, egentligen är det dock bara Sekreteraren som lägger dit dokument, och chefen som hämtar ut dem därifrån. I facket får det enbart ligga ett dokument åt gången. 27

91 Signalera med två olika signaler Chefen och Sekreteraren har ett postfack för att överlämna dokument till varandra, egentligen är det dock bara Sekreteraren som lägger dit dokument, och chefen som hämtar ut dem därifrån. I facket får det enbart ligga ett dokument åt gången. Sekreteraren ser att facket är tomt genom att en tom -lampa lyser på hans kontor. Han går till facket, lägger dit ett dokument som chefen måste signera, och trycker på en knapp som släcker tom -lampan och sedan slår på en det finns ett dokument -lampa på chefens kontor. (free.take() + avail.give()) 27

92 Signalera med två olika signaler Chefen och Sekreteraren har ett postfack för att överlämna dokument till varandra, egentligen är det dock bara Sekreteraren som lägger dit dokument, och chefen som hämtar ut dem därifrån. I facket får det enbart ligga ett dokument åt gången. Sekreteraren ser att facket är tomt genom att en tom -lampa lyser på hans kontor. Han går till facket, lägger dit ett dokument som chefen måste signera, och trycker på en knapp som släcker tom -lampan och sedan slår på en det finns ett dokument -lampa på chefens kontor. (free.take() + avail.give()) Chefen ser lampan, kommer till facket, tar dokumentet, släcker det finns ett dokument - lampan och slår på tom -lampan hos sekreteraren. (avail.take() + free.give()) 27

93 Signalera med två olika signaler Chefen och Sekreteraren har ett postfack för att överlämna dokument till varandra, egentligen är det dock bara Sekreteraren som lägger dit dokument, och chefen som hämtar ut dem därifrån. I facket får det enbart ligga ett dokument åt gången. Sekreteraren ser att facket är tomt genom att en tom -lampa lyser på hans kontor. Han går till facket, lägger dit ett dokument som chefen måste signera, och trycker på en knapp som släcker tom -lampan och sedan slår på en det finns ett dokument -lampa på chefens kontor. (free.take() + avail.give()) Chefen ser lampan, kommer till facket, tar dokumentet, släcker det finns ett dokument - lampan och slår på tom -lampan hos sekreteraren. (avail.take() + free.give()) 27

94 Semaforer - användning i kod Tråd A: Tråd B: Mutual exclusion (ömsesidig uteslutning)... mutex.take(); *** mutex.give(); mutex.take(); *** mutex.give();... Signaling (signalering)... buffer.give(); buffer.take();... Rendezvous *** entry.give(); exit.take(); ***... entry.take(); *** exit.give();... 28

95 Semaforer i Java (Mutex) Deklarera: import se.lth.cs.realtime.semaphore.*; Semaphore mutex1; // inte tydligt om man vill ha en mutex MutexSem mutex2; // bättre. Skapa / initialisera: /*inte så bra:*/ mutex1 = new CountingSem(); mutex1 = new CountingSem(1); /*bättre:*/ mutex2 = new MutexSem(); // tilldelar värdet 0 till count // tilldelar värdet 1 till count // tilldelar 1 (eller true) till intern status Tillämpning: mutex2.take(); amount += change; mutex2.give(); Förutom att det är tydligare, får man bättre felidentifiering och bättre timing om man skapar ömsesidig uteslutning med en MutexSem istf en CountingSem 29

96 Mutex i trådar import se.lth.cs.realtime.semaphore.*; class ThreadTest { public static void main(string[] args) { class RogersThread extends Thread { String thename; Semaphore thesem; Thread t1,t2; Semaphore s; s = new MutexSem(); t1 = new RogersThread("Thread one",s); t2 = new RogersThread("Thread two",s); t1.start(); t2.start(); public RogersThread( String n, Semaphore s){ thename = n; thesem = s; public void run() { thesem.take(); for(int t=1;t<=100;t++) { System.out.println(theName + ":" + t); sleep(1); thesem.give(); 30

97 Signal i trådar import se.lth.cs.realtime.semaphore.*; class ThreadTest { public static void main(string[] args) { class RogersThread extends Thread { String thename; CountingSem mysem, hissem; Thread t1,t2; CountingSem s1, s2; s1 = new CountingSem(1); s2 = new CountingSem(0); t1 = new RogersThread("One",s1, s2); t1.start(); t2 = new RogersThread("Two",s2, s1); t2.start(); public RogersThread( String n, CountingSem s1, CountingSem s2){ thename = n; mysem = s1; hissem = s2; public void run() { for(int t=1;t<=100;t++) { mysem.take(); System.out.println(theName + ":" + t); hissem.give(); sleep(1); 31

98 Objekt och blockering 32

99 Objekt och blockering Trådobjekt (som alltså kan referera till en exekverande tråd) kallas för aktiva objekt. 32

100 Objekt och blockering Trådobjekt (som alltså kan referera till en exekverande tråd) kallas för aktiva objekt. Andra objekt (beskriven genom vanliga Java-klasser), som blir kallade eller drivna genom aktiva objekt (trådar) kallas för passiva objekt. T ex en semafor ;-) 32

101 Objekt och blockering Trådobjekt (som alltså kan referera till en exekverande tråd) kallas för aktiva objekt. Andra objekt (beskriven genom vanliga Java-klasser), som blir kallade eller drivna genom aktiva objekt (trådar) kallas för passiva objekt. T ex en semafor ;-) Semaforer erbjuder blockerande operationer; hur blir de representerade? 32

102 Objekt och blockering Trådobjekt (som alltså kan referera till en exekverande tråd) kallas för aktiva objekt. Andra objekt (beskriven genom vanliga Java-klasser), som blir kallade eller drivna genom aktiva objekt (trådar) kallas för passiva objekt. T ex en semafor ;-) Semaforer erbjuder blockerande operationer; hur blir de representerade? : Exekverande (executing) : Blockerad (blocked) Tråd (aktivt objekt) Semafor (passivt objekt) : möjligen blockerande (potential blocking) 32

103 Sekvens med mutex / blockerade trådar T1 mutex T2 take take give give Anrop till take - give i följd måste komma från samma tråd. Stöds av MutexSem klassen. 33

104 Signalering T1 give give give signal take take take take T2 En tråd kallar take, en annan give. Stöds av CountingSem klassen. 34

105 Rendezvous T1 give entry exit take T2 sync take give sync Säker dataöverföring / manipulation med T1 från T2 under sync-tiden. T1 har exklusiv tillgång till datan genom att hålla i semaforen förutom mellan sitt give och T2s give 35

106 Övning 1 + Övning 2 36

107 Övning 1 + Övning 2 ÖVNINGAR ÄR INGA FÖRELÄSNINGAR - TA MED MATERIALET! 36

108 Övning 1 + Övning 2 ÖVNINGAR ÄR INGA FÖRELÄSNINGAR - TA MED MATERIALET! Övning 1 handlar om semaforer och deras tillämpning 36

109 Övning 1 + Övning 2 ÖVNINGAR ÄR INGA FÖRELÄSNINGAR - TA MED MATERIALET! Övning 1 handlar om semaforer och deras tillämpning Teoretiska uppgifter som ska bearbetas under övningen (var gärna förberedd!) 36

110 Övning 1 + Övning 2 ÖVNINGAR ÄR INGA FÖRELÄSNINGAR - TA MED MATERIALET! Övning 1 handlar om semaforer och deras tillämpning Teoretiska uppgifter som ska bearbetas under övningen (var gärna förberedd!) Laboration 1 introduceras lite kort (mer under övning 2) 36

111 Övning 1 + Övning 2 ÖVNINGAR ÄR INGA FÖRELÄSNINGAR - TA MED MATERIALET! Övning 1 handlar om semaforer och deras tillämpning Teoretiska uppgifter som ska bearbetas under övningen (var gärna förberedd!) Laboration 1 introduceras lite kort (mer under övning 2) Labbgrupper (två studenter vanligtvis) ska bildas 36

112 Övning 1 + Övning 2 ÖVNINGAR ÄR INGA FÖRELÄSNINGAR - TA MED MATERIALET! Övning 1 handlar om semaforer och deras tillämpning Teoretiska uppgifter som ska bearbetas under övningen (var gärna förberedd!) Laboration 1 introduceras lite kort (mer under övning 2) Labbgrupper (två studenter vanligtvis) ska bildas (Praktiska uppgifter som ska lösas vid datorn med hjälp av Eclipse-workspace) 36

113 Övning 1 + Övning 2 ÖVNINGAR ÄR INGA FÖRELÄSNINGAR - TA MED MATERIALET! Övning 1 handlar om semaforer och deras tillämpning Teoretiska uppgifter som ska bearbetas under övningen (var gärna förberedd!) Laboration 1 introduceras lite kort (mer under övning 2) Labbgrupper (två studenter vanligtvis) ska bildas (Praktiska uppgifter som ska lösas vid datorn med hjälp av Eclipse-workspace) 36

114 Övning 1 + Övning 2 ÖVNINGAR ÄR INGA FÖRELÄSNINGAR - TA MED MATERIALET! Övning 1 handlar om semaforer och deras tillämpning Teoretiska uppgifter som ska bearbetas under övningen (var gärna förberedd!) Laboration 1 introduceras lite kort (mer under övning 2) Labbgrupper (två studenter vanligtvis) ska bildas (Praktiska uppgifter som ska lösas vid datorn med hjälp av Eclipse-workspace) Övning 2 är till förberedelse för Laboration 1 (väckarklocka) 36

115 Övning 1 + Övning 2 ÖVNINGAR ÄR INGA FÖRELÄSNINGAR - TA MED MATERIALET! Övning 1 handlar om semaforer och deras tillämpning Teoretiska uppgifter som ska bearbetas under övningen (var gärna förberedd!) Laboration 1 introduceras lite kort (mer under övning 2) Labbgrupper (två studenter vanligtvis) ska bildas (Praktiska uppgifter som ska lösas vid datorn med hjälp av Eclipse-workspace) Övning 2 är till förberedelse för Laboration 1 (väckarklocka) Uppgiften kommer att förklaras lite mera djupgående 36

116 Övning 1 + Övning 2 ÖVNINGAR ÄR INGA FÖRELÄSNINGAR - TA MED MATERIALET! Övning 1 handlar om semaforer och deras tillämpning Teoretiska uppgifter som ska bearbetas under övningen (var gärna förberedd!) Laboration 1 introduceras lite kort (mer under övning 2) Labbgrupper (två studenter vanligtvis) ska bildas (Praktiska uppgifter som ska lösas vid datorn med hjälp av Eclipse-workspace) Övning 2 är till förberedelse för Laboration 1 (väckarklocka) Uppgiften kommer att förklaras lite mera djupgående (Labbgrupper ska bildas, om så inte skett innan) 36

117 Övning 1 + Övning 2 ÖVNINGAR ÄR INGA FÖRELÄSNINGAR - TA MED MATERIALET! Övning 1 handlar om semaforer och deras tillämpning Teoretiska uppgifter som ska bearbetas under övningen (var gärna förberedd!) Laboration 1 introduceras lite kort (mer under övning 2) Labbgrupper (två studenter vanligtvis) ska bildas (Praktiska uppgifter som ska lösas vid datorn med hjälp av Eclipse-workspace) Övning 2 är till förberedelse för Laboration 1 (väckarklocka) Uppgiften kommer att förklaras lite mera djupgående (Labbgrupper ska bildas, om så inte skett innan) Övningstillfället ska utnyttjas till att skapa ett design-förslag till laborationen, som ska granskas både i SPA-uppsättning och av läraren 36

118 Dagens resultat Trådar, kapplöpningsproblem, hantering av gemensamma resurser Semaforer Typer av semaforer Användning av semaforer Man ska kunna lösa uppgifterna till övning 1 och påbörja arbetet med övning 2 / lab1 Lästips: e-bok: delar av Kap 5 (s ) kompendium: Kap 2-1 (Threads) samt 2-2 (Semaphores) 37

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

Realtidssystem. - Semaforer, trådsynkronisering - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 2 Realtidssystem - Semaforer, trådsynkronisering - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp Föreläsning 2 Kursens innehåll motsvarar tidigare omgångar under beteckning EDA698 Stora delar baserad

Läs mer

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

Realtidssystem. - Monitorer, synkroniserade metoder - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp 2015-09-14 Realtidssystem - Monitorer, synkroniserade metoder - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp 2015-09-14 Stora delar baserad på: Föreläsningsmaterial EDA040 (Klas Nilsson, Mathias Haage) samt

Läs mer

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

Realtidssystem. - Introduktion, jämlöpande exekvering - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 1 Realtidssystem - Introduktion, jämlöpande exekvering - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp Föreläsning 1 Stora delar baserad på: Föreläsningsmaterial EDA040 (Klas Nilsson, Mathias Haage)

Läs mer

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

Realtidssystem. - Dödläge - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 5 Realtidssystem - Dödläge - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp Föreläsning 5 Kursens innehåll motsvarar tidigare omgångar under beteckning EDA698 Stora delar baserad på: Föreläsningsmaterial

Läs mer

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

Realtidssystem. - Introduktion, jämlöpande exekvering - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 1 Realtidssystem - Introduktion, jämlöpande exekvering - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp Föreläsning 1 Kursens innehåll motsvarar tidigare omgångar under beteckning EDA698 Stora delar

Läs mer

Tentamen Lösningar EDA698 Realtidssystem

Tentamen Lösningar EDA698 Realtidssystem LUNDS TEKNISKA HÖGSKOLA 1(7) Institutionen för datavetenskap Tentamen Lösningar EDA698 Realtidssystem 13 10 22, 14:00 19:00 1. Prioriteter, korrekthet a) Realtidsproblemet kvarstår. Det finns ingen garanti

Läs mer

Synkronisering. Föreläsning 8

Synkronisering. Föreläsning 8 Synkronisering Föreläsning 8 Synkronisering Så stort, intrikat och viktigt att det finns hela kurser om det i parallellprogrammering. Vi fuskar lite med några av de viktigaste bitarna! Synkronisering Vad

Läs mer

Exam Concurrent and Real-Time Programming

Exam Concurrent and Real-Time Programming 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

Läs mer

Trådar. Aktiva objekt

Trådar. Aktiva objekt Föreläsning 11 Trådar 1 Aktiva objekt Det är välkänt från vardagslivet att saker händer samtidigt. Aktiva objekt gör saker på eget initiativ, medan passiva objekt endast gör saker när de blir ombedda.

Läs mer

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14. Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel

Läs mer

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll 2010-04-22

Översikt 732G11 PROGRAMMERING 1. Personal. Kursens mål. Litteratur. Kursens innehåll 2010-04-22 Översikt 732G11 PROGRAMMERING 1 Institutionen för datavetenskap Om kursen Vad är programmering (bra för)? Programmeringsspråket Java Utvecklingsmiljön Eclipse Genomgång av några programexempel Programmering

Läs mer

SMD 134 Objektorienterad programmering

SMD 134 Objektorienterad programmering SMD 134 Objektorienterad programmering Dagens agenda: Typer i Java: primitiva datatyperna, referenstyper Variabler och variabeltilldelningar med primitiva typer Konstanter av de olika typerna. Heltalsräkning

Läs mer

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

Concurrency Saker händer samtidigt. Process En instans av ett program Concurrency Saker händer samtidigt Hur gör vi flera saker samtidigt på en dator? - Dela på en CPU - Flera CPU Flera processer på en dator. Operativsystemet (OS) tilldelar dem körtid (time slices, prioritet)

Läs mer

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 1 & 2 INTRODUKTION Föreläsning 1 & 2 INTRODUKTION Denna föreläsning Vad händer under kursen? praktisk information Kursens mål vad är programmering? Skriva små program i programspråket Java Skriva program som använder färdiga

Läs mer

Tentamen EDA698 Realtidssystem (Helsingborg)

Tentamen EDA698 Realtidssystem (Helsingborg) 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.

Läs mer

Tentamen OOP 2015-03-14

Tentamen OOP 2015-03-14 Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning

Läs mer

OOP Omtenta 2011-03-05 10.00 15.00

OOP Omtenta 2011-03-05 10.00 15.00 Stockholms universitet 1 (6) OOP OOP Omtenta 2011-03-05 10.00 15.00 Avser kurserna: DSK1:OOP GES:OOP ID1013 Anvisningar Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv

Läs mer

"if"-satsen. Inledande programmering med C# (1DV402)

if-satsen. Inledande programmering med C# (1DV402) "if"-satsen Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll i verket if-satsen

Läs mer

Tentamen EDA698 Realtidssystem (Helsingborg)

Tentamen EDA698 Realtidssystem (Helsingborg) LUNDS TEKNISKA HÖGSKOLA 1(7) Institutionen för datavetenskap Tentamen EDA698 Realtidssystem (Helsingborg) LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Det är tillåtet att använda Java snabbreferens

Läs mer

Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java.

Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java. Laboration 1 Avsikt Att bekanta dig med NetBeans programmeringsmiljö och skriva några enkla program med programmeringsspråket Java. Del 1 Ta fram dokumentet NetBeans5_5.pdf från kurssidan och arbeta med

Läs mer

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h Antalet uppgifter : 2 (20p + 20p = 40 p) ) Lärare, jourhavande lärare :

Läs mer

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

Realtidssystem. - Schemaläggning - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 6 Realtidssystem - Schemaläggning - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp Föreläsning 6 Stora delar baserad på: Föreläsningsmaterial EDA040 (Klas Nilsson, Mathias Haage) samt EDA698 (Mats Lilja)

Läs mer

Laboration 10 - NetBeans

Laboration 10 - NetBeans Laboration 10 - NetBeans Avsikten med laborationen är att du ska träna på att använda paket, att du ska packa några klassfiler i en jar-fil och slutligen använda innehållet i en jar-fil från en annan klass

Läs mer

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Vem är vem på kursen Objektorienterad programvaruutveckling GU (DIT011) Kursansvarig : Katarina Blom, tel 772 10 60 Rum: 6126 (E-huset)

Läs mer

Programmering A. Johan Eliasson johane@cs.umu.se

Programmering A. Johan Eliasson johane@cs.umu.se Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer

Läs mer

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

Att skriva till och läsa från terminalfönstret Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen

Läs mer

Operativsystem - Processkommunikation

Operativsystem - Processkommunikation Operativsystem - Processkommunikation Mats Björkman 2015-01-26 Innehåll Processer (föreläsning 2) Processmodell Processtillstånd Trådar Processkommunikation (föreläsning 3, den här) Semaforer Monitorer

Läs mer

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

Föreläsning 15: Parallella subrutiner. Parallellitet. Varför parallella underprogram? Föreläsning 15: Parallella subrutiner Parallellitet Processer och trådar Semaforer, monitorer och synkroniseringsmeddelanden Parallellitet Ofta är det nödvändigt eller önskvärt att programdelar exekveras

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F9:1 OOP Objekt-orienterad programmering Föreläsning 9 Arv och klasshierarkier Polymorfism OOP F9:2 Djur - String namn - int vikt + String getnamn() + int getvikt() + void ökavikt(int x) Ko - int mjölkvolym

Läs mer

Tentamen, EDAA20/EDA501 Programmering

Tentamen, EDAA20/EDA501 Programmering LUNDS TEKNISKA HÖGSKOLA 1(4) Institutionen för datavetenskap Tentamen, EDAA20/EDA501 Programmering 2011 10 19, 8.00 13.00 Anvisningar: Denna tentamen består av fem uppgifter. Preliminärt ger uppgifterna

Läs mer

Objektorienterad programmering i Java

Objektorienterad programmering i Java Objektorienterad programmering i Java Föreläsning 4 Täcker i stort sett kapitel 6 i kursboken Java Software Solutions 1 Läsanvisningar Den här föreläsningen är uppbyggd som en fortsättning av exemplet

Läs mer

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen Nätverksprogrammering Lösningsförslag 2012 05 28, 8.00 13.00 Del 1 1. Time To Live (TTL) anger hur många routrar ett multicastpaket

Läs mer

Mekanismer. (implementation)

Mekanismer. (implementation) Mekanismer (implementation) Repetition Semafor Räknar tillgängliga resurser Initieras med startvärde Vid förbrukning: väntar tills resurs finns Användning: invänta händelse Lås Markerar att en variabel/datastruktur

Läs mer

Parallellism, återblick

Parallellism, återblick Parallellism, återblick Josef Svenningsson December 11, 2012 Lab7 Det är problem med lab7. Gå med i den grupp som ni använt tidigare. DEMO Flera saker händer samtidigt Ofta hanterar program olika indata

Läs mer

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet ITK:P1 Föreläsning 1 Att programmera i språket Java DSV Peter Mozelius Programmering Olika typer av programmering som t ex: o Imperativ programmering (C, Pascal m fl) o Funktionell programmering (Lisp,

Läs mer

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. 1 (8) DUGGA: Objektorienterade applikationer Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad. Skriv ditt namn, personnummer och e-postadress på försättsbladet. Skriv rent dina svar.

Läs mer

Editering, Kompilering och Exekvering av Javaprogram

Editering, Kompilering och Exekvering av Javaprogram UMEÅ UNIVERSITET Institutionen för informatik B.1, Programmeringens grunder, 5 poäng Editering, Kompilering och Exekvering av Javaprogram Introduktion Syftet med kursmomentet Programmeringens grunder (B.1)

Läs mer

Tentamen. Grundläggande programmering i Java A 5p, DTAA32 2003-03-21

Tentamen. Grundläggande programmering i Java A 5p, DTAA32 2003-03-21 Mitthögskolan ITM Institutionen för Informationsteknologi och medier. Bertil Danielsson 060-14 86 82 Jan-Erik Jonsson 060-14 87 90 Tentamen i Java A Sida 1/6 Tentamen Grundläggande programmering i Java

Läs mer

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1) Föreläsning 10 STRING OCH STRINGBUILDER; VARIABLERS SYNLIGHET Att deklarera och att använda variabler När vi deklarerar en variabel, t ex int x; inför vi en ny variabel med ett namn och en typ. När namnet

Läs mer

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) Grundläggande programmering med C# Provmoment: Ladokkod: Tentamen ges för: 7,5 högskolepoäng TEN1 NGC011 Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga) (Ifylles av student) (Ifylles av student)

Läs mer

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå

Läs mer

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Föreläsning 5 (6) Metoder Metoder Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc Metoder Deklarera public void setnamn(string n) Åtkomstmodifierare Returtyp

Läs mer

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

Realtidssystem. - Schemaläggning - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 6 Realtidssystem - Schemaläggning - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp Föreläsning 6 Kursens innehåll motsvarar tidigare omgångar under beteckning EDA698 Stora delar baserad på: Föreläsningsmaterial

Läs mer

Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas ("inbyggda monitor") synchronized.

Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas (inbyggda monitor) synchronized. 2EMHNWRULHQWHUDG5HDOWLGVSURJUDPPHULQJ Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas ("inbyggda monitor") synchronized. previous next Java Java är konstruerat på

Läs mer

Föreläsnings 9 - Exceptions, I/O

Föreläsnings 9 - Exceptions, I/O Föreläsnings 9 - Exceptions, I/O Josef Svenningsson Tisdag 6/11 Undantag - Exceptions Kommer ni ihåg det här programmet? Det var ett av de första ni såg i första föreläsningen. import javax.swing.*; public

Läs mer

Tentamen i Objektorienterad programmering

Tentamen i Objektorienterad programmering CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA547 Tentamen i Objektorienterad programmering Lördagen 12 mars 2011, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 0762/981014. Inga hjälpmedel. Lösningar

Läs mer

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser?

Dagens program. Programmeringsteknik och Matlab. Vad är arv? Vi ärver från GregorianCalendar. Kan vi bygga vidare på existerande klasser? Programmeringsteknik och Matlab Övning 6 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312

Läs mer

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken. Tentamen Programmeringsteknik I 2015-01-10 Skrivtid: 8.00 13.00 Hjälpmedel: Java-bok Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till

Läs mer

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010) Tid: Onsdagen 15 december 2004, 8:30 till 13:30 Plats: M Ansvarig lärare: Katarina Blom, tel 772 10 60. Läraren besöker tentamen kl

Läs mer

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

Fö 5+6 TSEA81. Real-time kernel + Real-time OS Fö 5+6 TSEA81 Real-time kernel + Real-time OS Stackens användningsområde * JSR / RTS : returadress * Temporärdata (push / pop) void myfunc(void) { int i; // hamnar nog i register int test[10]; // hamnar

Läs mer

Redovisning av inlämningsuppgifter

Redovisning av inlämningsuppgifter Bilaga B Redovisning av inlämningsuppgifter 1 Rapportens innehåll Varje inlämningsuppgift ska redovisas med en skriftlig rapport. Rapporten ska vara häftad och försedd med ett försättsblad med uppgiftens

Läs mer

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

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:

Läs mer

Interaktions- och klassdiagram, kap 12-16 F4 vt -07

Interaktions- och klassdiagram, kap 12-16 F4 vt -07 Interaktions- och klassdiagram, kap 12-16 F4 vt -07 Viktigt i kapitel 13 är bild 13.5 och avsnitten 13.7 och 13.8: De meddelanden som sänds från gränssnittssiktet till domänskiktet är de meddelanden som

Läs mer

Tentamen på kursen DA7351, Programmering 1. 051102, kl 08.15-12.15. Malmö högskola Teknik och samhälle. DA7351, Programmering 1 1 051102

Tentamen på kursen DA7351, Programmering 1. 051102, kl 08.15-12.15. Malmö högskola Teknik och samhälle. DA7351, Programmering 1 1 051102 Tentamen på kursen DA7351, Programmering 1 051102, kl 08.15-12.15 Tillåtna hjälpmedel: Valfri bok om Java. Vid bedömning av lösningarna tas hänsyn till om dessa uppfyller de krav på programkvalitet (strukturering,

Läs mer

Objektorienterad programmering D2

Objektorienterad programmering D2 Objektorienterad programmering D2 Laboration nr 2. Syfte Att få förståelse för de grundläggande objektorienterade begreppen. Redovisning Källkoden för uppgifterna skall skickas in via Fire. För senaste

Läs mer

Sätt att skriva ut binärträd

Sätt att skriva ut binärträd Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer

Läs mer

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

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition. Innehåll The Last Adventure Den sista lektionen Repetition Examination Slutar 14:45 (minnesstund) Många saker "flashar" förbi - hojta Objektorientering Språket Java Class Object Inheritance Polymorphism

Läs mer

Objektorienterad Programkonstruktion. Föreläsning dec 2015

Objektorienterad Programkonstruktion. Föreläsning dec 2015 Objektorienterad Programkonstruktion Föreläsning 12 14 dec 2015 Parallella Problem I program med flera parallella exekveringstrådar kan det uppstå problem, fel och andra fenomen som inte förekommer i enkeltrådade

Läs mer

Dagens OS. Unix, Linux och Windows. Unix. Unix. En översikt av dagens OS Titt på hur de gör. Många varianter Mycket gemensamt. En del som skiljer

Dagens OS. Unix, Linux och Windows. Unix. Unix. En översikt av dagens OS Titt på hur de gör. Många varianter Mycket gemensamt. En del som skiljer Dagens OS En översikt av dagens OS Titt på hur de gör Unix, Linux och Windows Unix Många varianter Mycket gemensamt Unix En del som skiljer Vanliga program, shell, etc System calls Interupts and traps

Läs mer

Grundläggande programmering med C# 7,5 högskolepoäng

Grundläggande programmering med C# 7,5 högskolepoäng Grundläggande programmering med C# 7,5 högskolepoäng Provmoment: TEN1 Ladokkod: NGC011 Tentamen ges för: Omtentamen DE13, IMIT13 och SYST13 samt öppen för alla (Ifylles av student) (Ifylles av student)

Läs mer

Föreläsning 10. ADT:er och datastrukturer

Föreläsning 10. ADT:er och datastrukturer Föreläsning 10 ADT:er och datastrukturer ADT:er och datastrukturer Dessa två begrepp är kopplade till varandra men de står för olika saker. En ADT (abstrakt datatyp) är just abstrakt och är inte kopplad

Läs mer

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: 2014-12-17 Tid: 9.00-12.00 (OBS 3 tim) Rum: V

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: 2014-12-17 Tid: 9.00-12.00 (OBS 3 tim) Rum: V Data och Informationsteknik / Computer Science and Engineering Chalmers University of Technology and University of Gothenburg Erland Holmström Göteborg 16 dec 2014 Examination i PROGRAMMERINGSTEKNIK F1/TM1

Läs mer

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen 20150613, kl. 9.00-12.00 Skolan för datavetenskap och kommunikation Objektorienterad Programkonstruktion, DD1346 FACIT Tentamen 20150613, kl. 9.00-12.00 Tillåtna hjälpmedel: Papper, penna och radergummi. Notera: Frågorna i del

Läs mer

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer. Översikt Klasshierarkier UML klassdiagram Relation mellan klasser mellan klasser och objekt Association ning ing andling Programmering tillämpningar och datastrukturer 2 UML UML Unified Modeling Language

Läs mer

Software Technology. Josef Svenningsson

Software Technology. Josef Svenningsson Software Technology Josef Svenningsson Software Technology Software Technology Området Software Technology handlar i mångt och mycket om följande frågeställning: Hur designar man programmeringsspråk för

Läs mer

Objektsamlingar i Java

Objektsamlingar i Java 1 (6) Objektsamlingar i Java Objektorienterad programmering 3 Syfte Att ge träning i att använda objektsamlingar i Java. Mål Efter övningen skall du kunna använda objektsamlingsklasserna ArrayList och

Läs mer

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning. Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java

Läs mer

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer

Läs mer

OOP Objekt-orienterad programmering

OOP Objekt-orienterad programmering OOP F6:1 OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList tostring() metoden this Vi vill ofta hantera många objekt i ett program: OOP F6:2 public

Läs mer

Mål. Datorteknik. Repetition av avbrott. Innehåll. Mätning och styrning. Datorer för mätning och styrning. timer. Datorsystem A/D. Analog insignal D/A

Mål. Datorteknik. Repetition av avbrott. Innehåll. Mätning och styrning. Datorer för mätning och styrning. timer. Datorsystem A/D. Analog insignal D/A Mål Datorteknik Föreläsning 5 Att du ska förstå hur avbrott används för - Mätning - Styrning - Stöd för körning av fle processer Att du ska förstå begreppet tråd Att du ska veta hur odelba resurser kan

Läs mer

Java TRÅDAR OCH GRAFIK. FAdil galjić

Java TRÅDAR OCH GRAFIK. FAdil galjić Java TRÅDAR OCH GRAFIK FAdil galjić Innehållsförteckning 1 Trådar... 5 Ett program med flera trådar... 6 Operationer på en tråd... 18 Kontrollera en tråds aktivitet... 27 Synkroniserad användning av ett

Läs mer

SMD 134 Objektorienterad programmering

SMD 134 Objektorienterad programmering SMD 134 Objektorienterad programmering Lärare: pl@cdt.luth.se A 3113 Tomas Klockar klockar@sm.luth.se A 3019 Mats Folke folke@sm.luth.se A 3019 Labhandledare: Natasja Saburova Fredrik Jonsson Lars Persson

Läs mer

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm. Algoritmanalys Analys av algoritmer används för att uppskatta effektivitet. Om vi t. ex. har n stycken tal lagrat i en array och vi vill linjärsöka i denna. Det betyder att vi måste leta i arrayen tills

Läs mer

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4: (22 januari 2016 F2.1 ) Föreläsning 2 Täcker material från lektion 1, 2, 3 och 4: Datatyper Aritmetik Tecken och strängar Klasser, Objekt Metoder Villkor, villkorssatser och iterationer main-metoden Kodstandard

Läs mer

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

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl Högskolan Dalarna sid 1 av 6 DI-institutionen Hans-Edy Mårtensson Sten Sundin FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-03-16, kl 14.00-18.00 1. Grunderna i

Läs mer

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga

Läs mer

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

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013 DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013 Innehåll Trådar i Java swing- klassen Timer Klient-Server-program Trådar Tråd = enkel process Ett program kan ha flera trådar, flera

Läs mer

Föreläsning 3: Händelsestyrda program och användargränssnitt

Föreläsning 3: Händelsestyrda program och användargränssnitt (2 september 2015 F3.1 ) Föreläsning 3: Händelsestyrda program och användargränssnitt Idag Från sekventiella till händelsestyrda program Lyssnare Kontroller Layout för ordning av kontroller (2 september

Läs mer

Introduktion till arv

Introduktion till arv Introduktion till arv 6 INTRODUKTION TILL ARV Arv Generell-Speciell Arv för att utnyttja det vi redan gjort Återanvändning Basklass Härledd klass Varför arv? Inför en subklass för att uttrycka specialisering

Läs mer

syftar till att förbättra prestanda. Den kan avse något eller flera av följande mått.

syftar till att förbättra prestanda. Den kan avse något eller flera av följande mått. 71 4. 4.1. Allmänt Vid multiprogrammering kan det vara önskvärt att anpassa systemets beteende till olika tillämpningars behov. En anledning till multiprogrammering var att man önskade öka genomströmningen.

Läs mer

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

Trådar. Motivering. Många program måste kunna hålla på med flera saker samtidigt, till exempel. fleranvändarsystem. Motivering Uppsala Universitet 21 april 2005 Många program måste kunna hålla på med flera saker samtidigt, till exempel fleranvändarsystem en webserver som måste kunna leverera flera websidor samtidigt

Läs mer

OOP Tenta

OOP Tenta Stockholms universitet sid 1 OOP OOP Tenta 2012-01-14 10.00 15.00 Avser kurserna DSK1:OOP och GES:OOP Anvisningar Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt

Läs mer

Tentamen. Lösningsförslag

Tentamen. Lösningsförslag Sida 1/8 Tentamen Grundläggande programmering i Java A 5p, DTAA32 2002-03-22 Lösningsförslag Uppgift 1 ( 3p ) Utskriften blir: Skriv in ett tal 24 47 48 intal=471 Uppgift 2 ( 6p ) a.) b.) c.) d.) e.) falskt

Läs mer

Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/

Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Hashtabeller

Läs mer

Åtkomst och användarhandledning

Åtkomst och användarhandledning Innehållsförteckning Problemspecifikation...1 Åtkomst och användarhandledning...2 Systembeskrivning...3 Lösningens begränsningar...5 Problem och reflektioner...6 Testkörning...7 Bilagor......Källkod...

Läs mer

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag 2001 - aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h Antalet uppgifter : 3 (15p + 20p + 5p = 40 p) Lärare, jourhavande lärare

Läs mer

DELPROV 1 I DATAVETENSKAP

DELPROV 1 I DATAVETENSKAP Umeå Universitet Datavetenskap Marie Nordström 070502 DELPROV 1 I DATAVETENSKAP Uppgift (poäng) 1 () 2 () 3 () 4 () 5 () 6 () Summa (xx) Inlämnad Poäng Kurs : Datum : 070502 Namn (texta) : Personnummer

Läs mer

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap. Institutionen för Datavetenskap Göteborgs universitet HT2008 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 4 Exempel på listor (klassen ArrayList). Ett exempel med fält.

Läs mer

Datorteknik ERIK LARSSON

Datorteknik ERIK LARSSON Datorteknik ERIK LARSSON Inledning Ken Thompson och Dennis M. Ritchie utvecklade C Turingpriset( Nobelpris i datavetenskap ), 1983 Alan Turing (1912-1954) För deras utveckling av generell OS teori och

Läs mer

Tentamen i Realtidsprogrammering

Tentamen i Realtidsprogrammering 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.

Läs mer

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDA501 Programmering M L TM W K V LUNDS TEKNISKA HÖGSKOLA 1(0) Institutionen för datavetenskap Tentamen, EDA501 Programmering M L TM W K V 2010 05 31, 8.00 13.00 Anvisningar: Denna tentamen består av 4 uppgifter. Preliminärt ger uppgifterna

Läs mer

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References, Initialization Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class

Läs mer

OOP Omtenta 2010-03-06 10.00 15.00

OOP Omtenta 2010-03-06 10.00 15.00 Stockholms universitet 1 (6) OOP OOP Omtenta 2010-03-06 10.00 15.00 Avser kurserna: DSK1:OOP GES:OOP ID1013 Anvisningar Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv

Läs mer

Laboration 13, Arrayer och objekt

Laboration 13, Arrayer och objekt Laboration 13, Arrayer och objekt Avsikten med denna laboration är att du ska träna på att använda arrayer. Skapa paketet laboration13 i ditt laborationsprojekt innan du fortsätter med laborationen. Uppgift

Läs mer

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson Fakulteten för ekonomi, kommunikation och IT Corba Datum: 2007-10-17 Namn: Kurs: Henrik Bäck Mathias Andersson DVGC02 Innehållsförteckning Implementation 3 IDL-fil 3 Server 3 Klient 3 Körning 3 Bilagor

Läs mer

Föreläsning 6: Introduktion av listor

Föreläsning 6: Introduktion av listor Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.

Läs mer

Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets

Objektorienterad programmering i Java. Föreläsning 5 Kort om Java-Applets Objektorienterad programmering i Java Föreläsning 5 Kort om Java-Applets 1 Läsanvisningar Den här föreläsningen syftar till att ge en bild av vad en Java-Applet är och är ganska fristående från föregående

Läs mer

Tentamen , Introduktion till Java, dtaa98, dtea53

Tentamen , Introduktion till Java, dtaa98, dtea53 Mittuniversitetet 2007-09-01 Institutionen för informationsteknologi och medier Sid:1(3) dtaa98, dtea53 Martin Kjellqvist; Linda Karlsson, Ulf Reiman Lösningsansatser Tentamen 2007-09-01, Introduktion

Läs mer

Synkronisering. Ordning och reda

Synkronisering. Ordning och reda Synkronisering Ordning och reda Banköverföring struct account { int balance; char* owner; }; struct account account[ NUM_ACCOUNTS ]; bool transfer( int amount, unsigned from, unsigned to ); 2 Banköverföring

Läs mer