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

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

Exam Concurrent and Real-Time Programming

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

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

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

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

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

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

Classes och Interfaces, Objects och References, Initialization

Tentamen Lösningar EDA698 Realtidssystem

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

Tentamen EDA698 Realtidssystem (Helsingborg)

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

Trådar. Aktiva objekt

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

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

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

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

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

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

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

Tentamen i Objektorienterad modellering och design

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

F4. programmeringsteknik och Matlab

Static vs Dynamic binding Override vs Overload. Objekt-orienterad programmering och design Alex Gerdes och Sólrún Halla Einarsdóttir, 2018

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

OOP Objekt-orienterad programmering

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

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

OOP Objekt-orienterad programmering

Föreläsning 17 UTBLICK: FORTSÄTTNINGSKURSER I DATAVETENSKAP + ANDROID

Tentamen i Objektorienterad modellering och design Helsingborg

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

OOP Objekt-orienterad programmering

LÖSNINGSFÖRSLAG

TDDD78 Viktiga begrepp, del 2

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 7/ Exempel: Implementation av Schackpjäser.

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Objektorienterad Programkonstruktion. Föreläsning dec 2015

Föreläsning 13 Innehåll

Tentamen Nätverksprogrammering Lösningsförslag

Föreläsning 11 Aktiva objekt och trådar, strömmar, kommunikation DAT043,

Tentamen EDA698 Realtidssystem (Helsingborg)

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

TENTAMEN OOP

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

Föreläsning 5-6 Innehåll

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Tentamen Nätverksprogrammering Lösningsförslag

Innehåll. 1 Kort om dynamisk polymorfism. 2 Arv i C++ 3 Multipelt arv. 4 Något om statisk polymorfism. class Container {

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Java-syntax (arv) Exempel: public class Crow extends Bird {... } Jämför med Lab 1: public class FirstApp extends Frame {... }

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

Tommy Färnqvist, IDA, Linköpings universitet

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

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

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Klassdeklaration. Metoddeklaration. Parameteröverföring

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Distribuerade affärssystem

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Tentamen Nätverksprogrammering Lösningsförslag

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

DAT043 - Föreläsning 7

Dynamisk bindning och polymorfism

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

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

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Datastrukturer. föreläsning 3. Stacks 1

Föreläsning 3-4 Innehåll

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

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

Föreläsning 2 Datastrukturer (DAT037)

5. En metod som anropar sig själv a) får inte förekomma i Java-program b) kallas destruktiv c) kallas iterativ d) kallas rekursiv 6. Vilka värden har

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Föreläsning 2 Datastrukturer (DAT037)

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

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

Föreläsning 3. Stack

DAT043 - föreläsning 8

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Klasshierarkier - repetition

Programmeringsteknik II - HT18. Föreläsning 6: Grafik och händelsestyrda program med användargränssnitt (och Java-interface) Johan Öfverstedt

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Tentamen. 2D4135 vt 2004 Objektorienterad programmering, design och analys med Java Torsdagen den 3 juni 2004 kl

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen EDA698 Realtidssystem (Helsingborg)

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

Tentamen Nätverksprogrammering Lösningsförslag

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Ingenjörsfirman Stéen Java Sida 1 av 1

Static vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Transkript:

Realtidssystem - Meddelanden och händelsehantering - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp Föreläsning 4 Kursens innehåll motsvarar tidigare omgångar under beteckning EDA698 Stora delar baserad på: Föreläsningsmaterial EDA040 (Klas Nilsson, Mathias Haage) samt EDA698 (Mats Lilja) 1

Innehåll Meddelanden Monitorer som postfack - mailbox Trådkommunikation via mailbox / meddelanden 2

Buffer - en speciell monitor som är en brevlåda 3

Buffer - en speciell monitor som är en brevlåda Monitorer i allmänhet skyddar delade resurser. En speciell monitor är en buffer med metoder post och fetch, som erbjuder en form av kösystem och därmed ett dataflöde 3

Buffer - en speciell monitor som är en brevlåda Monitorer i allmänhet skyddar delade resurser. En speciell monitor är en buffer med metoder post och fetch, som erbjuder en form av kösystem och därmed ett dataflöde Data kan då vara information och/eller synkronisationsmedel 3

Buffer - en speciell monitor som är en brevlåda Monitorer i allmänhet skyddar delade resurser. En speciell monitor är en buffer med metoder post och fetch, som erbjuder en form av kösystem och därmed ett dataflöde Data kan då vara information och/eller synkronisationsmedel Data är då kallad meddelanden (messages) och själva buffer är en brevlåda (mailbox) 3

Buffer - en speciell monitor som är en brevlåda Monitorer i allmänhet skyddar delade resurser. En speciell monitor är en buffer med metoder post och fetch, som erbjuder en form av kösystem och därmed ett dataflöde Data kan då vara information och/eller synkronisationsmedel Data är då kallad meddelanden (messages) och själva buffer är en brevlåda (mailbox) Mellan Java-trådar (dvs inom samma program och minnesram) kan ett meddelande också vara en referens till ett objekt (Object) 3

