Fra harde µ-sekunder via mjuke sekunder til forte år: sann tid i industrien Øyvind Teig



Like dokumenter
Fra harde µ-sekunder via mjuke sekunder til forte år: sann tid i industrien Øyvind Teig

Fra harde µ-sekunder til forte år: sann tid i industrien

Fra sekvensielt til parallelt

Fra sekvensielt til parallelt

Fra harde µ-sekunder til forte år: sann tid i industrien

Dette er en historie..

Fra harde µ-sekunder til forte år: sann tid i industrien

Plan for dagen. Kræsj-kurs i sanntidsprogrammering. Måter å tenke på. Programmering intro. Tråder & synkronisering

Fra harde µ-sekunder til forte år: sann tid i industrien

Tilstandsmaskiner med UML og Java

Del 3: Evaluere uttrykk

(MVC - Model, View, Control)

1 Kodegenerering fra Tau Suiten

Quicksort. Fra idé til algoritme.

IN2010: Algoritmer og Datastrukturer Series 2

Eivind Gard Lund. 24. Mars 2009 Foilene bygger på 2009 utgaven av Andreas Svendsen

Debugging. Tore Berg Hansen, TISIP

Avdeling for ingeniørutdanning Institutt for teknologi

Eksamen i TTK4145 Sanntidsprogrammering 12. august

2 Om statiske variable/konstanter og statiske metoder.

Oving 2. Oppgave 1. #include <stdio.h> int main(int argc, char **argv) { char *navn = argv[1]; printf ("Navnet ditt er %s\n", navn); } Oppgave 2

Tell sekunder. Introduksjon. Skrevet av: Teodor Heggelund. I denne oppgaven skal vi lage vårt eget spill!

OPPGAVE 5b og 8b Java Kode

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Arbeidskrav 1. Se fremdriftsplanen for innleveringsfrist. Emneansvarlig: Olav Dæhli 1

INF Notater. Veronika Heimsbakk 10. juni 2012

Kort notat om parallellstyring IN147

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

INF Noen oppgaver til kap. 8

Enkle generiske klasser i Java

INF5110. Oblig 2 presentasjon

Sensuren vil bli avsluttet i henhold til gjeldende regelverk. Alle deloppgaver teller likt unntatt implementasjonsoppgavene som teller dobbelt.

alternativer til felles hukommelse store parallelle datamaskiner Tema for denne forelesningen: in 147, våren 1999 parallelle datamaskiner 1 9

INF1010 Tråder II 6. april 2016

Algoritmer og Datastrukturer

Del 1 En oversikt over C-programmering

Repetisjon. INF gruppe 13

INF Oblig 2 semantikksjekk og kodegenerering

IN1010 våren Repetisjon av tråder. 15. mai 2018

En oppsummering (og litt som står igjen)

INF Noen oppgaver til kap. 8

Oppgave 8.1 fra COD2e

HONSEL process monitoring

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Repetisjon fra sist - 1: Plan for dagen. Repetisjon fra sist 2: Hva jeg glemte sist: Nyttige Kommandoer

Spesifikasjon av Lag emne

Førsteamanuensis John I. Dalseng Høgskolen i Finnmark 9500 Alta

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

Oblig 4Hybelhus litt mer tips enn i oppgaven

Kapittel 1 En oversikt over C-språket

Arbeidskrav 1. Se fremdriftsplanen for innleveringsfrist. Emneansvarlig: Olav Dæhli 1

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

INF april, 2015 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8. Ble lagt ut 24. april

INF1000: noen avsluttende ord

INF1000 Prøveeksamen Oppgave 7 og 9

Post-it spørsmål fra timen (Arv og subklasser)

INF-5110 Oppgaver kodegenerering etc. INF-5110, vår 2011

Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

Velkommen til INF Kompilatorteknikk

Løsningsforslag til eksamen i IN 147 og IN 147A

EKSAMEN. Emne: Algoritmer og datastrukturer

Tråder Repetisjon. 9. og 13. mai Tråder

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

Forelesning III Kap 8 & 7; Dagsplan. Gjenbruk. Condition synchronization. Gjennomgående eksempler. Kode: Design: Verktøy

I et Java-program må programmøren lage og starte hver tråd som programmet bruker. Er dette korrekt? Velg ett alternativ

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

7) Radix-sortering sekvensielt kode og effekten av cache

TDT4100 Objektorientert programmering

