Real-Time Systems (RTSYST) Week 1. 2 Real-Time Systems (RTSYST) Onderwerpen: Concurrent programming (threads). Real-Time OS (VxWorks, QNX, FreeRTOS).

Slides:



Advertisements
Verwante presentaties

Advertisements

Objectgeoriënteerd Programmeren in C++


Elektrotechniek Elektrotechniek is een heel breed vakgebied.
Downloaden: Ad-aware. Downloaden bestaat uit 3 delen: •1. Zoeken naar de plek waar je het bestand kan vinden op het internet •2. Het nemen van een kopie.

Embedded systemen Embedded software.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Een programma opbouwen.
November 2013 Opinieonderzoek Vlaanderen – oktober 2013 Opiniepeiling Vlaanderen uitgevoerd op het iVOXpanel.
Bepalen van een productstrategie ten aanzien van 64-bits computing ISV Community Day Schiphol-Rijk, Andreas de Ruiter Developer & Platform Group.
Personalisatie van de Archis website Naam: Sing Hsu Student nr: Datum: 24 Juni 2004.
Global e-Society Complex België - Regio Vlaanderen e-Regio Provincie Limburg Stad Hasselt Percelen.
Algoritmen en Datastructuren (ALDAT)
Workshop Nieuwe begroting
Ronde (Sport & Spel) Quiz Night !
BESTURINGS SYSTEMEN Vincent Naessens.
Gestructureerd programmeren in C
Inleiding programmeren in C++ Life Science & Technology 19 januari Universiteit Leiden.
prNBN D addendum 1 Deel 2: PLT
Een optimale benutting van vierkante meters Breda, 6 juni 2007.
GESPRG Les 14 Gestructureerd programmeren in C. 174 Details! The devil is in the details.
F. Rubben NI Lookout 1 06/RIS/05 - NI Lookout VTI Brugge F. Rubben, ing.
Leiden University. The university to discover. ICLON, Interfacultair Centrum voor Lerarenopleiding, Onderwijsontwikkeling en Nascholing Denkgereedschap.
Greenfoot Workshop Bobby - Snake.

