Analyse og design af Indlejrede Systemer v/ Jens Dalsgaard Nielsen Henrik Schiøler alle Afdeling for Proceskontrol 1
kursusindhold... Introduktion til parallellitet og multiprogrammering Analyse, modellering, design Tidslig analyse og skeduleringsteori Indlejrede systemer & kerner Der er ofte ser stor forskel på folks indgang til dette kursus i hvad man kan. Alle skal med... 2
kursusholdere Jens Dalsgaard Nielsen (mig) Henrik Schiøler http://www.control.aau.dk/~jdn/edu/courses/e05/e5-indlejrsys formål, indhold,... links til spisesedler Sidste nyt om afvikling Div links hen ad vejen til hvad der er interessant 3
metoden Standard AAU model forelæsning som nu opgaver ofte pseudo + rigtig kodning ( BACI,C) Benytter sig af BACI og POSIX standard 1003.4c aka posix http://world.std.com/~jmhart/opensource.htm ftp://sources.redhat.com/pub/pthreads-win32/ og doc.powerdns.com/on-windows.html google en løsning op Dog mulighed/ønske om at dreje det over i projekter 4
metoden II Jeg vil prøve at have overbud af materiale især slides ude fra verden Målet er at man kan få den samme historie på lidt forskellige måder Dertil litteraturen Al litt er på web ingen bøger NYT links til en del dokumenter på hjemmesiden 5
Realtidssystemer - idag Definition af realtidssystemer En række eksempler herpå Parallellitet og multiprogrammering Proces- model og tilstande Købegreber inden i et operativsystem Skedulering (manipulation af køer) Dagens opgaver BACI 6
Definition af realtidsystemer At der er tidskrav på løsning af opgaver Samplede systemer: Reguleringssløjfe: samlingsfrekvens, max jitter,... Hændelsesstyrede systemer Max reaktionstid på eks positionsdetektering 7
Realtidsdefinition II Overskreden deadline = ubrugeligt/dårligt resultat Trafiklys, elevator, stinger,...! ABS, dvd/divx afspiller Mobiltelefon, GPS,... You name it! system Kontrol system Sætter krav Følger krav 8
Kontrol system Opgavens sætter krav til kontrollerende system Pris, pålidelighed,... sætter andre krav til... Det kontrollerende system kan være PIC 16F74 ingen kerne, m/u interrupt 8051 m/u kerne 68xxx m/u kerne ARM, powerpc,... m linux,windows,qnx,windriver,...... 9
Kontrol system Opgavens sætter krav til kontrollerende system Pris, pålidelighed,... sætter andre krav til... Det kontrollerende system kan være PIC 16F74 ingen kerne, m/u interrupt 8051 m/u kerne 68xxx m/u kerne ARM, powerpc,... m linux,windows,qnx,windriver,... System er egentlig uinteressant når det opfylder de ønskede krav... Hvem interesserer sig for inside i en Danfoss ventil??? 10
Nogle RT krav til kontrollerende system Hændelser min,max reaktionstid på hændelser(interrupt) Og set i sammenhæng med andre hændelser (prioritering) afvikling kan blive forsinket Eksterne hændelser bliver registreret ved: Interrupts Polling Periodiske timere/ure Relative timere Andre hændelses interrupts (sensorer) Man undgår interrupt latens :-) Under eksekvering af kode mistet verdensovervågning 11
Uden kerner Mange systemer behøver ikke multiprogrammering Man kan groft dele dem op i Rene polling systemer Systemer med et eller flere interrupts (fattigmandsmultiprogrammering Vil ofte være valg hvor Lav kompleksitet af opgave Lille størrelse af kode Evt krav om meget høj hastighed 12
No kernel please int endestop, motorcontrol, blinklys, controllerstate, resetfraoperator; void main(void) { controllerstate=endestop=motorcontrol=blinklys=controllerstate=0; while (1) { endestop = inport(yyy); resetfraoperator = inport(zz); } switch (controllerstate) { case 0: if (endestop) controllerstate = 1; else if (resetfraoperator) controllerstate=2; break; case 1:... break; } MEGET ENKEL EFFEKTIV HURTIGT GENNEMSKUELIG(?) KODE timing? 13
No kernel please Meget enkel arkitektur Enkel overskuelig kode Billig implementation (PIC,...) Kan eks genereres udfra PLC kode: http://www.opencontroller.org 14
PLCer Billigste mest high performance digital kodemaskiner. Cyklustider på 1 msec som max... bare en industriel PEEL ;-)... eller en PIC Traditionel PlC kode while (1) { laes alle inputs(); beregn all algoritmer(); udlaes alle beregnede outputs(); evt sleep until tid er(); } Man skal bemærke at I/O kun læses/skrives een gang pr runde... 15
En PLC Standard er ren digital I/O Analog I/O findes i større PLCer Indgår som PEEL-alike komponent i styringer af feks:... pris latterlig 16
... 17
Den interrupt drevne løsning Start af en hændelsessekvens trigges af interrupt Flere interruptindgange flere uafhængige hændelsessekvenser... i modsætning til før der jo var rå cyklisk power... Man har mulighed for umiddelbart at løse delmål der hver især har forskellig varighed IDLE mode (hovedprogram) når der ikke er interrupts under behandling 18
Interrupt system I Interrupts løser tidskritisk opgave Hovedprogram forbruger overskydende tid MMI (excl nødstop) Statistik Setpunkt kommunikation,... non realtime realtime tiden går... 19
Interrupt II... Sort højest, blå mellem, rød laveste prio interrupt Grå main loop ( non realtime) blå kan afbryde rød sort kan afbryde blå og rød prioriteret kaskade afvikling af interrupts virker!!! : vil gerne afvikle kode Intr: 3 2 2 1 3 1 1 2 3 20
Interrupt II Interrupthyppighed kan variere over tid Svært at prediktere adfærd -men kan begrænses Starvation er en mulighed... man bør kende interruptmønstre og varighed af associeret kode effektivt! I: 3 2 2 1 3 1 1 2 3 21
Interrupt koden void interrupt nr1(...) { do_critical_code(); access_shared_vars(); UNLOCK_INTR(); } do_your_code(); LOCK_INTR(); access_shared_vars(); UNLOCK_INTR(); Oplåsning af interrupt giver mulighed for interleaving af interrupt (kaskading) Worst case analyse af tidsafvikling er et must rigtige mænd tester ikke ISR de undres bare en gang imellem! 22
Parallellitet... For hver interrupt kend/mål/beregn varighed af kode Sæt en prioritet på opgaven Svært/umuligt at dele opgave op i en høj prio low latency ISR del en høj prio! low latency i process - der kom ordet... 23
Parallellitet... Fattigmandsmultiprogrammering er ok Nemt, effektivt Kodevarighedsbegrænsninger = min tid imellem ISR Antal tråde == antal interrupts Kun et lag i processer (ISR's + eet hovedprogram) Testing by interrupting Hvor mange tråde er der brug for? (min mepis har lige nu har 86 programmer kørende...) Så 86 er nok et overkill i mange situationer 10 interrupts er nåeligt på megen HW 24
SPT(slag på tasken) 1 linie C bliver til 10 asm instruktioner i snit 1 asm instr pr 4 klokcykler 1000 interrupt pr sek koster ca 30000 usec ekstra 970000 usec tilbage 20 Mhz = 50 nsec = 0.2usec/asm instruktion 5.000.000 asm/sec = 0.5 mio linier C/sec lidt men ikke meget overdrevet!???!!! 20 Mhz arkitektur Gå hjem og test det :-) 25
Parallellitet resume Selv små maskiner kan faktisk lave en hel del PCere er ofte et overkill Men er billige Er stabile...??? Alle kan finde ud af at bruge dem Med 500.000 linier C/sec er der nok mulighed for at bruge en del af dette til organisering af afvikling... læs find/køb/lav og brug kerne/parallelt operativsystem 26
TODO 2day Parallellitetsbegreb procesbegreb I det følgende tages udgangspunkt i en ISR model og der nås frem til en procesmodel 27
Procesbegreb I Interrupt model - stak håndtering Prolog: prg status gemmes (ofte på stak) Epilog. Prg status reetableres (ofte fra stak) ISR rutine < 5 usec < 5 usec Main Main fort 28
ISR void interrupt jens(evt register reference) { /* PROLOG push af registre paa stak ofte af compiler */ din_kode_under_diablet_run(); evt_enable_en_del_af_isr_system(); din_enablede_kode_del(); } /* EPILOG: modsat af prolog */ 29
ISR tilstand: Inaktiv Intet ISR lige nu 30
ISR tilstand: Inaktiv Intet ISR lige nu Running ISR som kører på CPU lige nu 31
ISR tilstand: Inaktiv Intet ISR lige nu Running ISR som kører på CPU lige nu Ready ISR som ikke er på CPU da andet højere prio ISR kører 32
ISR tilstand: Inaktiv Intet ISR lige nu Running ISR som kører på CPU lige nu Ready ISR som ikke er på CPU da andet højere prio ISR kører Running & ready ISR kører og der er registreret endnu af samme prio 33
ISR tilstand: Inaktiv Intet ISR lige nu Running ISR som kører på CPU lige nu Ready ISR som ikke er på CPU da andet højere prio ISR kører Running & ready ISR kører og der er registreret endnu af samme prio Ready & ready Som ovenstående blot er først vrs ikke kørende pga prio problem 34
Parallellitet man vel egentligt:... Kunne afvikle kode/funktionalitet/tasks/threads/... Have flere instanser uhængig af hinanden Mulighed for at prioriterer hvis der i situationer er resourcemangel: (CPU,RAM,...) Trigge task fra Eksterne hændelser (ISR) Interne hændelser (andre task's) Være så uafhængig af HW som muligt Ikke bundet af antal CPU'er... 35
procesbegreb Kode, data, stak Tilstande Running - jeg kører lige NU Ready - jeg vil gerne køre lige NU Blocked - jeg vil ikke køre lige nu Ligner meget ISR 36
Det forrige ligner ISR meget Inaktiv Intet ISR lige nu Running ISR som kører på CPU lige nu Ready ISR som ikke er på CPU da andet højere prio ISR kører Running & ready ISR kører og der er registreret endnu af samme prio Ready & ready Som ovenstående blot er først vrs ikke kørende pga prio problem 37
Proces tilstande Running fordi Ready CPU resource ej tilgængelig Blocked Task venter på hændelse Ekstern ( ISR, timer/ur ISR) Intern (synk fra anden task) Running Ready Blocked 38
En proces Running: i = 3; for (j=0; j<44; j++) skriv_brev_til_dronningen(); Ready står frossen i og venter på at få CPU Blocked: i = 3; for (j=0; j<44; j++) skriv_brev_til_dronningen(); sleep(1000); 39
Peudo parallellitet tasks tiden 40
tidsdeling Når der er færre CPUer end tasks Kaldes pseudoparallel afvikling, idet der rent teknisk set ikke er noget parallelt. Ægte parallel afvikling ses sjældent Kernens opgave er at sørge for en smidig afvikling under optimering af de parametre man har valgt Valg af parametre er ofte det svære Statisk prioritering min far er stærkest! Dynamisk hvemses far er stærkest lige nu? Andre applikationsorienterede Hvad er FAIRNESS i den sammenhæng 41
Kernens datastrukturer Procesbeskrivelsen Indeholder den information der beskriver et kørende program/tasks set fra OS synspunkt Interrupt håndtering har næsten det samme problem Prolog: gemmer nødv status for program/task/... Epilog: reetablerer derudfra 42
Procesbeskrivelse typedef struct procesbeskrivelse_tp { int cpuregs[nr_regs]; int prioritet; aabne_filer,devices,... } procesbeskrivelses_tp; 43
Kernen II Skeduler Algoritme der udpeger hvem der skal være running Aktiveres af Task selv HW (interrupt) inkl timer Cyklisk tildeling af CPU tid: round robbin 44
Køer Aktiv kø Tasks der er i running og ready tilstand Andre køer (sleep kø, semafor kø,...) Tasks der venter på at blive gjort running/ready af hændelse som kan være Ekstern hændelse (interrupt) Intern hændelse (anden tasks der synker ) Aktiv kø 1 2 3 4 5 9 45
procebeskrivelse Lister en måde at gøre det på Statiske arrays en anden måde... Osv Egentlig uinteressant pånær Det skal være effektivt at flytte imellem køer... typedef struct procesbeskrivelse_tp { int cpuregs[nr_regs]; int prioritet; struct procesbeskrivelse_tp *next, *pred; int prioritet; aabne_filer,devices,... } procesbeskrivelses_tp; 46
Round robbin forreste er running Tick 1 1 2 3 4 5 9 tiden går nedad 1 tick pr gang Tick 2 2 3 4 5 9 1 Tick 3 3 4 5 9 1 2 Tick 4 4 5 9 1 2 3 running Ready'er 47
Køer Aktivkø er en af mange køer Kendetegnet ved at processer er running/ready Andre køer er kendetegnet ved at man venter på en hændelse der vil flytte en i aktivkøen vente på input fra UART/... vente på en timer vente på... aktivk ø running timerkø 48
Status Argumenter for parallellitet Interrupt baserede systemer Procesbegreb running, ready(er), blocked Kø begreber aktivkø andre køer 49
BACI lidt kodning idag for at slappe af BACI valgt (kører på xp, linux,...) enkelt sprog multiprogrammering indbygget 50
Sprog kaldes C-- Et subset af C BACI C++ syntaks for output (cout << i) Mulighed for at starte funktioner op som parallelle processer cobegin { fct1(); fct2(),...} Ingen indflydelse på tidsdeling Læs manual Installer Kod noget kode 51
Basal baci: compiler, afvikling,... grafisk overbygning (jbaci) nemt smart OS uafhængig 52
baci example void incr(char id) { int i; incr er en funktion/task kode cobegin statement sætter 3 task i AQ for (i=1;i<=10;i=i+1;) { cout << id << count = << i; } cout } << id << count = << i; } main() }{ main() cobegin { { incr('a'); incr('b'); incr('c'), incr('d'); } cobegin De afvikler alle incr koden Vides ikke hvornår der er processkift ens prioritet tvungen tidsdeling round robbin ellers enkelt sprog } { incr('a'); incr('b'); incr('c'), incr('d'); } 53
er der mere??? /Jens 54