Buffer - en speciell monitor som är en brevlåda Monitorer i allmänhet skyddar delade resurser. En speciell monitor är en buffer med metoder post och fetch, som erbjuder en form av kösystem och därmed ett dataflöde Data kan då vara information och/eller synkronisationsmedel Data är då kallad meddelanden (messages) och själva buffer är en brevlåda (mailbox) Mellan Java-trådar (dvs inom samma program och minnesram) kan ett meddelande också vara en referens till ett objekt (Object) class Buffer { } //... synchronized void post( Object o){ while( buff.size() >= maxsize) { wait(); } if( buff.isempty()) notifyall(); buff.add( o); } synchronized Object fetch( void){ while( buff.isempty()) { wait(); } if( buff.size() >= maxsize) notifyall(); return buff.remove(s); } 3

Skicka meddelanden - Mailbox 4

Skicka meddelanden - Mailbox Producer-Consumer (producent-konsument)-relationer är vanliga mellan olika trådar av ett program 4

Skicka meddelanden - Mailbox Producer-Consumer (producent-konsument)-relationer är vanliga mellan olika trådar av ett program Asymmetrisk synkronisering / signalering: producenten (producer) måste kunna fortsätta utan att den behöver vänta på konsumenten (consumer) 4

Skicka meddelanden - Mailbox Producer-Consumer (producent-konsument)-relationer är vanliga mellan olika trådar av ett program Asymmetrisk synkronisering / signalering: producenten (producer) måste kunna fortsätta utan att den behöver vänta på konsumenten (consumer) Information / data ska överföras och kallas för meddelande (message) 4

Skicka meddelanden - Mailbox Producer-Consumer (producent-konsument)-relationer är vanliga mellan olika trådar av ett program Asymmetrisk synkronisering / signalering: producenten (producer) måste kunna fortsätta utan att den behöver vänta på konsumenten (consumer) Information / data ska överföras och kallas för meddelande (message) Vi får asynkron kommunikation (signalering och dataöverföring) med lagring av information (buffering) och interaktion mellan aktiviteter (trådar) (activity interaction) 4

Skicka meddelanden - Mailbox Producer-Consumer (producent-konsument)-relationer är vanliga mellan olika trådar av ett program Asymmetrisk synkronisering / signalering: producenten (producer) måste kunna fortsätta utan att den behöver vänta på konsumenten (consumer) Information / data ska överföras och kallas för meddelande (message) Vi får asynkron kommunikation (signalering och dataöverföring) med lagring av information (buffering) och interaktion mellan aktiviteter (trådar) (activity interaction) Dessutom gäller för komplexa system som finns idag: 4

Skicka meddelanden - Mailbox Producer-Consumer (producent-konsument)-relationer är vanliga mellan olika trådar av ett program Asymmetrisk synkronisering / signalering: producenten (producer) måste kunna fortsätta utan att den behöver vänta på konsumenten (consumer) Information / data ska överföras och kallas för meddelande (message) Vi får asynkron kommunikation (signalering och dataöverföring) med lagring av information (buffering) och interaktion mellan aktiviteter (trådar) (activity interaction) Dessutom gäller för komplexa system som finns idag: Distribution (fördelning): Trådar är (eller måste förberedas för att bli) fördelade över flera datorer med nätverkskommunikation emellan dem 4

Skicka meddelanden - Mailbox Producer-Consumer (producent-konsument)-relationer är vanliga mellan olika trådar av ett program Asymmetrisk synkronisering / signalering: producenten (producer) måste kunna fortsätta utan att den behöver vänta på konsumenten (consumer) Information / data ska överföras och kallas för meddelande (message) Vi får asynkron kommunikation (signalering och dataöverföring) med lagring av information (buffering) och interaktion mellan aktiviteter (trådar) (activity interaction) Dessutom gäller för komplexa system som finns idag: Distribution (fördelning): Trådar är (eller måste förberedas för att bli) fördelade över flera datorer med nätverkskommunikation emellan dem Encapsulation (kapsling): Skyddmekanismer för jämlöpande exekvering och realtidsegenskaper kräver medel för utbyte av meddelanden mellan exekverande objekt (trådar) 4

Assistent och chef - producer och consumer Vi vill ha - asymmetrisk synkronisering - producer ska kunna jobba vidare utan att behöva vänta på consumer - överföring av information - ett meddelande (message) 5

Assistent och chef - producer och consumer Vi vill ha - asymmetrisk synkronisering - producer ska kunna jobba vidare utan att behöva vänta på consumer - överföring av information - ett meddelande (message) Hittills har vi kunnat göra detta med monitorer: 5

Assistent och chef - producer och consumer Vi vill ha - asymmetrisk synkronisering - producer ska kunna jobba vidare utan att behöva vänta på consumer - överföring av information - ett meddelande (message) Hittills har vi kunnat göra detta med monitorer: står för metodanrop A (p) put() Postfack / mailbox get() C (c) lägger dokument i inkorgen tar dokument från inkorgen 5

