Studiewijzer ESWE1C1 (Real-time Embedded Programming) en ESWE1P1 (Practicum
Distributed and Real-time Programming).
© Harry Broeders.
onderwijsdeel: |
Real-time Embedded Programming
Practicum Distributed and Real-time Programming |
onderwijseenheid: |
ESWE1 |
code onderwijsdelen |
ESWE1C1 en ESWE1P1 |
studiebelasting: |
56 + 42 = 98 SBU |
semester / kwartaal: |
H4C&D / 1 |
contacturen: |
2 uur/week college en 2 uur/week practicum |
toetsing: |
tentamen (cijfer) en practicumbeoordeling (O/V) |
benodigde voorkennis: |
H3C&D. Vooral inleiding operating systemen en de programmeer vakken. |
verantwoordelijke docent: |
Harry Broeders |
Inleiding
Bij het onderwijsdeel Real-Time Embedded Programming wordt ingegaan op de
implementatie van software voor Real-Time Embedded systemen. Bij de implementatie
kun je gebruik maken van speciale "real-time" programmeertalen of van "gewone"
programmeertalen in combinatie met een "real-time" operating system. Als
voorbeeld van een real-time programmeertaal wordt RT-Java gebruikt en als
voorbeeld van een real-time OS wordt QNX gebruikt. QNX is compatible met
de POSIX standaard voor real-time operating systems.
De volgende onderwerpen komen aan de orde:
-
Introductie real-time systemen. Verschillende definities van real-time systemen,
de karakteristieke eigenschappen van real-time systemen en enkele voorbeelden
van real-time systemen.
-
Concurrent programming. Processes en threads. Wat zijn de verschillen? Wanneer
gebruik je ze? Hoe gebruik je ze in POSIX en in RT-Java.
-
Snelcursus Java waarbij vooral wordt ingegaan op de verschillen met C++ en
concurrent programmeren in Java.
-
Synchronisatie en communicatie via gemeenschappelijk geheugen. Mutex, semaphores,
conditional critical regions, monitors, protected objects en synchronised
class methods.
-
Synchronisatie en communicatie via berichten. POSIX messages, distributed
messages bij QNX en remote procedure calls.
-
Tijd. Time of day, tijdvertragingen, time-outs, tijdsynchronisatie.
-
Scheduling. Verschil tussen scheduling in general purpose en in real-time
OS. Verschillende vormen van real-time scheduling waaronder fixed priority
scheduling. Verschillende manieren om prioriteiten aan taken toe te kennen:
rate monetonic priority assignment en deadline monetonic priority assignment.
Het priority inversion probleem en de oplossingen daarvoor: priority inheritance,
original ceiling priority protocol en immediate ceiling priority protocol.
-
Berekenen van blocking tijden en response tijden bij de hiervoor genoemde
scheduling methoden.
Globale leerdoelen
Als je dit onderwijsdeel met een voldoende hebt afgesloten:
-
Ken je de verschillende definities van real-time systemen, de karakteristieke
eigenschappen van real-time systemen en enkele voorbeelden van real-time
systemen.
-
Ken je het verschil tussen processes en threads, weet je wanneer ze te gebruiken
en kun je ze gebruiken zowel in POSIX als in RT-Java.
-
Ken je de verschillen tussen C++ en Java.
-
Kun je een concurrent programma in Java implementeren.
-
Ken je de voor- en nadelen van de synchronisatie via gemeenschappelijk geheugen
versus synchronisatie via berichten.
-
Kun je verschillende vormen van synchronisatie en communicatie via
gemeenschappelijk geheugen toepassen, te weten: Mutex, semaphores, conditional
critical regions, monitors, protected objects en synchronised class methods.
-
Kun je verschillende vormen van synchronisatie en communicatie via berichten
toepassen, te weten: POSIX messages en distributed messages bij QNX.
-
Kun je tijdvertragingen en tijdsynchronisatie toepassen in real-time systemen.
-
Ken je de verschillen tussen scheduling in een general purpose en in een
real-time OS.
-
Ben je bekend met verschillende vormen van real-time scheduling.
-
Weet je hoe je prioriteiten aan taken moet toekennen.
-
Ken je het priority inversion probleem en de oplossingen daarvoor.
-
Kun je blocking en response tijden uitrekenen.
Literatuur
Real-Time Systems and
Programming Languages (Third Edition), Alan Burns and Andy Wellings,
ISBN: 0201729881
Getting started with QNX
Neutino 2, Robert Krten, ISBN: (kun je bij mij lenen)
Toetsing en beoordeling.
Er worden voor deze onderwijsdelen twee deelresultaten vastgesteld waarbij
het eerste resultaat (tentamen) een cijfer (1..10) is en het tweede resultaat
(practicum) een O(nvoldoende) of V(oldoende) is. Het cijfer telt voor 35%
mee in het eindresultaat van ESWE1. Als het practicum onvoldoende is wordt
het eindresultaat van ESWE1 een 1. Bij het tentamen mag je boeken gebruiken.
Het tentamen bestaat uit open vragen.
Het practicum wordt beoordeeld met Onvoldoende of Voldoende. Alle opdrachten
worden afzonderlijk beoordeeld met een voldoende of onvoldoende aan de hand
van:
-
een demonstratie om de juiste werking aan te tonen.
-
een inhoudelijk gesprek over opzet en uitvoering van de implementatie. Tijdens
dit gesprek zal de docent enkele vragen stellen over de manier van aanpak
en/of de werking van het programma. Als je deze vragen (over je eigen programma)
niet kunt beantwoorden dan krijg je onvoldoende! Als bij jou een opdracht
met onvoldoende wordt beoordeeld krijg je 1 keer de kans een vervangende
opdracht te maken.
Om het practicum met een voldoende af te sluiten moeten alle opdrachten
voldoende zijn.
Globale weekplanning theorie.
Let op! Deze planning kan tijdens het geven van deze
onderwijsmodule nog worden aangepast!
Onderwerpen uit het boek die het bestuderen waard zijn maar waar we niet
aan zijn toegekomen:
-
H5 Reliability and fault tolerance.
-
H6 Exceptions and exception handling.
-
H10. Atomic actions, concurrent processes and reliability.
-
H11. Resource control.
-
H15. Low level programming.
Globale planning practicum.
Alle practicumopdrachten worden uitgevoerd door teams van 2 studenten. Je
mag zelf een "partner" kiezen.
Gedetailleerde planning theorie.
Let op! Deze planning kan tijdens het geven van deze
onderwijsmodule nog worden aangepast!
Les 1. Introductie.
-
Sheets: 1 t/m 9.
-
Extra leesvoer:
-
Boek: hoofdstuk 1 en 2:
-
hoofdstuk 1 bestuderen.
De definitie van een real-time systeem, enkele voorbeelden en de
kenmerkende karakteristieken van real-time systemen.
-
hoofdstuk 2 t/m 2.4 overslaan.
Komt in kwartaal 2 bij ESWE1C3 aan de orde.
-
2.5 bestuderen.
Het implementeren van real-time systemen.
-
2.6 bestuderen.
Het testen van real-time systemen.
-
2.7 t/m 2.9 overslaan.
Komt in kwartaal 2 bij ESWE1C3 aan de orde.
Les 2. Concurrent programming met de nadruk op threads.
-
Sheets: 10 t/m 20.
-
Boek: hoofdstuk 7:
-
hoofdstuk 7 t/m 7.3.4 bestuderen.
Inleiding processen en threads.
-
7.3.5 overslaan.
Occam wordt in de praktijk niet veel gebruikt.
-
7.3.6 overslaan.
Ada wordt in Europa niet veel gebruikt.
-
7.3.7 nu overslaan.
Komt in een van de volgende lessen aan de orde.
-
7.3.8 overslaan.
-
Programma's:
-
Extra leesvoer:
Les 3. Pthreads en shared variabele-based
synchronisation.
-
Sheets: 21 t/m 34.
-
Boek: hoofdstuk 7:
-
7.3.9 bestuderen.
Threads in POSIX. Komt ook op het practicum aan de orde. Zie voor meer info:
-
7.4 nu overslaan.
Komt in een van de volgende lessen aan de orde.
-
Boek: hoofdstuk 8:
-
Inleiding, 8.1 en 8.2 bestuderen.
De problemen bij gedeelde variabelen, de noodzaak tot synchronisatie en de
oplossing met behulp van busy waiting zijn allemaal al bij inleiding operating
systems in semester H3 besproken.
-
8.3 overslaan.
Het gebruik van suspend en resume lost wel het efficiency probleem van busy
waiting op maar leidt tot critical races en is dus niet veilig.
-
8.4 t/m 8.4.4 bestuderen.
Semaphoren zijn al besproken bij inleiding operating systems in semester
H3.
-
8.4.5 overslaan.
-
8.4.6 bestuderen.
Semaphoren in POSIX. Komt ook op het practicum aan de orde.
-
8.4.7 bestuderen.
Kritiek op semaphoren.
-
8.5 bestuderen.
CCRs zijn een "opstapje" naar monitors.
-
8.6 tot 8.6.1 bestuderen.
Monitors.
-
8.6.1 overslaan.
Modula 1 wordt niet veel gebruikt.
-
8.6.2 overslaan.
Mesa wordt niet veel gebruikt.
-
8.6.3 bestuderen.
POSIX mutex en conditionele variabelen.
-
8.6.4 bestuderen.
Genest aanroepen van monitors.
-
8.6.5 bestuderen.
Kritiek op monitors.
-
8.7 overslaan.
Protected objects worden in Ada gebruikt.
-
8.8 nu overslaan.
Komt in een van de volgende lessen aan de orde.
-
Programma's:
Les 4. Van C++ naar Java (deel 1).
-
Sheets: 35 t/m 49.
-
Extra studiemateriaal (online boeken):
-
Ontwikkelomgeving:
-
Java 2 SDK Standard Edition version 6:
http://java.sun.com/javase/
-
Alternatieve (ook) gratis IDE's (Integrated Development Environments):
-
IBM J9 voor QNX:
-
Programma's:
Les 5. Van C++ naar Java (deel 2).
-
Sheets: 50 t/m 60, 70 t/m 72. (61 t/m 69
en 73 t/m 80 zelf bestuderen).
-
Boek: hoofdstuk 4:
-
4.4.2 bestuderen.
OOP en Java.
-
4.4.3 bestuderen.
Inheritance and Java.
-
4.4.4 bestuderen.
The Object
class.
-
4.5.2 bestuderen.
Interfaces in Java.
-
Programma's:
Les 6. Concurrent programming in Java (deel 1).
-
Sheets: 81 t/m 90.
-
Extra studiemateriaal:
-
Boek: hoofdstuk 7:
-
7.3.7 bestuderen. Concurrent execution in Java.
-
Boek: hoofdstuk 8:
-
8.8 tot 8.8.1 bestuderen.
Synchronized methods.
-
Programma's:
Les 7. Concurrent programming in Java (deel 2).
-
Sheets: 91 t/m 102.
-
Extra leesvoer:
-
Boek: hoofdstuk 8:
-
8.8.1 bestuderen.
wait
, notify
en notifyAll
.
-
8.8.2. zelf bestuderen.
Inheritance and synchronisation.
-
Java 5 heeft vele nieuwe classes voor concurrent programmeren in Java toegevoegd
(onder andere semaphore, mutex en barier) hierdoor groeien concurrent
programmeren in POSIX en concurrent programmeren in Java naar elkaar toe.
Zie:
Concurrency
utilities overview.
Nieuwe classes zijn:
-
BlockingQueue
een volledige implementatie van een bounded buffer. Met behulp van deze nieuwe
class kunnen we het Consumer Producer programma uit
practicum opdracht 3 behoorlijk vereenvoudigen!
-
Atomic variables waarmee variabelen aangemaakt kunnen worden die slecht door
1 thread tegelijk gebruikt kunnen worden. Deze atomic variabelen zijn sneller
dan het gebruik van synchronize.
Zie: java.util.concurrent.atomic
voor meer informatie.
-
Semaphore
Een oude bekende...
-
CyclicBarrier
Een synchronisatie object waarmee een groep threads kan wachten tot ze allemaal
een bepaalde "grens" (barrier) bereikt hebben.
-
CountDownLatch
Een synchronisatie object wat het mogelijk maakt om te wachten tot een aantal
operaties in andere threads klaar zijn.
-
Exchanger<V>
Een synchronisatie punt waar twee threads informatie kunnen uitwisselen.
Lijkt op een rendezvous. Zie pagina .. van het boek.
-
ReentrantLock
en
Condition
Vergelijkbaar met POSIX mutex en conditionele variabelen. Het wordt met deze
classes mogelijk om meerdere conditionele variabelen te gebruiken met 1 mutex.
(Iets wat niet gaat met de in elk object ingebouwde lock, die slechts 1
conditionel variabele heeft waarop gewacht kan worden). Hiermee kan de
Readers-Writers oplossing (blz. 264 e.v. van het boek) eenvoudiger
geïmplementeerd worden.
-
ReentrantReadWriteLock
Een volledige implementatie van een lock die meerdere concurrent readers
maar slechts 1 writter toestaat. Hiermee kan de Readers-Writers oplossing
(blz. 264 e.v. van het boek) nog veel eenvoudiger geïmplementeerd worden.
-
Programma's:
Les 8. Voorbeeld van concurrent programming in een
embedded systeem.
-
Sheets: 103 t/m 113.
-
Boek: hoofdstuk 7:
-
7.4 probleembeschrijving bestuderen.
A simple embedded system.
-
Programma's:
Les 9. Message-based synchronisation and communication.
-
Sheets: 114 t/m 127.
-
Boek: hoofdstuk 9:
-
Inleiding, 9.1 en 9.2 bestuderen.
Inleiding messages.
-
9.3 en 9.4 overslaan.
-
9.5 bestuderen.
POSIX messages. Zie:
mqueue.h
-
9.6 overlaan.
-
9.7 overlaan.
RPC wordt verder behandeld in H14 en komt bij ESWE1C2 aan de orde.
-
Programma's:
Les 10. Real-time facilities.
-
Sheets: 128 t/m 137.
-
Boek: hoofdsuk 10:
-
10.6 bestuderen.
POSIX signals nodig voor het begrijpen van 12.7.1 en 12.8.1.
-
Boek: hoofdstuk 12:
-
Inleiding, 12.1 bestuderen.
Inleiding time.
-
12.2 tot 12.2.1 bestuderen.
Inleiding clock.
-
12.2.1 en 12.2.2 overslaan.
-
12.2.3 bestuderen.
Clocks in Java: Zie
System.currentTimeMillis()
en
Date
.
Gedeelte over RTJ overslaan.
-
12.2.4 bestuderen.
Clocks in POSIX. Zie
clock_xxx()
en
time.h
.
-
12.3 bestuderen. Behalve:
-
Ada voorbeeld in 12.3.1.
-
Ada en Occam voorbeeld in 12.3.2.
-
12.4 tot 12.4.2 bestuderen. Behalve:
-
Real-Time Euclid en Ada voorbeeld in 12.4.1.
-
12.4.2 en 12.4.3 overlaan.
-
12.5 en 12.6 bestuderen.
-
12.7 tot 12.7.2 bestuderen. Behalve:
-
12.7.2 t/m 12.7.5 overlaan.
-
12.8 tot 12.8.1 overslaan.
-
12.8.1 bestuderen. Behalve:
-
12.8.2 en 12.8.3 overslaan.
-
Programma's:
Les 11. Scheduling.
-
Sheets: 138 t/m 152.
-
Boek: hoofdstuk 13:
-
Inleiding, 13.1 tot 13.4.1 bestuderen.
-
13.4.1 overslaan.
-
13.5 bestuderen.
-
13.6 overslaan.
-
13.7 bestuderen.
-
13.8 tot 13.8.2 bestuderen.
-
13.8.2 en 13.8.3 overslaan.
-
13.9 en 13.10 bestuderen.
-
13.11 tot 13.11.3 bestuderen.
-
13.11.3 overslaan.
-
13.12 en 13.13 bestuderen.
-
13.14 bestuderen. Behalve:
-
Programma's:
Les 12. Scheduling.
-
Sheets: 153 t/m 168.
-
Boek: hoofdstuk 13:
-
13.7 bestuderen.
-
13.8 tot 13.8.2 bestuderen.
-
13.8.2 en 13.8.3 overslaan.
-
13.9 en 13.10 bestuderen.
-
13.11 tot 13.11.3 bestuderen.
-
13.11.3 overslaan.
-
13.12 en 13.13 overslaan.
-
13.14 bestuderen. Behalve:
-
13.14.1 Ada.
-
13.14.2 RTJ.
-
Programma's:
Les 13.
-
Boek: hoofdstuk 13:
-
Opgaven 1, 2, 4, 5, 6 en 7 maken.
Les 14.
Uitloop..