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

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 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..

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

Slope-Intercept Formula

Exercise 1: Phase Splitter DC Operation

HONSEL process monitoring

IN2010: Algoritmer og Datastrukturer Series 2

PSi Apollo. Technical Presentation

Unit Relational Algebra 1 1. Relational Algebra 1. Unit 3.3

Compello Fakturagodkjenning Versjon 10 Software as a service. Tilgang til ny modulen Regnskapsføring

Neural Network. Sensors Sorter

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

Del 3: Evaluere uttrykk

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

Compello Fakturagodkjenning Versjon 10.5 As a Service. Tilgang til Compello Desktop - Regnskapsføring og Dokument import

(MVC - Model, View, Control)

KROPPEN LEDER STRØM. Sett en finger på hvert av kontaktpunktene på modellen. Da får du et lydsignal.

Programmering. Carsten Wulff

Dynamic Programming Longest Common Subsequence. Class 27

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

Gol Statlige Mottak. Modul 7. Ekteskapsloven

SAS FANS NYTT & NYTTIG FRA VERKTØYKASSA TIL SAS 4. MARS 2014, MIKKEL SØRHEIM

Databases 1. Extended Relational Algebra

5 E Lesson: Solving Monohybrid Punnett Squares with Coding

Managing Risk in Critical Railway Applications

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Kurskategori 2: Læring og undervisning i et IKT-miljø. vår

Smart High-Side Power Switch BTS730

INF Logikk og analysemetoder Forslag til løsning på oppgave fra læreboken

SeaWalk No 1 i Skjolden

C13 Kokstad. Svar på spørsmål til kvalifikasjonsfasen. Answers to question in the pre-qualification phase For English: See page 4 and forward

Baltic Sea Region CCS Forum. Nordic energy cooperation perspectives

Trigonometric Substitution

API: Application programming interface, eller programmeringsgrensesnitt

Tilstandsmaskiner med UML og Java

Eksamen i TTK4145 Sanntidsprogrammering 12. august

Generalization of age-structured models in theory and practice

Medisinsk statistikk, KLH3004 Dmf, NTNU Styrke- og utvalgsberegning

A Study of Industrial, Component-Based Development, Ericsson

EKSAMEN I FAG TDT MMI Lørdag 11. august 2012 Tid: kl

Dagens program. Sanntidsprogrammering med Linux. Embedded Linux: Begrensninger. Hvorfor Linux?

Concurrency. Lars Vidar Magnusson. September 20, Lars Vidar Magnusson () Forelesning i Operativsystemer September 20, / 17

INF5110 Obligatorisk Oppgave 2 del 2. Andreas Svendsen SINTEF. 23. April Oversikt

Oppgave 1a Definer følgende begreper: Nøkkel, supernøkkel og funksjonell avhengighet.

EMPIC MEDICAL. Etterutdanningskurs flyleger 21. april Lars (Lasse) Holm Prosjektleder Telefon: E-post:

Information search for the research protocol in IIC/IID

Call function of two parameters

Øystein Haugen, Professor, Computer Science MASTER THESES Professor Øystein Haugen, room D

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

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

Innholdsfortegnelse... 1 Endringslogg UD BETALINGSTERMINAL NETS NEW DRIVERS FULL SUPPORT WINDOWS

// Translation // KLART SVAR «Free-Range Employees»

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

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

System integration testing. Forelesning Systems Testing UiB Høst 2011, Ina M. Espås,

UNIVERSITETET I OSLO ØKONOMISK INSTITUTT

Hvor mye praktisk kunnskap har du tilegnet deg på dette emnet? (1 = ingen, 5 = mye)

Tilstandsmaskiner (FSM) Kapittel 5

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

... Annita Fjuk DESIGN THINKING

Socket og ServerSocket

Endelig ikke-røyker for Kvinner! (Norwegian Edition)

GetMutex(lock) { while(testandset(lock)) {} } En context switch kan ikke ødelegge siden testen og endringen av lock skjer i samme instruksjon.

2018 ANNUAL SPONSORSHIP OPPORTUNITIES

Invarianter, +lstander og li1 mer seman+kk

Kost-nytte innen sikkerhet: Hva er prisen, hva er verdien, og hvordan prioritere blant tiltak?

Programmeringsspråket C Del 2. Hans Petter Taugbøl Kragset