Assistent och chef - producer och consumer Vi vill ha - asymmetrisk synkronisering - producer ska kunna jobba vidare utan att behöva vänta på consumer - överföring av information - ett meddelande (message) Hittills har vi kunnat göra detta med monitorer: står för metodanrop A (p) put() Postfack / mailbox get() C (c) lägger dokument i inkorgen tar dokument från inkorgen Vi inför begreppet Mailbox (brevlåda) när vi använder monitorn så här och ritar den lite annorlunda 5

Assistent och chef - producer och consumer Vi vill ha - asymmetrisk synkronisering - producer ska kunna jobba vidare utan att behöva vänta på consumer - överföring av information - ett meddelande (message) Hittills har vi kunnat göra detta med monitorer: står för metodanrop A (p) put() Postfack / mailbox get() C (c) lägger dokument i inkorgen tar dokument från inkorgen Vi inför begreppet Mailbox (brevlåda) när vi använder monitorn så här och ritar den lite annorlunda Mailbox står för dataflöde A (p) C (c) lägger dokument i inkorgen tar dokument från inkorgen 5

Mailboxar i system Kommunikation mellan trådar leder ofta till ett helt mailbox-nätverk P1 P2 C C1/P1 C2/P2 6

Cafeteria ++ Cafeteria Jag fixar mackorna! Jag vill ha... Idag: - pasta - mackor efter önskemål 7

Cafeteria ++ Cafeteria Beställningar Räkor Jag fixar mackorna! Jag vill ha... Idag: - pasta - mackor efter önskemål 7

Cafeteria ++ Cafeteria Beställningar Skagenröra Jag fixar mackorna! Jag vill ha... Idag: - pasta - mackor efter önskemål (Räkor) 7

Cafeteria ++ Cafeteria Beställningar Skagenröra Ost Jag fixar mackorna! Jag vill ha... Tonfisk Idag: - pasta - mackor efter önskemål Ost Salami Kalkon (Räkor) 7

Cafeteria ++ Cafeteria Beställningar Ost Tonfisk Jag fixar mackorna! Jag vill ha... Ost Idag: - pasta - mackor efter önskemål Salami Kalkon (Skagenröra) 7

Kommunikationsprinciper 8

Kommunikationsprinciper Samma princip gäller både för operativsystemprocesser och trådar inom ett program 8

Kommunikationsprinciper Samma princip gäller både för operativsystemprocesser och trådar inom ett program En tråd kan lägga meddelanden i flera lådor (mailbox) 8

Kommunikationsprinciper Samma princip gäller både för operativsystemprocesser och trådar inom ett program En tråd kan lägga meddelanden i flera lådor (mailbox) En mailbox kan (i Java) hanterar olika typer av meddelanden 8

Kommunikationsprinciper Samma princip gäller både för operativsystemprocesser och trådar inom ett program En tråd kan lägga meddelanden i flera lådor (mailbox) En mailbox kan (i Java) hanterar olika typer av meddelanden En tråd har i de flesta fallen enbart en mailbox den hämtar / läser meddelanden ifrån - annars kan det blir problem, att hämta ett meddelande är blockerande 8

Kommunikationsprinciper Samma princip gäller både för operativsystemprocesser och trådar inom ett program En tråd kan lägga meddelanden i flera lådor (mailbox) En mailbox kan (i Java) hanterar olika typer av meddelanden En tråd har i de flesta fallen enbart en mailbox den hämtar / läser meddelanden ifrån - annars kan det blir problem, att hämta ett meddelande är blockerande Meddelande-objekt måste vara serialized (omvandlat till ett byte-flöde) för att kunna skickas till en annan OS-process 8

Kommunikationsprinciper Samma princip gäller både för operativsystemprocesser och trådar inom ett program En tråd kan lägga meddelanden i flera lådor (mailbox) En mailbox kan (i Java) hanterar olika typer av meddelanden En tråd har i de flesta fallen enbart en mailbox den hämtar / läser meddelanden ifrån - annars kan det blir problem, att hämta ett meddelande är blockerande Meddelande-objekt måste vara serialized (omvandlat till ett byte-flöde) för att kunna skickas till en annan OS-process Inom en process / ett program, alltså mellan trådar, kan vi skicka pekare (pointers) / objektreferenser eller en kopia av hela objektet 8

Kommunikationsprinciper Samma princip gäller både för operativsystemprocesser och trådar inom ett program En tråd kan lägga meddelanden i flera lådor (mailbox) En mailbox kan (i Java) hanterar olika typer av meddelanden En tråd har i de flesta fallen enbart en mailbox den hämtar / läser meddelanden ifrån - annars kan det blir problem, att hämta ett meddelande är blockerande Meddelande-objekt måste vara serialized (omvandlat till ett byte-flöde) för att kunna skickas till en annan OS-process Inom en process / ett program, alltså mellan trådar, kan vi skicka pekare (pointers) / objektreferenser eller en kopia av hela objektet Hur kan man säkerställa att inte innehållet i ett meddelande blir ändrat av en annan tråd...??? 8