Tell sekunder. Steg 0: Hva er forskjellig fra før? Introduksjon. I denne oppgaven skal vi lage vårt eget spill!

INF1000 Metoder. Marit Nybakken 16. februar 2004

Scheduling og prosesshåndtering

Robotinvasjon Introduksjon ComputerCraft PDF

UNIVERSITETET I OSLO

Hvorfor ikke bruke Word?

UNIVERSITETET I OSLO

Repetisjon Novice Videregående Python PDF

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

Socket og ServerSocket

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Du må håndtere disse hendelsene ved å implementere funksjonene init(), changeh(), changev() og escape(), som beskrevet nedenfor.

Bli Kjent med Datamaskinen Introduksjon ComputerCraft PDF

Tråder Repetisjon. 9. og 13. mai Tråder

Løsningsforslag EKSAMEN

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

UNIVERSITETET I OSLO

Informasjon Eksamen i IN1000 høsten 2017

UNIVERSITETET I OSLO

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Klasser, objekter, pekere og UML. INF gruppe 13

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

INF april, 2014 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

Hvis en person har inntekt < , så betaler han 10% skatt på alt, og ellers betaler han 10% skatt på de første og 30% på resten.

IN Notat om I/O i Java

UNIVERSITETET I OSLO

Transkript:

Fra harde µ-sekunder via mjuke sekunder til forte år: sann tid i industrien Øyvind Teig senior utviklingsingeniør Autronica Fire and Security, «a UTC company» Gjesteforelesning, 18. nov. 2009 NTNU, fag TTK 4145 Sanntidsprogrammering (Real-Time Programming) 1

Autronica Fire and Security (AFS) 381 ansatte (med Omicron og utekontorer), hvorav 37 på utvikling 682 mill NOK omsetning (2008) På Lade, her i Trondheim Samme sted, og for meg - seks logoer Autronica - børs - Whessoe - Navia AFS ble datterselskap til Autronica AS og solgt til Williams (UK, 1998) Autronica AS + Seatex = Navia Maritime (1998) - > Kongsberg Maritime (NO, 2000) 2

Autronica Fire and Security (AFS) Regn med å bli solgt minst en gang! Williams -> Kidde og Chubb (UK). AFS ble med inn i Kidde, (UK, 2000) Maritim brann (og jeg) hos Kongsberg ble solgt til AFS, sammen med Autronica-navnet (2002) Kidde -> United Technologies (US, 2005) "A UTC Fire & Security Company" - United Technologies Corporation, 210000 ansatte med selskap som bla.a. Otis, Pratt & Whitney, Hamilton Sundstrand, Carrier og tidligere Kidde (nå UTC Fire & Security, som vi er en del av) Så vi har nå søsterselskap å jobbe sammen med. Det øker staben og produktmangfoldet 3

Punktene i denne forelesningen står for egen regning! 4

CV NTH, 1975 Autronica, 1976-nå (+studentjobbing der fra 1972) HW og SW (mest SW) Har jobbet med embeddedsystemer hele tida Publisert en del - relativt uvanlig i industrien Hjemmesiden min: http://www.teigfam.net/oyvind 5

CV NTH, 1975 33 år! Autronica, 1976-nå (+studentjobbing der fra 1972) HW og SW (mest SW) Har jobbet med embeddedsystemer hele tida Publisert en del - relativt uvanlig i industrien Hjemmesiden min: http://www.teigfam.net/oyvind 6

«Pappesken» (SW) HW/SW for 30+ år i den pappesken Diverse assembler (78-80) PL/M (80-90) Modula-2 (88-90) MPP-Pascal (82-88) occam (90-01) C (02-nå) Java (97-00) Perl (02) 7

«Pappesken» (SW) Øverst til høyre (fra diplomen 1975) Den papirtapen inneholder fremdeles programmet! 8

Sann tid går alt for fort! «Pappesken» (SW) Øverst til høyre (fra diplomen 1975) Den papirtapen inneholder fremdeles programmet! 9

«Pappesken» (mimre) Ikke en kjedelig dag på mer enn 33 år! Meningsfylt! Sanntidsprogrammering er gøy! Og det kommer bare til å bli mer og mer av det! 10