Forecast Methodology September LightCounting Market Research Notes

Hvor mye teoretisk kunnskap har du tilegnet deg på dette emnet? (1 = ingen, 5 = mye)

Trådløsnett med. Wireless network. MacOSX 10.5 Leopard. with MacOSX 10.5 Leopard

Litt mer om Arduino. Roger Antonsen Sten Solli INF januar 2011

SAMMENDRAG.

LabVIEW seriekommunikasjon med mikrokontroller

Han Ola of Han Per: A Norwegian-American Comic Strip/En Norsk-amerikansk tegneserie (Skrifter. Serie B, LXIX)

Elektronisk innlevering/electronic solution for submission:

Start Here USB *CC * *CC * USB USB

oppgavesett 4 INF1060 H15 Øystein Dale Hans Petter Taugbøl Kragset September 22, 2015 Institutt for informatikk, UiO

Enkel og effektiv brukertesting. Ida Aalen LOAD september 2017

Capturing the value of new technology How technology Qualification supports innovation

Syntax/semantics - I INF 3110/ /29/2005 1

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

Uke 5. Magnus Li INF /

Administrasjon av postnummersystemet i Norge Post code administration in Norway. Frode Wold, Norway Post Nordic Address Forum, Iceland 5-6.

Utvikling av skills for å møte fremtidens behov. Janicke Rasmussen, PhD Dean Master Tel

Hvor mye praktisk kunnskap har du tilegnet deg på dette emnet? (1 = ingen, 5 = mye)

Metodisk kvalitetsvurdering av systematisk oversikt. Rigmor C Berg Kurs H, mars 2019

Viktig. Rettet i koden. Obligatorisk oppgave 2 Litt flere detaljer om semantikksjekk og kodegenerering. Semantikksjekk

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

Norsk (English below): Guide til anbefalt måte å printe gjennom plotter (Akropolis)

INF1010 Tråder II 6. april 2016

TwidoSuite kommunikasjon

Hangman. Level. Introduksjon

IN uke 1. Komme i gang med programmering

Oppgave 8.1 fra COD2e

Transkript:

Fra harde µ-sekunder til forte år: sann tid i industrien april 2013 Øyvind Teig senior utviklingsingeniør, Autronica Gjesteforelesning, 25. april 2013 NTNU, fag TTK 4145 Sanntidsprogrammering (Real-Time Programming) Dette foredraget: http://www.teigfam.net/oyvind/pub/ntnu_2013/foredrag.pdf 1

Autronica Fire and Security (AFS) Ca. 370 ansatte med ca. 25 på utvikling 825 mill NOK omsetning (2012) På Lade, her i Trondheim Samme sted, og for meg - seks logoer Begynte med "gründerne" i 1957 Børs og forskjellige eiere 2

Autronica Fire and Security (AFS) Siden 2005 "A UTC Fire & Security Company" United Technologies Corporation Ca. 200.000 ansatte Otis, Pratt & Whitney, Carrier, Sikorsky, UTC Aerospace Systems (Hamilton Sundstrand, Goodrich), UTC Power (Fuel Cell Technologies), Clipper Windpower, Autronica, etc.. 3

"Disclaimer" Punktene i denne forelesningen står for egen regning! - Datafaglige erfaring og meninger, erfart, sett og lest - Ingen Autronica-sensitiv informasjon - Autronicas produkter godkjennes etter aktuelle normer 4

CV NTH, 1975 Autronica, 1976-2013 (+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

«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) 6

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

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

Sanntidsprogrammering er gøy! Det kommer til å bli mye mer av det! Inkludert "concurrency" 9

«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 10

«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 (AutroLooper) Brannvarsling 2009: "ChanSched" stand-alone kjøresystem, med kollega.. Brannvarsling 2010:..brukt i patentert enhet (AutroKeeper) i cruiseskip med det nye internasjonale kravet "Safe Return to Port" Brannvarsling 11

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 komplekst, og har flere aksjonsspråk under paraplyen «Executable UML» 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å! 12