Kommunikation mellan trådar/processer Lokal Fördelad Synkron Objekt-metodanrop RPC (C) / RMI (Java) Synkron Monitor-metodanrop Databas Asynkron Händelsebuffer (event buffer) Flöde (stream) (pipe/file/socket) 9

Kommunikation mellan trådar/processer Lokal Fördelad Synkron Objekt-metodanrop RPC (C) / RMI (Java) Synkron Monitor-metodanrop Databas Asynkron Händelsebuffer (event buffer) Flöde (stream) (pipe/file/socket) Synkron hantering av händelser (events): 9

Kommunikation mellan trådar/processer Lokal Fördelad Synkron Objekt-metodanrop RPC (C) / RMI (Java) Synkron Monitor-metodanrop Databas Asynkron Händelsebuffer (event buffer) Flöde (stream) (pipe/file/socket) Synkron hantering av händelser (events): Javas princip för händelsehantering (AWT / Swing) (OBS: en tråd!) - firing events vs posting events 9

Kommunikation mellan trådar/processer Lokal Fördelad Synkron Objekt-metodanrop RPC (C) / RMI (Java) Synkron Monitor-metodanrop Databas Asynkron Händelsebuffer (event buffer) Flöde (stream) (pipe/file/socket) Synkron hantering av händelser (events): Javas princip för händelsehantering (AWT / Swing) (OBS: en tråd!) - firing events vs posting events Motsvarande EventObject för realtid / flertrådiga system: RTEvent 9

Kommunikation mellan trådar/processer Lokal Fördelad Synkron Objekt-metodanrop RPC (C) / RMI (Java) Synkron Monitor-metodanrop Databas Asynkron Händelsebuffer (event buffer) Flöde (stream) (pipe/file/socket) Synkron hantering av händelser (events): Javas princip för händelsehantering (AWT / Swing) (OBS: en tråd!) - firing events vs posting events Motsvarande EventObject för realtid / flertrådiga system: RTEvent Motsvarande synkron händelsehantering i se.lth.cs.realtime: Kolla klassdokumentationen till RTEventListener, RTEventListenerList och JThread 9

Kommunikation mellan trådar/processer Lokal Fördelad Synkron Objekt-metodanrop RPC (C) / RMI (Java) Synkron Monitor-metodanrop Databas Asynkron Händelsebuffer (event buffer) Flöde (stream) (pipe/file/socket) Synkron hantering av händelser (events): Javas princip för händelsehantering (AWT / Swing) (OBS: en tråd!) - firing events vs posting events Motsvarande EventObject för realtid / flertrådiga system: RTEvent Motsvarande synkron händelsehantering i se.lth.cs.realtime: Kolla klassdokumentationen till RTEventListener, RTEventListenerList och JThread Vi pratar INTE enkeltrådig synkron kommunikation i kursen! 9

Händelser som meddelanden 10

Händelser som meddelanden java.util.eventobject erbjuder en händelse-klass som kan användas för meddelanden, där det också är möjligt att få en referens till källan, alltså den skickande tråden / det skickande objektet 10

Händelser som meddelanden java.util.eventobject erbjuder en händelse-klass som kan användas för meddelanden, där det också är möjligt att få en referens till källan, alltså den skickande tråden / det skickande objektet se.lth.cs-realtime.event.rtevent är en subklass som har tidsstämpel, dvs objekten (instanserna) har en ålder (jfr java.awt.inputevent) 10

Händelser som meddelanden java.util.eventobject erbjuder en händelse-klass som kan användas för meddelanden, där det också är möjligt att få en referens till källan, alltså den skickande tråden / det skickande objektet se.lth.cs-realtime.event.rtevent är en subklass som har tidsstämpel, dvs objekten (instanserna) har en ålder (jfr java.awt.inputevent) vi utnyttjar just sådana tidsstämplade händelser (events) för asynkron kommunikation mellan trådar (posting events) - tidsstämpel är en förutsättning för att kunna uppfylla realtidskrav! 10

Händelser som meddelanden java.util.eventobject erbjuder en händelse-klass som kan användas för meddelanden, där det också är möjligt att få en referens till källan, alltså den skickande tråden / det skickande objektet se.lth.cs-realtime.event.rtevent är en subklass som har tidsstämpel, dvs objekten (instanserna) har en ålder (jfr java.awt.inputevent) vi utnyttjar just sådana tidsstämplade händelser (events) för asynkron kommunikation mellan trådar (posting events) - tidsstämpel är en förutsättning för att kunna uppfylla realtidskrav! OBS: jämför med grafikhantering, t ex swing eller andra grafik-bibliotek, som för det mesta sker enkeltrådigt (hela programmet är möjligen flertrådig, medans grafiken hanteras inom en tråd som vanligtvis är applikationens huvudtråd ) 10