«Pappesken» (sanntidsmetodikk & produkt) 1978: Ikke noe kjøresystem, ren assembler Dieselaggregat start/stopp nødstrøm 1979: MPP Pascal med prosessbegrep Protokollkonvertering, nivåmåling og brannvarsling 1980: PL/M med NTH-utviklet kjøresystem Maskinromsovervåking 1982: Assembler med jobbsnekret kjøresystem Brannvarsling 1988: PL/M med jobbsnekret kjøresystem Brannvarsling 11

«Pappesken» (sanntidsmetodikk & produkt) 1988: Modula-2 med kjøpt kjøresystem Brannvarsling 1990: occam med prosessbegrep Motormålinger og effektberegninger 1995: C med VxWorks opsys/kjøresystem Brannvarsling 2003-8: C med CSP kanaler oppå SDL kjøresystem Brannvarsling 2009: "ChanSched" stand-alone kjøresystem, med kollega Brannvarsling 12

Lange år OO er fra sekstitallet I bruk nå, men lite i embedded (blir mer og mer!) Sanntidsmekanismene er fra 60-70+ tallet Semafor etc. i bruk siden da CSP etc. fra 70-tallet. Lite i bruk (ennå?) UML 2.0 er stort og uten aksjonsspråk Java -"synchronized" - det første allment brukte språket som har concurrency-tankegang innebygd....og som er "livsfarlig" å bruke!..men som det går an å bygge CSP oppå! Men, dette går da ikke fort! 13