Nooit meer onnodig groen? Luuk Misdom, IT&T
Hoofdstuk 6: Controle structuren
FOD VOLKSGEZONDHEID, VEILIGHEID VAN DE VOEDSELKETEN EN LEEFMILIEU 1 Kwaliteit en Patiëntveiligheid in de Belgische ziekenhuizen anno 2008 Rapportage over.
Elke 7 seconden een nieuw getal
1/1/ / faculty of Computer Science eindhoven university of technology 5B040:Computerarchitectuur 2M200:Inleiding Computersystemen Sessie 7(1): Flow of.
1Ben Bruidegom Hoe werkt een rekenmachine? Ben Bruidegom AMSTEL Instituut Universiteit van Amsterdam.
Wat levert de tweede pensioenpijler op voor het personeelslid? 1 Enkele simulaties op basis van de weddeschaal B1-B3.
TUDelft Knowledge Based Systems Group Zuidplantsoen BZ Delft, The Netherlands Caspar Treijtel Multi-agent Stratego.
MICPRG Les 11 Microcontroller Programmeren in C. 112 Datastructuren in C Werkgeheugen (PC en microcontroller): Statische datastructuren (vaste grootte):
Real-Time Systems (RTSYST) Week 2. Process/Thread states Scheduler = deel van OS dat de toestanden van processen/threads bepaald. OS gebruikt timerinterrupt.
Real-Time Systems (RTSYST) Week IPC inter process communication Shared variabele based (H5) Message based (H6) Kan ook gebruikt worden in systemen.
GESPRG Les 7 Gestructureerd programmeren in C. 92 Verwisselen Schrijf een functie waarmee twee int variabelen verwisseld kunnen worden. void wissel(int.
Werken aan Intergenerationele Samenwerking en Expertise.
2009 Tevredenheidsenquête Resultaten Opleidingsinstellingen.
1 Van Harvard naar MIPS. 2 3 Van Harvard naar MIPS Microprocessor without Interlocked Pipeline Stages Verschillen met de Harvard machine: - 32 Registers.
PLAYBOY Kalender 2006 Dit is wat mannen boeit!.
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
Deel I: Programmeertaal C 6. Arrays en Pointers
1 ICT Infrastructuren 19 november 2007 David N. Jansen.
Operating Systems Informatica.
Ontwikkeld door CWB3. Opbouw Presentatie 1.Wat is GeoSport? 2.Ontwerp 1.Gebruikte ontwerpmethodieken 2.Ervaring 3.Implementatie 1.Gebruikte technologieën.
ECHT ONGELOOFLIJK. Lees alle getallen. langzaam en rij voor rij
17/08/2014 | pag. 1 Fractale en Wavelet Beeldcompressie Les 5.
Fractale en Wavelet Beeldcompressie
De financiële functie: Integrale bedrijfsanalyse©
Logistics: a driver for innovation Low costs High value Flexibility now and later Superior technology Timwood - T > No transport - I > No Inventory - M.
1 Zie ook identiteit.pdf willen denkenvoelen 5 Zie ook identiteit.pdf.
Tircms02-p les 4 Preprocessor In- en uitvoer Diversen.
ZijActief Koningslust
Tircms03-p les 7 Standaardfuncties. In header opnemen bijv: using namespace std // C++ // oude C.
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  programma draaien vanuit ROM.
Tircms02-p les 2 Meer operatoren Arrays en pointers Types en conversie.
tircms02-p les 1 Operating Systems practicum
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 C programmeren voor niet-C programmeurs les 3 redirection,
HOGESCHOOL ROTTERDAM / CMI Computersystemen 2 (TIRCCMS02 - Operating systems)
Cegeka & TenForce Ronde tafel 17/06/2014 Doelstellingenmanagement VO.
Besturingssysteem Vaak wordt de Engelse term gebruikt: Operating System ( OS ) Plaats van het OS in een computersysteem: Hardware Applicatie Operating.
Tircms03-p les 1 C++ voor C-kenners Voor Technische Informatica.
Operating Systems Informatica.
Besturingssysteem.
Transcript van de presentatie:

Real-Time Systems (RTSYST) Week 1

2 Real-Time Systems (RTSYST) Onderwerpen: Concurrent programming (threads). Real-Time OS (VxWorks, QNX, FreeRTOS). Concurrent programming in C en C++. Synchronisation and Communication. Real-Time faciliteiten (clocks, timeouts). Scheduling. Werkvormen: 14 lessen theorie + 7 lessen begeleid practicum. 5 uur/week zelfstudie (inclusief onbegeleid practicum).

3 Leermiddelen Boeken Real-Time Systems and Programming Languages (Fourth Edition), Alan Burns and Andy Wellings, ISBN: Hoofdstuk 1, 4 t/m 6, 9 en 11. QNX Neutino 2, Robert Krten (kun je bij mij lenen) Blackboard en Studiewijzer met uitgebreide planning Practicumopdrachten + uitgebreide practicumhandleiding Sourcecode van alle voorbeelden Sheets Links

4 Real-Time Systeem Definitie(s): Systeem waarvan de reactietijd op een onvoorspelbare inputverandering voorspelbaar is. Systeem waarbij de uitvoer niet alleen correct moet zijn maar ook op het juiste moment.

5 Indeling Real-Time Systemen Hard real-time Missen van een deadline is fataal. Soft real-time Missen van een deadline is ongewenst. Interactief (niet real-time) Er zijn geen expliciete deadlines maar wachten is wel irritant.

6 Voorbeelden Real-Time Systeem Procesbesturing (meet en regeltechniek) Productie besturingssysteem (industriële automatisering) Embedded systemen ABS (Anti-Blokeer-Systeem) Pacemaker Besturing kruisraket Kopieer apparaat DVD recorder

7 Karakteristieken Real-Time Systeem Groot en complex (niet altijd) Onderhoudbaar: uitbreidbaar, aanpasbaar en herbruikbaar Betrouwbaar en veilig Intensive care apparatuur Kerncentrale Automatische piloot Concurrent gedrag Multitasking, multiprocessor, distributed RTOS of RTL moet dit ondersteunen Timing faciliteiten Taak op bepaalde tijd starten, taak binnen bepaalde tijd afronden RTOS of RTL moet dit ondersteunen Interactie met hardware

8 Concurrent programming Single processor system Multitasking m.b.v. time sharing Multi processor system met gedeeld geheugen (SMP) of multi-core processor systeem Parallel (true multitasking) Distributed system Parallel Verschillende systemen (elk met een eigen geheugen) verbonden met een netwerk

9 Why Concurrent programming Programma model komt overeen met de werkelijkheid Benutten van parallellisme in applicatie Zoek je weg in een doolhof Vergelijken van vingerafdrukken Processor beter benutten op single processor systeem

10 Sequential Maze Search

11 Concurrent Maze Search

12 Processor beter benutten op single processor systeem Concurrent programming time XWXWXXWXWXCC c=calculate x=transmit w=wait for ACK XWXWX C XWXWXW CCC sneller

13 Beperking van parallellisme Amdahl's Law (boek p. 96) De versnelling (speedup) van een program door het gebruik van meerdere parallellle processoren (of cores) is begrensd door het deel van het programma dat sequentieel uitgevoerd moet worden. N = aantal processoren S N = speedup met N processors (cores) P = deel van het programma dat parallel uitgevoerd kan worden Voorbeeld: Bereken de maximale speedup voor een programma waarvan 25% sequentieel uitgevoerd moet worden? Wat is de maximale speedup bij 2, 4, 8 en 16 cores? (4) (1.60, 2.29, 2.91 en 3.37)

14 Process versus Thread Process Eigen stack = veilig Eigen (data) memory map Eigen virtueel geheugen = veilig, communicatie = traag Process switch is traag (zwaar) Cache flush, MMU TLB flush Thread Eigen stack = veilig Gedeelde (data) memory map binnen hetzelfde process Gedeeld geheugen = onveilig Communicatie = snel Thread switch is snel (licht) binnen hetzelfde process Geen flushes

15 Process versus Thread Veel GPOSs (General Purpose Operating Systems) gebruiken: Processes om verschillende applicaties van elkaar te scheiden Threads om concurrency binnen applicatie mogelijk te maken Voorbeelden: Windows en Linux Veel RTOSs (Real-Time Operating Systems) gebruiken: Threads / Tasks om concurrency mogelijk te maken Voorbeeld: FreeRTOS QNX gebruikt processes en threads Wij behandelen alleen threads

QNX (POSIX compatible RTOS) 16

Huiswerk Bestudeer: Boek H1 t/m 1.3. Bestudeer: Artikel uit Embedded Computer Design: RTOS versus GPOS RTOS versus GPOS Achtergrondinformatie: Artikel The Free Lunch Is OverThe Free Lunch Is Over Artikel TLAs: QNX, RIM, ARM, CES, RPM, and MPH. An RTOS for the Automotively InclinedTLAs: QNX, RIM, ARM, CES, RPM, and MPH. An RTOS for the Automotively Inclined Web seminar: Why do I need an RTOS anyway?Why do I need an RTOS anyway? 17

18 Concurrent programming Sequentiële programmeertaal (C of C++) + OS (Linux, Windows, QNX, FreeRTOS) Portable als taal en OS portable zijn IEEE POSIX 1003 Meerdere talen combineren in 1 applicatie is mogelijk Concurrent programmeertaal (ADA, Java, C#, C++11, C11) Beter leesbaar Beter onderhoudbaar Portable als taal portable is Concurrent framework (OpenMP, OpenCL) Portable (ondersteund meerdere talen en OS-en) Middleware (RPC, RMI, CORBA) Vereenvoudigt bouwen van distributed applicaties

19 Fundamentele vragen Hoe kun je processen / threads beheren? Support in OS via API (= Application Programming Interface) of library Support in programmeertaal Hoe kunnen processen / threads communiceren? IPC = Inter Process Communication (term wordt ook voor communicatie tussen threads gebruikt) Hoe kun je processen / threads synchroniseren? IPC zonder dataoverdracht.

20 Concurrent OOP Actieve objecten Object heeft eigen thread of process. Versturen zelf actief (spontaan) messages. Passieve objecten Object heeft geen eigen thread of process. Reageren op binnenkomende messages en kunnen als reactie: Zelf message versturen. Toestand van aanroepende thread of process veranderen (b.v. van running naar waiting).

21 Specificatie van concurrent taken Coroutine Coöperatief (eerste Apple, win16) System call UNIX, win32 Concurrent blok Concurrent Pascal, High Performance Fortran Expliciete declaratie ADA, Java task body NAME is begin … end NAME; cobegin s1; s2; s3 coend; pthread_t t; pthread_create(&t, NULL, &func, NULL)

22 Concurrent execution IEEE POSIX fork() en wait() posix_spawn() Combinatie van fork(), exec() en wait() pthread_create() en pthread_join() Documentatie: IEEE Std = The Open Group Base Specifications Issue QNX documentation:

Waarom haakjes? pnf is een pointer naar een functie met een int als parameter en een int returnwaarde In C kun je een pointer naar een functie definiëren. De waarde van de pointer is het beginadres (van de code) van de functie. Pointers naar functies 23 #include int kwadraat(int c) { return c * c; } int dubbel(int c) { return c + c; } int main(void) { int a = 7, b; int (*pnf)(int); pnf = &dubbel; b = (*pnf)(a);

pnf wijst naar de functie dubbel ( pnf wordt gelijk aan het adres van de functie dubbel ) In C kun je een pointer naar een functie definiëren. De waarde van de pointer is het beginadres (van de code) van de functie. Pointers naar functies 24 #include int kwadraat(int c) { return c * c; } int dubbel(int c) { return c + c; } int main(void) { int a = 7, b; int (*pnf)(int); pnf = &dubbel; b = (*pnf)(a);

De functie waar pnf naar wijst wordt aangeroepen met de waarde van a als argument In C kun je een pointer naar een functie definiëren. De waarde van de pointer is het beginadres (van de code) van de functie. Pointers naar functies 25 #include int kwadraat(int c) { return c * c; } int dubbel(int c) { return c + c; } int main(void) { int a = 7, b; int (*pnf)(int); pnf = &dubbel; b = (*pnf)(a); Waarom haakjes?

Verkorte schrijfwijze. Naam van een functie  beginadres (van de code) van de functie. Pointers naar functies 26 #include int kwadraat(int c) { return c * c; } int dubbel(int c) { return c + c; } int main(void) { int a = 7, b; int (*pnf)(int); pnf = dubbel; b = pnf(a);

Wat is het nut? Functie als parameter. Pointers naar functies 27 #include /* … */ void printTabel(int (*p)(int), int van, int tot, int stap) { int x; for (x = van; x < tot; x += stap) { printf("%10d %10d\n", x, (*p)(x)); } int main(void) { printf("De kwadraten van 1 t/m 10\n"); printTabel(&kwadraat, 1, 11, 1); printf("De dubbelen van de drievouden van 0 t/m 30\n"); printTabel(&dubbel, 0, 31, 3);

Uitvoer 28 De kwadraten van 1 t/m De dubbelen van de drievouden van 0 t/m

Een void* kan wijzen naar elk type. Als we de waarde willen ophalen waar een void* naar wijst dan moeten we de pointer casten naar het juiste type. void* 29 int main(void) { int i = 3; double d = 4.3; void* vp = &i; printf("%d\n", *(int*)vp); vp = &d; printf("%lf\n", *(double*)vp); return EXIT_SUCCESS; }

30 pthread (1 van 3) #include void check(int error) { if (error != 0) { fprintf(stderr, "Error: %s\n", strerror(error)); exit(EXIT_FAILURE); }

31 pthread (2 van 3) void* print1(void* par) { struct timespec ts = {0, }; int i; for (i = 0; i < 10; i++) { nanosleep(&ts, NULL); printf("print1\n"); } return NULL; } void* print2(void* par) { struct timespec ts = {0, }; int i; for (i = 0; i < 10; i++) { nanosleep(&ts, NULL); printf("print2\n"); } return NULL; }

32 pthread (1 van 3) int main(void) { pthread_t t1, t2; check( pthread_create(&t1, NULL, &print1, NULL) ); check( pthread_create(&t2, NULL, &print2, NULL) ); check( pthread_join(t1, NULL) ); check( pthread_join(t2, NULL) ); return EXIT_SUCCESS; } print1 print2 print1 print2 print1 print2 print1 print2 print1 print2 print1 print2

33 pthread Alternatieve implementatie void* print(void* p) { par_t* pp = p; struct timespec ts = {0, pp->ns}; int i; for (i = 0; i < 10; i++) { nanosleep(&ts, NULL); printf(pp->msg); } return NULL; } int main(void) { pthread_t t1, t2; par_t p1 = {"print1\n", }; par_t p2 = {"print2\n", }; check( pthread_create(&t1, NULL, &print, &p1) ); check( pthread_create(&t2, NULL, &print, &p2) ); //... Pas op: void* typedef struct { char* msg; long ns; } par_t;

Aan een programma kunnen command line argumenten worden doorgegeven. Deze zijn in main beschikbaar via de parameters argc en argv int main(int argc, char* argv[]) { … } argv[0] is de naam van het programma. argc geeft het aantal meegegeven parameters + 1 argv[1] is de eerste meegegeven parameter. Enz. Command line argumenten 34 int main(int argc, char* argv[]) { int i; for (i = 0; i < argc; i++) { printf("%s\n", argv[i]); } return EXIT_SUCCESS; } $ a.exe dat is leuk a.exe dat is leuk