Klassen RTEvent public abstract class RTEvent extends EventObject { protected long timestamp; // Creation time in ms. protected volatile transient Object owner; // Responsible thread. public RTEvent(); public RTEvent(Object source); public RTEvent(long ts); public RTEvent(Object source, long ts); public final Object getowner() public double getseconds() public long getmillis() public long getnanos() } // Use current Thread & TimeMillis. // Set source, default timestamp. // Set timestamp, default source // Override both defaults. 11

Mailbox - Monitor - Semafor 12

Mailbox - Monitor - Semafor En Mailbox kan implementeras med en Monitor, och en Semafor kan anses vara den enklaste typen av Monitor (eller användas för att bygga en sådan) 12

Mailbox - Monitor - Semafor En Mailbox kan implementeras med en Monitor, och en Semafor kan anses vara den enklaste typen av Monitor (eller användas för att bygga en sådan) Om vi skickar tomma meddelanden blir en Mailbox till en Semafor: 12

Mailbox - Monitor - Semafor En Mailbox kan implementeras med en Monitor, och en Semafor kan anses vara den enklaste typen av Monitor (eller användas för att bygga en sådan) Om vi skickar tomma meddelanden blir en Mailbox till en Semafor: värdet av räknaren i semaforen motsvarar antalet meddelanden i mailboxen 12

Mailbox - Monitor - Semafor En Mailbox kan implementeras med en Monitor, och en Semafor kan anses vara den enklaste typen av Monitor (eller användas för att bygga en sådan) Om vi skickar tomma meddelanden blir en Mailbox till en Semafor: värdet av räknaren i semaforen motsvarar antalet meddelanden i mailboxen send -metod motsvarar give() 12

Mailbox - Monitor - Semafor En Mailbox kan implementeras med en Monitor, och en Semafor kan anses vara den enklaste typen av Monitor (eller användas för att bygga en sådan) Om vi skickar tomma meddelanden blir en Mailbox till en Semafor: värdet av räknaren i semaforen motsvarar antalet meddelanden i mailboxen send -metod motsvarar give() receive -metod motsvarar take() 12

Mailbox - Monitor - Semafor En Mailbox kan implementeras med en Monitor, och en Semafor kan anses vara den enklaste typen av Monitor (eller användas för att bygga en sådan) Om vi skickar tomma meddelanden blir en Mailbox till en Semafor: värdet av räknaren i semaforen motsvarar antalet meddelanden i mailboxen send -metod motsvarar give() receive -metod motsvarar take() Samtliga tre metoder för resursdelning och kommunikation mellan trådar är alltså likvärdiga och lika mäktiga - valet beror dock på situationen och den omedelbara lämpligheten av en viss metod. Se alla tre laborationer för jämförelse! 12

RTEventBuffer - begränsad lagring 13

RTEventBuffer - begränsad lagring Fördelar med obegränsade lagringskapaciteter 13

RTEventBuffer - begränsad lagring Fördelar med obegränsade lagringskapaciteter varje meddelande allokeras dynamiskt, man måste inte veta storleken etc... 13

RTEventBuffer - begränsad lagring Fördelar med obegränsade lagringskapaciteter varje meddelande allokeras dynamiskt, man måste inte veta storleken etc... kopieringen av meddelanden när de skickas gör att man inte måste hantera delad minne (shared memory), dvs samma mekanism fungerar inom eller mellan OS-processer 13

RTEventBuffer - begränsad lagring Fördelar med obegränsade lagringskapaciteter varje meddelande allokeras dynamiskt, man måste inte veta storleken etc... kopieringen av meddelanden när de skickas gör att man inte måste hantera delad minne (shared memory), dvs samma mekanism fungerar inom eller mellan OS-processer erbjuder full asymmetrisk synkronisation - meddelanden hanteras när trådarna behöver göra det 13

RTEventBuffer - begränsad lagring Fördelar med obegränsade lagringskapaciteter varje meddelande allokeras dynamiskt, man måste inte veta storleken etc... kopieringen av meddelanden när de skickas gör att man inte måste hantera delad minne (shared memory), dvs samma mekanism fungerar inom eller mellan OS-processer erbjuder full asymmetrisk synkronisation - meddelanden hanteras när trådarna behöver göra det När det inte finns GC tillgänglig, blir obegränsad oftast till en form av pool -hantering, då meddelanden återanvänds 13

RTEventBuffer - begränsad lagring Fördelar med obegränsade lagringskapaciteter varje meddelande allokeras dynamiskt, man måste inte veta storleken etc... kopieringen av meddelanden när de skickas gör att man inte måste hantera delad minne (shared memory), dvs samma mekanism fungerar inom eller mellan OS-processer erbjuder full asymmetrisk synkronisation - meddelanden hanteras när trådarna behöver göra det När det inte finns GC tillgänglig, blir obegränsad oftast till en form av pool -hantering, då meddelanden återanvänds Nackdel med obegränsade lagringskapaciteter 13

RTEventBuffer - begränsad lagring Fördelar med obegränsade lagringskapaciteter varje meddelande allokeras dynamiskt, man måste inte veta storleken etc... kopieringen av meddelanden när de skickas gör att man inte måste hantera delad minne (shared memory), dvs samma mekanism fungerar inom eller mellan OS-processer erbjuder full asymmetrisk synkronisation - meddelanden hanteras när trådarna behöver göra det När det inte finns GC tillgänglig, blir obegränsad oftast till en form av pool -hantering, då meddelanden återanvänds Nackdel med obegränsade lagringskapaciteter Inte riktigt bra när det krävs ett omedelbart svar, dvs synkron kommunikation 13

RTEventBuffer - begränsad lagring Fördelar med obegränsade lagringskapaciteter varje meddelande allokeras dynamiskt, man måste inte veta storleken etc... kopieringen av meddelanden när de skickas gör att man inte måste hantera delad minne (shared memory), dvs samma mekanism fungerar inom eller mellan OS-processer erbjuder full asymmetrisk synkronisation - meddelanden hanteras när trådarna behöver göra det När det inte finns GC tillgänglig, blir obegränsad oftast till en form av pool -hantering, då meddelanden återanvänds Nackdel med obegränsade lagringskapaciteter Inte riktigt bra när det krävs ett omedelbart svar, dvs synkron kommunikation Någonstans finns det en faktisk begränsning av resurserna 13

RTEventBuffer - begränsad lagring Fördelar med obegränsade lagringskapaciteter varje meddelande allokeras dynamiskt, man måste inte veta storleken etc... kopieringen av meddelanden när de skickas gör att man inte måste hantera delad minne (shared memory), dvs samma mekanism fungerar inom eller mellan OS-processer erbjuder full asymmetrisk synkronisation - meddelanden hanteras när trådarna behöver göra det När det inte finns GC tillgänglig, blir obegränsad oftast till en form av pool -hantering, då meddelanden återanvänds Nackdel med obegränsade lagringskapaciteter Inte riktigt bra när det krävs ett omedelbart svar, dvs synkron kommunikation Någonstans finns det en faktisk begränsning av resurserna RTEventBuffer 13

RTEventBuffer - begränsad lagring Fördelar med obegränsade lagringskapaciteter varje meddelande allokeras dynamiskt, man måste inte veta storleken etc... kopieringen av meddelanden när de skickas gör att man inte måste hantera delad minne (shared memory), dvs samma mekanism fungerar inom eller mellan OS-processer erbjuder full asymmetrisk synkronisation - meddelanden hanteras när trådarna behöver göra det När det inte finns GC tillgänglig, blir obegränsad oftast till en form av pool -hantering, då meddelanden återanvänds Nackdel med obegränsade lagringskapaciteter Inte riktigt bra när det krävs ett omedelbart svar, dvs synkron kommunikation Någonstans finns det en faktisk begränsning av resurserna RTEventBuffer Realtidssystem - det krävs ofta också bra koll på resurserna, en obegränsad Mailbox med kopiering-vid-sändning skulle inte kunna garanteras hålla måttet - och garanti är just det som ett realtidssystem kräver 13

RTEventBuffer - begränsad lagring Fördelar med obegränsade lagringskapaciteter varje meddelande allokeras dynamiskt, man måste inte veta storleken etc... kopieringen av meddelanden när de skickas gör att man inte måste hantera delad minne (shared memory), dvs samma mekanism fungerar inom eller mellan OS-processer erbjuder full asymmetrisk synkronisation - meddelanden hanteras när trådarna behöver göra det När det inte finns GC tillgänglig, blir obegränsad oftast till en form av pool -hantering, då meddelanden återanvänds Nackdel med obegränsade lagringskapaciteter Inte riktigt bra när det krävs ett omedelbart svar, dvs synkron kommunikation Någonstans finns det en faktisk begränsning av resurserna RTEventBuffer Realtidssystem - det krävs ofta också bra koll på resurserna, en obegränsad Mailbox med kopiering-vid-sändning skulle inte kunna garanteras hålla måttet - och garanti är just det som ett realtidssystem kräver GC och Javas objekthanteringsmekanismer tillåter att man kan skicka objektreferenser till delad minne istället för att skicka djupa kopior av objekt. Det gör att storleken av meddelanden kan vara flexibelt även med en fast storlek på lagringen (Mailbox) 13

RTEventBuffer - begränsad lagring Fördelar med obegränsade lagringskapaciteter varje meddelande allokeras dynamiskt, man måste inte veta storleken etc... kopieringen av meddelanden när de skickas gör att man inte måste hantera delad minne (shared memory), dvs samma mekanism fungerar inom eller mellan OS-processer erbjuder full asymmetrisk synkronisation - meddelanden hanteras när trådarna behöver göra det När det inte finns GC tillgänglig, blir obegränsad oftast till en form av pool -hantering, då meddelanden återanvänds Nackdel med obegränsade lagringskapaciteter Inte riktigt bra när det krävs ett omedelbart svar, dvs synkron kommunikation Någonstans finns det en faktisk begränsning av resurserna RTEventBuffer Realtidssystem - det krävs ofta också bra koll på resurserna, en obegränsad Mailbox med kopiering-vid-sändning skulle inte kunna garanteras hålla måttet - och garanti är just det som ett realtidssystem kräver GC och Javas objekthanteringsmekanismer tillåter att man kan skicka objektreferenser till delad minne istället för att skicka djupa kopior av objekt. Det gör att storleken av meddelanden kan vara flexibelt även med en fast storlek på lagringen (Mailbox) detaljer i kompendiet! 13

Klassen RTEventBuffer ), ) [4] [3] [2] growth [1] [5] [6] fetchat RTEvent[] buffer currsize==7 [0] [11] [7] postat [10] [8] [9] 14