OO er fra sekstitallet Lange år 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 komplekst, og har flere aksjonsspråk under paraplyen «Executable UML» Java -"synchronized" - det første allment brukte språket som har concurrency-tankegang innebygd....og som er "livsfarlig" å bruke! Dette går da ikke fort!..men som det går an å bygge CSP oppå! 13

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 komplekst, og har flere aksjonsspråk under paraplyen «Executable UML» Java -"synchronized" - det første allment brukte språket som har concurrency-tankegang innebygd.. men....og som er "livsfarlig" å bruke!..men som det går an å bygge CSP oppå! 14

21 år etter occam (i 2009) Go fra Google plukket med seg litt occam! chan, go, select, eksplisitt typekonvertering, array- oppdeling, ikke pekerartitmetikk Ikke "sikkert" (no «parallel usage rules») 15

25 år etter occam (i 2013) Høsten 2009 28. mars 2012 Nå 16

Etter forelesningen ønsker jeg At dere skal huske at å jobbe med embeddedsystemer, er gøy... "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! 17

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: Sikre bufrede kanaler (asynkron til full) 18

Kjøresystem I For små (AVR/XMega) 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, men ikke i nye) 3. Har nå lagd et nakent synkront kjøresystem ChanSched (brukes) 4. Framtid? BuffXChanSched == en drøm!-) 19

Kjøresystem II For større 32-bits system (AVR32 og ARM) Linux Buildroot-basert Kjerne 2.6 Egenmodifisert uclibc Egne drivere (RAM-test, USB, HSR Ethernet (redundant ring), etc., alt med GPL lisens) 20

Linux Kjøresystem II For større 32-bits system (AVR32 og ARM) Buildroot-basert Kjerne 2.6 Egenmodifisert uclibc Egne drivere (RAM-test, USB, HSR Ethernet Ikke vår kjernekompetanse (som er brannvarsling!) (redundant ring), etc., alt med GPL lisens) 21

1: CHAN_CSP 22

Fra meldingskø... 23

...til kjørekø 24

...til kjørekø En kjørekø kan ikke flyte over! 25

Meldingskø verflyt Overflyt er naturlig Rask produsent treg konsument Det skal håndteres på applikasjonsnivå 26

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

"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 ("run to completion") OBS! Synkrone kanaler er ikke implementert i noen busy-poll mekanisme, og polles heller ikke av kjøresystemet. Derfor har de null overhead. De vurderes bare når partene ankommer 28

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 2: ChanSched De fleste funksjoner og prosesser er aktive kort tid om gangen ("run to completion") ChanSched OBS! Synkrone kanaler er ikke implementert i noen busy-poll mekanisme, og polles heller ikke av kjøresystemet. Derfor har de null overhead. De vurderes bare når partene ankommer 29

Noen bloggnotater fra 2013 http://www.teigfam.net/oyvind/home/technology/056-some-questions-about-sdl/ «Some questions about SDL» http://www.teigfam.net/oyvind/home/technology/062-waiting-faster/ Waiting faster 30

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 31

Men hvem har hvilken rolle? P0 P1 P0 P1 time 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Slave knock! Master data or come! data time 0 1 2 3 4 5 6 7 8 9 10 11 12 13 Master knock! Slave data or come! data Slave - Master Master - Slave 9 8 Master-Slave eller omvendt? 32

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

«modellering»..er nåtidas «ekspertsystem»-ord Men 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/FDR2, Promela/Spin, LTSA, SPARK, RavenSPARK etc. Rask utvikling, følg med! 34