21 år etter occam Go fra Google har plukket med seg litt occam! chan, go, select, eksplisitt typekonvertering, array oppdeling, ikke pekerartitmetikk Schedulering av prosesser på prosessorer i Go som KRoCs kjøresystem for bla.a. occam-pi (fra trådbasseng) (http://www.cs.kent.ac.uk/pubs/2009/2928/index.html) Ikke sikkert (no «parallel usage rules») 14

Etter forelesningen ønsker jeg At dere skal huske at å jobbe med (s) embeddedsystemer, er gøy Sa jeg (sivile)? "En sivilingeniør har til oppgave å løse praktiske problemer, ofte i team og i samarbeid med kunden". (Wikipedia 2007) At dere skal huske å fortelle om det dere har lært i dette faget når dere havner i slike team! 15

Små embeddedsystemer i industrien Vil nok forholde seg til C en god stund til! Vil nok ha prosjekt- ledere og -deltakere som (bare) kan asynkrone system en god stund til! Ikke overta deres vertøykasse uten å legge synkrone kanaler og tette prosesser oppi! Lær av oss! 16

Utviklingsavdelingen på AFS For små (AVR/ARM32) system i ANSI C 1. Begynte vi med et asynkront SDL kjøresystem (brukes mye!) 2. La så et synkront kanal-lag oppå CHAN_CSP (brukes!) 3. Har nå lagd et nakent synkront kjøresystem ChanSched (tas nå i bruk!) 17

Tilbakeblikk 1988-90 PL/M-51 Egenutviklet mailboksbasert kjøresystem Flere occam-system med transputer (90-95) Flere occam-system med SPoC og Texas DSP (95-2000) 2005-2008 Samme system i deler av ny brannsentral: I sløyfeprosessoren, som vi kaller "AutroLooper" 2009-... I ny enhet for bla.a. cruiseskip 18

CHAN_CSP 19

Fra meldingskø til kjørekø 20

Fra meldingskø til kjørekø En kjørekø kan ikke flyte over! 21

Meldingskø verflyt Overflyt er naturlig Det skal håndteres på applikasjonsnivå Meldinger skal kastes bevisst Meldingsflyt skal håndteres bevisst 22

Meldingsko verflyt Overflyt er naturlig Men ikke mellom programmer Det skal håndteres på applikasjonsnivå Men ikke av operativsystemet Meldinger skal kastes bevisst Men kanskje ikke alle Meldingsflyt skal håndteres bevisst Så blokkering «ved halvgjort» er flott! 23

Blokkerende prosesser Et system som består av blokkerende kommunikasjon får ikke gjort mer enn et system som ikke blokkerer Heller ikke mindre (som nesten alle tror) Jo flere prosesser og dermed "parallell slakkhet" - desto mer greier et synkront system De fleste funksjoner og prosesser er aktive kort tid om gangen - og passiv venting er hovedbeskjeftigelsen ("run to completion") OBS! Synkrone kanaler er ikke implementert i noen busypoll mekanisme, og polles heller ikke av kjøresystemet. Derfor har du null overhead. De vurderes bare når partene ankommer 24

Blokkerende prosesser Et system som består av blokkerende kommunikasjon får ikke gjort mer enn et system som ikke blokkerer Heller ikke mindre (som nesten alle tror) Jo flere prosesser og dermed "parallell slakkhet" - desto mer greier et synkront system De fleste funksjoner og prosesser er aktive kort tid om gangen - og passiv venting er hovedbeskjeftigelsen ("run to completion") ChanSched OBS! Synkrone kanaler er ikke implementert i noen busypoll mekanisme, og polles heller ikke av kjøresystemet. Derfor har du null overhead. De vurderes bare når partene ankommer 25

Data-komm som alltid funker Mønster som garanterer mot vranglås «Knock-come» verifisert i Promela/Spin http://oyvteig.blogspot.com/2009/03/009-knock-come-deadlock-free-pattern.html 26

Seriell OO modellering Her benytter vi UML Vi benytter Telelogic Rhapsody Klassediagrammer Tilstandsmaskiner Kodegenerering av ramme og skruktur Håndskrevet: Aksjonskoden Lim mot resten av systemet Prosesser via operativsystem så langt 27

«modellering»..er nåtidas «ekspertsystem»-ord Både assembler, C, Java, CSP, occam, Go - og UML er abstraksjoner Altså «modeller» Men i varierende grad er de ovenfor «formelle modeller» - dvs. kan være input til et verktøy som gjør verifisering for korrekthet (null til..?) Men disse er: CSP/FRD2, Promela/Spin, LTSA etc. Rask utvikling, følg med! 28

Resten av tida skal jeg vise dere noe jeg har lært i det siste 29

New ALT for Application Timers and Synchronisation Point Scheduling (Two excerpts from a small channel based scheduler) Øyvind TEIG and Per Johan VANNEBO Autronica Fire and Security➀, Trondheim, Norway «ChanSched» ➀ A UTC Fire & Security Company. NO-7483 Trondheim, Norway http://www.autronicafire.no At Communicating Process Architectures 2009 (CPA-2009), 1-4 November, 2009, Eindhoven, the Netherlands http://www.wotug.org/cpa2009/ 30

Testsystem for ChanSched Prosess/dataflyt for utvidet «commstime» 31

void P_Standard_CHAN_CSP (void) void P_Extended_ChanSched (void) { { CP_a CP = (CP_a)g_ThisExtPtr; // Application CP_a CP = (CP_a)g_ThisExtPtr; // Application switch (CP->State) // and // Init here // state only // communication while (TRUE) // state { { switch (CP->State) case «En ST_INIT: {/*Init*/ scheduler/ break;} { case ST_IN: case ST_MAIN: { { CHAN_IN(G_CHAN_IN,CP->Chan_val1); CHAN_IN(G_CHAN_IN,CP->Chan_val2); kjøresystem/ CP->State = ST_APPL1; } case operativsystem/ ST_APPL1: { // Process val1 // Process val2 CP->State = ST_OUT; er break; er ikke så } case ST_OUT: { usynlig som jeg CHAN_OUT(G_CHAN_OUT,CP->Chan_val1); CHAN_OUT(G_CHAN_OUT,CP->Chan_val2); CP->State = ST_IN; CP->State = ST_MAIN; // option1 break; break; } trodde» } } } } } } void P_libcsp2 (Channel *in, Channel *out) PROC P_occam (CHAN OF INT in, out) { int val3; WHILE TRUE for(;;) INT val4: { SEQ ChanInInt (in, &val3); in? val4 // Process val3 -- Process val4 ChanOutInt (out, val3); out! val4 } } : 32

void P_Standard_CHAN_CSP (void) void P_Extended_ChanSched (void) { { CP_a CP = (CP_a)g_ThisExtPtr; // Application CP_a CP = (CP_a)g_ThisExtPtr; // Application switch (CP->State) // and // Init here // state only // communication while (TRUE) // state { { switch (CP->State) case ST_INIT: {/*Init*/ break;} { case ST_IN: case ST_MAIN: { { CHAN_IN(G_CHAN_IN,CP->Chan_val1); CHAN_IN(G_CHAN_IN,CP->Chan_val2); CP->State = ST_APPL1; break; } case ST_APPL1: { // Process val1 // Process val2 CP->State = ST_OUT; break; } case ST_OUT: { CHAN_OUT(G_CHAN_OUT,CP->Chan_val1); CHAN_OUT(G_CHAN_OUT,CP->Chan_val2); CP->State = ST_IN; CP->State = ST_MAIN; // option1 break; break; } } } } } } } void P_libcsp2 (Channel *in, Channel *out) PROC P_occam (CHAN OF INT in, out) { int val3; WHILE TRUE for(;;) INT val4: { SEQ ChanInInt (in, &val3); in? val4 // Process val3 -- Process val4 ChanOutInt (out, val3); out! val4 } } : 33

En typisk ChanSched prosess 01 Void P_Prefix (void) // extended Prefix 02 { 03 Prefix_CP_a CP = (Prefix_CP_a)g_CP; // get process Context from Scheduler 04 PROCTOR_PREFIX() // jump table (see Section 2) 05... some initialisation 06 SET_EGGTIMER (CHAN_EGGTIMER, CP->LED_Timeout_Tick); 07 SET_REPTIMER (CHAN_REPTIMER, ADC_TIME_TICKS); 08 CHAN_OUT (CHAN_DATA_0, &CP->Data_0, sizeof(cp->data_0)); // first output 09 while (TRUE) 10 { 11 ALT(); // this is the needed PRI_ALT 12 ALT_EGGREPTIMER_IN (CHAN_EGGTIMER); 13 ALT_EGGREPTIMER_IN (CHAN_REPTIMER); 14 galt_signal_chan_in (CHAN_SIGNAL_AD_READY); 15 ALT_CHAN_IN (CHAN_DATA_2, &CP->Data_2, sizeof (CP->Data_2)); 16 ALT_ALTTIMER_IN (CHAN_ALTTIMER, TIME_TICKS_100_MSECS); 17 galt_end(); 18 switch (g_thischannelid) 19 { 20... process the guard that has been taken, e.g. CHAN_DATA_2 21 CHAN_OUT (CHAN_DATA_0, &CP->Data_0, sizeof (CP->Data_0)); 22 }; 23 } 24 } 34

} Nesten usynlig hopp tilbake til der man sist blokkerte Se http://www.teigfam.net/oyvind/pub/pub_details.html#newalt 64 #define SCHEDULE_AT goto 66 #define CAT(a,b,c,d,e) a##b##c##d##e // Concatenate to f.ex. SYNCH_8_L 68 #define SYNCH_LABEL(a,b,c,d,e) CAT(a,b,c,d,e) // Label for Proctor-table 70 #define PROC_DESCHEDULE_AND_LABEL() \ 71 CP->LineNo = LINE ; \ 72 return; \ 73 SYNCH_LABEL(SYNCH,_, LINE,_,L): 75 #define CHAN_OUT(chan,dataptr,len) \ 76 if (ChanSched_ChanOut(chan,dataptr,len) == FALSE) \ 77 { \ 78 PROC_DESCHEDULE_AND_LABEL(); \ 79 } \ 80 g_thisalttaken = FALSE 81 #define PROCTOR_PREFIX()\ 82 switch (CP->LineNo)\ 83 {\ 84 case 0: break;\ 85 case 8: SCHEDULE_AT SYNCH_8_L;\ 86 case 17: SCHEDULE_AT SYNCH_17_L;\ 87 case 21: SCHEDULE_AT SYNCH_21_L;\ 88 DEFAULT_EXIT\ 89 } Bare denne er synlig, ref to sider siden Genereres av verktøy og ligger i egen.h fil 35

Kontaktinfo Dette foredraget: http://www.teigfam.net/oyvind/pub/ntnu_2009/foredrag.pdf Dette faget på NTNU: http://www.itk.ntnu.no/fag/ttk4145/information/ Autronica: http://www.autronicafire.com Les dette og mer på http://www.teigfam.net/oyvind/pub/ 36

Kontaktinfo Dette foredraget: http://www.teigfam.net/oyvind/pub/ntnu_2009/foredrag.pdf Dette faget på NTNU: http://www.itk.ntnu.no/fag/ttk4145/information/ Autronica: http://www.autronicafire.com Og - søk jobb hos oss når vi annonserer! Les dette og mer på http://www.teigfam.net/oyvind/pub/ 37

Noen besteforeldre må være på Autronica i 2041 også (33 år fra 2009) 38

takk for meg! Noen besteforeldre må være på Autronica i 2041 også (33 år fra 2009) 39