Klassen RTEventBuffer RTEventBuffer: En mailbox för hantering av meddelanden av typ RTEvent ), ) [5] [6] [4] [3] [2] fetchat RTEvent[] buffer currsize==7 growth [1] [0] [11] [7] postat [10] [8] [9] 14

Klassen RTEventBuffer RTEventBuffer: En mailbox för hantering av meddelanden av typ RTEvent Konstruktorer: public RTEventBuffer() public RTEventBuffer( int maxsize) public RTEventBuffer( int maxsize, Object lock) ), ) [5] [6] [4] [3] [2] fetchat RTEvent[] buffer currsize==7 growth [1] [0] [11] [7] postat [10] [8] [9] 14

Klassen RTEventBuffer RTEventBuffer: En mailbox för hantering av meddelanden av typ RTEvent Konstruktorer: public RTEventBuffer() public RTEventBuffer( int maxsize) public RTEventBuffer( int maxsize, Object lock) Exempel med maxsize == 12, currsize == 7 ), ) [5] [6] [4] [3] [2] fetchat RTEvent[] buffer currsize==7 growth [1] [0] [11] [7] postat [10] [8] [9] 14

Klassen RTEventBuffer RTEventBuffer: En mailbox för hantering av meddelanden av typ RTEvent Konstruktorer: public RTEventBuffer() public RTEventBuffer( int maxsize) public RTEventBuffer( int maxsize, Object lock) Exempel med maxsize == 12, currsize == 7 ), ) [5] [6] [4] [3] [2] fetchat RTEvent[] buffer currsize==7 growth [1] [0] [11] Hämta meddelande ur lådan: RTEvent fetch() [7] postat [10] [8] [9] 14