Resten av tida skal jeg vise dere noe jeg har lært i de siste årene 35

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» At Communicating Process Architectures 2009 (CPA-2009), 1-4 November, 2009, Eindhoven, the Netherlands http://www.wotug.org/cpa2009/ 36

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

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: scheduler/ {/*Init*/ break;} { case ST_IN: case ST_MAIN: { { kjøresystem/ CHAN_IN(G_CHAN_IN,CP->Chan_val1); CHAN_IN(G_CHAN_IN,CP->Chan_val2); CP->State = ST_APPL1; } case operativsystem/ ST_APPL1: { // Process val1 // Process val2 CP->State = ST_OUT; er er ikke så break; } 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 } } : 38

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: { Kjøreystem { CHAN_IN(G_CHAN_IN,CP->Chan_val1); CHAN_IN(G_CHAN_IN,CP->Chan_val2); CP->State = ST_APPL1; break; } Kjøreystem case ST_APPL1: alene gir { oppå // Process val1 annet eget // Process val2 CP->State = ST_OUT; break; } kjøresystem prosessbegrep 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 } } : 39

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 } } : 40

En typisk ChanSched prosess 1. Void P_Prefix (void) // extended Prefix 2. { 3. Prefix_CP_a CP = (Prefix_CP_a)g_CP; // get process Context from Scheduler 4. PROCTOR_PREFIX() // jump table (see Section 2) 5.... some initialisation 6. SET_EGGTIMER (CHAN_EGGTIMER, LED_Timeout_Tick); 7. SET_REPTIMER (CHAN_REPTIMER, ADC_TIME_TICKS); 8. CHAN_OUT (CHAN_DATA_0, Data_0); // first output 9. while (TRUE) 10. { 11. ALT(); // this is the needed PRI_ALT 12. ALT_EGGREPTIMER_IN (CHAN_EGGTIMER); 13. ALT_EGGREPTIMER_IN (CHAN_REPTIMER); 14. ALT_SIGNAL_CHAN_IN (CHAN_SIGNAL_AD_READY); 15. ALT_CHAN_IN (CHAN_DATA_2, Data_2); 16. ALT_ALTTIMER_IN (CHAN_ALTTIMER, TIME_TICKS_100_MSECS); 17. ALT_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, Data_0); 22. }; 23. } 24. } 41

"Fjernet" siden i første utgave 1. Void P_Prefix (void) // extended Prefix 2. { 3. Prefix_CP_a CP = (Prefix_CP_a)g_CP; // get process Context from Scheduler 4. PROCTOR_PREFIX() // jump table (see Section 2) 5.... some initialisation 6. SET_EGGTIMER (CHAN_EGGTIMER, CP->LED_Timeout_Tick); 7. SET_REPTIMER (CHAN_REPTIMER, ADC_TIME_TICKS); 8. CHAN_OUT (CHAN_DATA_0, &CP->Data_0, sizeof(cp->data_0)); // first output 9. while (TRUE) 10. { 11. ALT(); // this is the needed PRI_ALT 12. ALT_EGGREPTIMER_IN (CHAN_EGGTIMER); 13. ALT_EGGREPTIMER_IN (CHAN_REPTIMER); 14. ALT_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. ALT_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. } 42

} 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 43

} Disney Dream (2011) Dette kjører ombord på Viking Grace (2013) ++ Disney Fantasy (2012) AutroKeeper: patentert 329859 i Norge, PCT/NO2009/000319 utenlands (granted as #2353255) AutroKeeper (BNA-180) Safe Return to Port Dual Safety 44

"Verden omkring oss", 1955 ("Odhams Encyclopedia for Children") 45

M l e s n g Ingen tilgangskontroll p o d i o l 46

Om det sendes en eneste melding for mye så kræsjer systemet og alle meldingene mistes.....men da øker man meldingspool-størrelse ved neste versjon til «litt mer» (polemikken viser et viktig punkt!)..for å analysere en slik situasjon er nesten umulig 47

Tilgangskontroll Tilgangskontroll Tilgangskontroll Tilgangskontroll Tilgangskontroll 48

XCHANs: Notes on a New Channel Type CPA-2012 49

XCHAN = x-channel + CHAN x-channel CHAN 50 50

Background From discussions at Autronica Not implemented Goal for me was to try to merge asynchronous and synchronous "camps"....to arrive at a common methodology To make it "easier" to comply to SIL (Safety Integrity Level) approving according to IEC 61508 standard for safety critical systems Assumed implementation loosely based on implemented ideas with EGGTIMER and REPTIMER. ([9] CPA-2009 paper) 51 51

XCHAN (100) OF BYTE my_xchan: asynchronous, nonbuffered 52 52

XCHAN (100) OF BYTE my_xchan: asynchronous, buffered 53 53

XCHAN (...) OF BYTE my_xchan: Sender is notified as to its success or "failure" 54 54

XCHAN (...) OF BYTE my_xchan: Sender is notified as to its success on return of send: - data moved to buffer - data moved to receiver 55 55

XCHAN (...) OF BYTE my_xchan: Sender is notified as to its "failure" on return of send: - buffer full - receiver not present 56 56

XCHAN (...) OF BYTE my_xchan: Sender is notified as to its "failure" on return of send: - buffer full - receiver not present It always returns! 57 57

If "failed" to send on XCHAN: 58 58

If "failed" to send on XCHAN: "Not sent" is no fault! 59 59

If "failed" to send on XCHAN: "Not sent" is no fault! But a contract to send later 60 60

If not sent on XCHAN: - listen to x-channel (in an ALT or select) - resend old or fresher value when it arrives - this send will always succeed 61 61

If not sent: "channel-ready-channel" - listen to x-channel (in an ALT or select) - resend old or fresher value when it arrives - this send will always succeed 62 62

If not sent: - listen to x-channel (in an ALT or select) - resend old or fresher value when it arrives - this send will always succeed This contract (design pattern) between sender and receiver must be adhered to 63 63

Fast producer, slow consumer and XCHAN When Server S cannot get rid of this data, it can still input more, and finally send newer data 64 64

An XCHAN solution (code) 01 while (TRUE) { 02 ALT(); 03 ALT_SIGNAL_CHAN_IN (XCHAN_READY); // data-less 04 ALT_CHAN_IN (CHAN_DATA_IN, Value); 05? ALT_END(); // Delivers ThisChannelId: 06 07 switch (ThisChannelId) { 08 case XCHAN_READY: { // sending will succeed 09! CP->Sent_Out = CHAN_OUT (XCHAN_DATA_OUT,Value); 10 } break; 11 case CHAN_DATA_IN: { 12 if (!CP->Sent_Out) { 13... handle overflow (decide what value(s) to discard) 14 } 15 else { // sending may succeed: 16! CP->Sent_Out = CHAN_OUT (XCHAN_DATA_OUT,Value); 17 } 18 } break; 19 _DEFAULT_EXIT_VAL (ThisChannelId) 20 } 21 } Listing 1. Overflow handling and output to buffered channels (ANSI C and macros) 65 65

Another XCHAN solution Figure 3. Zero buffered XCHAN 66 66

Schneider hadde funnet opp dette før meg (og "noe" i unix(?)): Concurrent and Real-time Systems. The CSP Approach. Steve Schneider 67 67

IEC 61508 standard for funksjonell sikkerhet Null risiko kan aldri oppnås Sikkerhet må legges inn fra begynnelsen Ikke-tolererbare risikoer må begrenses (SIL nivå) Safety integrity level = SIL SIL 1, SIL 2, SIL 3, SIL 4 (best) Svært opptatt av (at) concurrency (er "vanskelig")... men standarden er nok tilsvarende vanskelig! IEC 26262 er en substandard for bilindustrien Jeg prøver å skrive på et lite bloggnotat: http://oyvteig.blogspot.com/2012/01/038-concurrent-programming-paradigms.html 68

Fra en artikkel om dataetikk og formelle metoder For example, if a program changes a single "1" to a "0", the entire program could result in completely opposite behavior. De Millo, Lipton, and Perlis call this property the discontinuity property of software..... imagine if one missing bolt in an American aircraft carrier turned it into a Soviet submarine. That's software. "When Formal Systems Kill: Computer Ethics and Formal Methods" Darren Abramson Lee Pikey https://www.cs.indiana.edu/~lepike/pubs/fm-ethics.pdf 69

Språk: C, MISRA-C C++, MISRA-C++ Java Go... 61508 & etikkvalg? Operativsystem, rammeverk. Hyllevare: Linux (subset, L4 mikrokjerne)? ThreadX, VxWorks, Integrity, QNX? AUTOSAR?... Hjemmesnekret? SDL kjøresystem ChanSched BufXChanSched?... http://oyvteig.blogspot.com/2012/01/038-concurrent-programming-paradigms.html 70

XCHANs: Notes on a New Channel Type Selective choice feathering with XCHANs Sendt til CPA-2013 CPA-2012 71

72

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

Plutselig er dere besteforeldre! n for i 2050 er det 37 år siden 2013 74

1976 Plutselig er dere besteforeldre! n for i 2050 er det 37 år siden 2013 2013 Da har du jobbet i 37 år! 75

Fra harde µ-sekunder til forte år: sann tid i industrien takk for meg! 76

forresten.. 77

Mastergradsoppgaveforslag våren 2013 på http://www.itk.ntnu.no/ansatte/onshus_tor/master.htm «Analyse av meldingssystemer i sikkerhetskritiske systemer begrenset av IEC 61508» 78