Klassen RTEventBuffer RTEventBuffer: En mailbox för hantering av meddelanden av typ RTEvent Konstruktorer: public RTEventBuffer() public RTEventBuffer( int maxsize) public RTEventBuffer( int maxsize, Object lock) Exempel med maxsize == 12, currsize == 7 ), ) [5] [6] [4] [3] [2] fetchat RTEvent[] buffer currsize==7 growth [1] [0] [11] Hämta meddelande ur lådan: RTEvent fetch() [7] postat [10] Skicka meddelande till lådan: RTEvent post( RTEvent ev) [8] [9] 14

Metoder i RTEventBuffer 15

Metoder i RTEventBuffer Metoder för att skicka eller hämta meddelanden av typ RTEvent: 15

Metoder i RTEventBuffer Metoder för att skicka eller hämta meddelanden av typ RTEvent: RTEvent post( RTEvent e) // standard: kalla dopost() // och returnera null void dopost( RTEvent e) // blockerande final RTEvent trypost( RTEvent e) // ej blockerande final RTEvent dofetch() // blockerande final RTEvent tryfetch() // ej blockerande 15

Metoder i RTEventBuffer Metoder för att skicka eller hämta meddelanden av typ RTEvent: RTEvent post( RTEvent e) // standard: kalla dopost() // och returnera null void dopost( RTEvent e) // blockerande final RTEvent trypost( RTEvent e) // ej blockerande final RTEvent dofetch() // blockerande final RTEvent tryfetch() // ej blockerande trypost ger null om uppdraget lyckades, annars kommer meddelandet tillbaka (jfr bounce because of overflow i din e-post-brevlåda) tryfetch ger null om uppdraget misslyckades, eller ger meddelandet som kunde hämtas 15

Metoder i RTEventBuffer Metoder för att skicka eller hämta meddelanden av typ RTEvent: RTEvent post( RTEvent e) // standard: kalla dopost() // och returnera null void dopost( RTEvent e) // blockerande final RTEvent trypost( RTEvent e) // ej blockerande final RTEvent dofetch() // blockerande final RTEvent tryfetch() // ej blockerande trypost ger null om uppdraget lyckades, annars kommer meddelandet tillbaka (jfr bounce because of overflow i din e-post-brevlåda) tryfetch ger null om uppdraget misslyckades, eller ger meddelandet som kunde hämtas Kolla status: 15

Metoder i RTEventBuffer Metoder för att skicka eller hämta meddelanden av typ RTEvent: RTEvent post( RTEvent e) // standard: kalla dopost() // och returnera null void dopost( RTEvent e) // blockerande final RTEvent trypost( RTEvent e) // ej blockerande final RTEvent dofetch() // blockerande final RTEvent tryfetch() // ej blockerande trypost ger null om uppdraget lyckades, annars kommer meddelandet tillbaka (jfr bounce because of overflow i din e-post-brevlåda) tryfetch ger null om uppdraget misslyckades, eller ger meddelandet som kunde hämtas Kolla status: boolean isempty() boolean isfull() void awaitempty() void awaitnotempty() void awaitfull() void awaitnotfull() 15

Metoder i RTEventBuffer Metoder för att skicka eller hämta meddelanden av typ RTEvent: RTEvent post( RTEvent e) // standard: kalla dopost() // och returnera null void dopost( RTEvent e) // blockerande final RTEvent trypost( RTEvent e) // ej blockerande final RTEvent dofetch() // blockerande final RTEvent tryfetch() // ej blockerande trypost ger null om uppdraget lyckades, annars kommer meddelandet tillbaka (jfr bounce because of overflow i din e-post-brevlåda) tryfetch ger null om uppdraget misslyckades, eller ger meddelandet som kunde hämtas Kolla status: boolean isempty() boolean isfull() void awaitempty() void awaitnotempty() void awaitfull() void awaitnotfull() Mer i kompendiet och dokumentationen av se.lth.cs.realtime 15

Trådar med mailbox - exempel 16

Trådar med mailbox - exempel class Producer extends Thread { Consumer receiver; MyMessage msg; public Producer( Consumer rec) { receiver = rec; } } public void run() { while( true) { char c = getchar(); msg = new MyMessage( c); receiver.putevent( msg); } } class MyMessage extends RTEvent { character ch; public MyMessage( char data) { } super(); ch = data; // timestamp! 16

Trådar med mailbox - exempel class Producer extends Thread { Consumer receiver; MyMessage msg; public Producer( Consumer rec) { receiver = rec; } } public void run() { while( true) { char c = getchar(); msg = new MyMessage( c); receiver.putevent( msg); } } class MyMessage extends RTEvent { character ch; public MyMessage( char data) { } super(); ch = data; // timestamp! class Consumer extends Thread { RTEventBuffer mailbox; public Consumer( int size) { mailbox = new RTEventBuffer( size); } public void putevent( RTEvent ev) { mailbox.post( ev); // in context of producer! } } public void run() { RTEvent m; while( true) { m = mailbox.fetch(); // in context of consumer! if( m instanceof MyMessage) { MyMessage msg = (MyMessage) m; usechar( msg.ch); } else { //... handle other messages } } //... 16

Trådar med mailbox - exempel class Producer extends Thread { Consumer receiver; MyMessage msg; public Producer( Consumer rec) { receiver = rec; } } public void run() { while( true) { char c = getchar(); msg = new MyMessage( c); receiver.putevent( msg); } } class MyMessage extends RTEvent { character ch; public MyMessage( char data) { } super(); ch = data; // timestamp! class Consumer extends Thread { RTEventBuffer mailbox; public Consumer( int size) { mailbox = new RTEventBuffer( size); } public void putevent( RTEvent ev) { mailbox.post( ev); // in context of producer! } } public void run() { RTEvent m; while( true) { m = mailbox.fetch(); // in context of consumer! if( m instanceof MyMessage) { MyMessage msg = (MyMessage) m; usechar( msg.ch); } else { //... handle other messages } } //... se.lth.cs.realtime erbjuder olika typer av trådar som har en mailbox (RTEventBuffer) inbyggd och som kan alltså kommunicera via RTEvent-meddelanden Se kompendiet, övning 5 och laboration 3 för detaljer 16

Kursöversikt - var är vi nu? Realtidssystem - jämlöpande processer under tidsgarantikrav (Föreläsning 1) Jämlöpande exekvering, trådhantering, hantering av delade resurser ömsesidig uteslutning, signalering, datahantering, trådkommunikation semafor: föreläsning 1, 2 övning 1, 2 laboration 1 Tidskrav, systemhantering, schemaläggning resursallokering, schemaläggning, prioritetshantering schemaläggningsanalys dödläge: föreläsning 5 övning 5 monitor: föreläsning 3 övning 3, 4 laboration 2 schemaläggning + analys: föreläsning 6, 7 övning 7 mailbox: föreläsning 4 övning 5, 6 laboration 3 17

Laboration 2, förberedelse 18

Laboration 2, förberedelse Förberedelse inför laboration 2 (hiss) 18

Laboration 2, förberedelse Förberedelse inför laboration 2 (hiss) Uppgiften förklaras lite mera ingående 18

Laboration 2, förberedelse Förberedelse inför laboration 2 (hiss) Uppgiften förklaras lite mera ingående Vi tittar på wait / notify! 18

Laboration 2, förberedelse Förberedelse inför laboration 2 (hiss) Uppgiften förklaras lite mera ingående Vi tittar på wait / notify! Målet är att bygga ett designförslag (klass-diagram + flöde för trådarnas operationer i monitorn) för laborationsprogrammet 18

Sammanfattning Recap monitorer Mailbox, meddelanden och händelsehantering för trådkommunikation och informationsutbyte Man borde kunna bygga ett litet program med några trådar som kommunicerar med hjälp av mailboxar och kunna hantera laboration 3. Man borde kunna resonera över vilken mekanism ( fristående semaforer, monitorer, både Java-monitorer eller hembakade, eller trådbunden mailbox) som passar bra i vilka situationer och tänka ut mindre exempel för varje Lästips: e-bok: Kap 6 (s 142-157) kompendium: Kap 2-4 ( Mailboxes) 19