Fra harde µ-sekunder via mjuke sekunder til forte år Sann tid i industrien

  • Published on
    09-Jan-2016

  • View
    33

  • Download
    2

DESCRIPTION

Fra harde -sekunder via mjuke sekunder til forte r Sann tid i industrien. NTNU, fag TTK 4145 Real-Time Programming Gjesteforelesning, 2004, 2005 og 2006. yvind Teig http://home.no.net/oyvteig/ Autronica Fire and Security (AFS) - A Kidde company. Oppdatert 15.nov.06. - PowerPoint PPT Presentation

Transcript

Fra harde -sekunder via mjuke sekunder til forte rSann tid i industrienNTNU, fag TTK 4145 Real-Time ProgrammingGjesteforelesning, 2004, 2005 og 2006yvind Teighttp://home.no.net/oyvteig/ Autronica Fire and Security (AFS)- A Kidde companyOppdatert 15.nov.06T (2004)Softblinking - harde -sekunder I iBook og i en ny embedded enhet fra AutronicaAlle kan se at dette er en lysdiodeEt avbrudd hvert 100 -sekundkan f den til blinke sakte hvert 2-3 sekundTips: pulsbreddestyring av lysdiodenHard sanntid - men sanntidsprogrammering? Sto ikke i spekenSjefene hardblunka litt...men det tok jo bare en par timers arbeid...etter at jeg likevel mtte polle noe hvert 100 -sekund!T (2004)FagbakgrunnNTH, 1975HW designSW designEmbedded systemer hele tidaPublisert en del (se hjemmesida mi)http://home.no.net/oyvteig/ Du finner referanser til alt jeg har nevnt i denne forelesningen i artikler derFirmabakgrunnAutronica, LadeSamme sted, fem logoerAutronica - brs - Whessoe - NaviaSplitt og bli rik:Kongsberg + AFS= To selvstendige firmaJeg har jobbet i alle disse firmaeneAnsatt i Autronica Fire and Security (AFS)AFS ble eid av Kidde (2004) som blekjpt av United Technologies UTC (2005)NB! Punktene i denne forelesningen str for egen regning!T (2004)Pappesken (1)HW/SW for 30 r assemblerPL/M Modula-2MPP-PascaloccamCoccam, et ddt sprk, ja velmen (pstand):i forhold til concurrencydilter UML bare etter.!C++?EC++?ETC++?Java?T (2004)Pappesken (2)Som sagt, nesten 30 rIkke en kjedelig dag!?Meningsfylt!?Sanntidsprogrammering er gy!Og det kommer bare til bli mer og mer av det!Papirtape (NTH, 1975)Sann tidgr ganske fort!.!T (2004)Pappesken (3).!1978: Ikke noe kjresystem, ren assembler 1979: MPP Pascal med prosessbegrep og kjresystem 1980: PL/M med NTH-utviklet kjresystem 1982: Assembler med hjemmesnekret kjresystem 1988: PL/M med hjemmesnekret kjresystem 1988: Modula-2 med kjpt kjresystem1990: occam med prosessbegrep og kjresystem 1995: C med VxWorks 2003: C med hjemmesnekret SDL (&CSP) kjresystemDieselaggregat start/stopp ndstrmProtokollkonvertering, radarbasert nivmling og brannv.MaskinromsovervkingBrannvarslingBrannvarslingBrannvarslingMotormlinger og effektberegningerBrannvarslingBrannvarslingT (2004)ALTALTi occamalti Limboselecti Adaaccept if/fii Promelaalti UML 2.0 (semantikken?)selecti Unix er ikke det samme! (ingen guarder)T (2004)ALT != ifOm flere guarder er sannedvs. man er klar til motta p flere kanalerskal det ikke velges som ved if-then-elseMan skal velge ikke-deterministiskikke-deterministisk = tilfeldigFinnes som sagt i UML 2.0 (ogs i UML sine state maskiner, helt rimelig - for en state maskin kan betraktes som en prosess)T (2004)Lange rOO er fra sekstitalletI bruk n, men lite i embeddedSanntidsmekanismer fra 60-70+ tallet. Semafor etc. i bruk siden daCSP etc. fra 70-tallet. Lite i bruk (enn?)UML 2.0 snart ute stort og uten aksjonssprkJava synchronized det frste allment brukte sprket som overhodet har noe concurrency-tankegang innebygd..men som er livsfarlig bruke!..og som det gr an bygge CSP opp!Hallo, dette gr da ikke fort!T (2004)MeldingskanalerSynkron, blokkerende (occam eller CSP-skall)EnveisSynkron, blokkerende (Ada)ToveisAsynkron ikke-blokkerende (SDL)EnveisAsynkron ikke-blokkerende (socket)ToveisAlle typeneKan brukes..Br brukes!T (2004)Asynkron vs. synkron komm. (1)Asynkron du kan ikke forhindre at du kan miste data(Buffer overflyt)Du m programmere det ikke miste data nr du trenger det(Vent p kvitteringsmelding)Synkron du mister aldri data(Blokkering)Du m programmere det tillate miste data nr du trenger det(Aksepter alltid og kast (gjerne i egen overflowbuffer))T (2004)Asynkron vs. synkron komm. (2)Asynkron komm. og buffer overflyt p dette nivetfr hele systemet til krsje!Og du kan ikke lett designe bort dette problemet!Synkron komm. og vranglsfr ogs hele systemet til krsje!Men du kan designe bort lukkede sirkler av avhengighet!T (2004)En liten og ny boksAtmelATMega1282003Maskebrent8052 fra1988Softblinkpower on2003CEgenutviklet SDL kjresystem - asynkrone meldingerEgenutviklet CSP lag opp: synkrone og blokkerende kanaler1988-90PL/M-51Egenutviklet mailboksbasert kjresystemI begge prosessoreneKooperativ schedulingInterrupt tar det som trengs av preemptionT (2004)Roller (1):to sjeferSynkrone kanaler og to initiativtakere?Bruk f.eks. to synkrone kanaler og en asynkron signalkanalEller bygg om den ene asynkrone kanalen med to synkrone og en bufferprosess (Buffer)Da vil man kunne sende en asynkron meldingT (2004)Roller (2):familiebildeALTMASTERSLAVERene meldings- leverandrerDataflytreninger:T (2004)Roller (3): opp og ned og ned og oppValg av rolle spiller egentlig ingen rolleSlik designet jeg det, menjeg kunne f.eks. ha latt retningen snu i 5:P_BS100_SimHovedsaken er f data dit du skalUtenpollingdeadlockT (2004)Roller (4): bortoverprodusent forbrukerT (2004)OverflytbufferP_A sender til P_Bog P_B til P_AKontroll p overflyt uten meldingskoverflytT (2004)Sekvensdiagram (SD)Fine saker!T (2004)Fra semaforer til en stor mainprosessSemaforer er relativt vanskelig bruke rettDerfor, inn med meldingsker! (bra)Da fles de asynkrone bestOg man lager trder som sender tilen diger mainprosess Huff og huff!Ikke ha trdvegring!Lag en prosess per (stor) funksjon!Ikke ha synkronkanalvegring! De er ikke s stive!Den der mainen blir som regel alt for komplisert og det blir alt for mange hendelser hndtere, og tilstander som gr i beina p hverandre, og meldinger som snakker i munnen p hverandre, og det er ikke like lett oppdage slikt bestandig, inni masse kode, for du har jo ikke egentlig designet dette, det bare gror og gror..(?)T (2004)Men lysdiodeblinking, da?Inne i denne main prosessen er det vel kurant hndtere en timer sammen med det andre for kunne blinke bare en lysdiode av og p?Jada!Men om flere nsker styre denne blinkingen..og ha mer systematisk kontroll p den?Bort med main prosessen!Inn med en egen prosess som pakker inn og beskytter denne delte resursenEller flere lysdioder som skal blinke i taktEller enda litt flere pulserende utgangerDa fr du en utgangsdriver, et mye mer skalerbart konseptT (2004)Kanallag over asynkront meldingssystemcase ST_STATE_IN_ALT_030_032_104_105_A: { { bool_a alt_taken; g_ALT_BS100_Sim = CHAN_ALT_ENABLED_ON_A; alt_taken = FALSE; ALT_CHAN_IN_ASYNC_SIGNAL_F (ContextPtr->Guard_032, g_chan_032, S_EVENT_ALT_032_A, &alt_taken); ALT_CHAN_IN_ASYNC_SIGNAL_F (ContextPtr->Guard_104, g_chan_104, S_EVENT_ALT_104_A, &alt_taken); ALT_CHAN_IN_F (ContextPtr->Guard_030, g_chan_030, ContextPtr->ALCP_030i, S_EVENT_ALT_030_A, &alt_taken); ALT_CHAN_IN_F (ContextPtr->Guard_105, g_chan_105, ContextPtr->ASSP_Inner_105i, S_EVENT_ALT_105_A, &alt_taken); ALT_TIMER_IN_F (ContextPtr->Guard_Timer, ContextPtr->Timeout_mS, TU_MS_A, S_EVENT_TIMEOUT_A, &g_ALT_BS100_Sim, &alt_taken); ContextPtr->State_Previous = ST_STATE_IN_ALT_030_032_104_105_A; ContextPtr->State = ST_STATE_IN_ALT_030_032_104_105_END_A; ... DEBUG_PRINT_BS100_SIM_1_A } break; }Makroer i C og CSP-lag opp SDLDette er P_BS100_Sim hovedventestedKok fra SPoC (occam til C oversetteren)T (2004)Process i dette systemetvoid P_BS100_Sim (void) { ContextPtr_a ContextPtr = (ContextPtr_a)g_ThisExtPtr; switch (ContextPtr->State) { ... ST_INITIALIZING_A (Initialize) ... ST_STATE_IN_ALT_030_032_104_105_A ... --> ST_STATE_IN_ALT_030_032_104_105_END_A ... ST_STATE_OUT_031_A ... ST_STATE_OUT_033_A ... ST_STATE_OUT_110_A ... ST_STATE_OUT_999_A ... ST_STATE_OUT_999_HW_PIN_A ... ST_STATE_OUT_999_PRINT_A ... ST_STATE_OUT_END_A /// ... ST_STATE_STOPPED_A, (crash) ... default, (crash) } ... Common action: get more to do from workpool }Kommunikasjons-fase-tilstanderObs foldende programeditor... Inneholder C-kodeT (2004)Kommunikasjons-fase-tilstanderForsk p beskrive demi noen SDL-liknendekrusedullerLegg merke til work poolet tabelldrevet oppslagsverkProsessen skal jo ikke bareevent-drives utenframen ogs ta egne initiativT (2004)Mimre, mimretransputer 4x20Mbit/S linker, rtx scheduler og 1S prosess svitsjetidmerRAMDisplaykortLysflerKommKomm20 bit a/dLoaderkortPIC1995occam (her)C (UK)Inni 20kg EX boks med vinduLiterate programmingWord -> foldendeInstallert: ingen! - ikke alt man lager blir noe av!T (2004)CSP for Java = JCSPDenne koden henger ikke sammen, jeg har bare samlet noen godbitlinjerMen om du synes den ser spennende ut, se:http://www.cs.kent.ac.uk/projects/ofa/jcsp/http://home.no.net/oyvteig/pub/pub_details.html#ProtocolDesign import jcsp.awt.*; import jcsp.lang.*;public class Protocolclass MyProducer implements CSProcess private final ChannelOutput out; private Protocol prot; prot.transit (out);class MyConsumer implements CSProcess prot = (Protocol) in.read(); label = (Label) prot.read_Label(); prot.take_Element();class Test implements CSProcess{ public Test(){ final One2OneChannel c = new One2OneChannel (); MyProducer prod = new MyProducer(c); MyConsumer cons = new MyConsumer(c); new Parallel (new CSProcess[]{prod,cons}).run(); } public void run(){}}T (2004)ALT igjenJeg forstr ikke bruk av eksempelHvorfor viser de synkron retur fra en og samme klasse?Hvorfor ikke svar fra to parallelle aktive objekt?alt skal vre non-deterministic I eksempelet er det bare if-then-else?Side 106 i "The Unified Modeling Language Reference Manual, Second Edition", Rumbaug, Jacobson, Booch - ISBN 0-321-24562-8T (2004)SanntidspatologiDeadlock, livelock, starvationOperativsystem meldingsbuffer overflytHeap overflytStack overflytEn stack per prosess om vi har preemptive schedulingEn stor stack om kooperativ schedulingUten rekursjon kunne stacksize vrt beregnet av linkeren!State machine (deadlock, livelock, utsulting, stopp)Array index overflowT (2004)PROC som styrer over sin egen kroppRepetisjon: Synkrone kanaler og guardsmedfrer at en prosess som benytter slikekan styre andres bruk av segog kan velge ikke bli bruktIkke aksepter klasser og mekanismerhvor slikt ikke tilbys!T (2004)PROC som dr i lste favntakRepetisjon:for sterk binding (synkrone kanaler feil brukt)kan medfre at prosesser som benytter slikelettere enn ellers kan komme til vente p hverandre i lste favntak = vranglsFienden er lukkede sirkler av avhengighet! T (2004)Ikke alle favntak br begynne!RepetisjonTo kan holde p i et lukket favntakDet kan medfre eventuelt andre i rommet(ellers kalles det livelock)etter hvertm vente p de som er opptattTil slutt kan alle st som saltsttterog vente p hverandreIgjen: fjern lukkede sirkler av avhengighetT (2004)Litt for forte rTa pent imot UML 2.0Flg med i sammensmeltingen mellom object-begrepetog process / thread / taskObs p begrep som active object (spennende)Mange av basiskonseptene for sanntidsprogrammering ble funnet opp p 60-70 talletsemafor, guarded commandsmonitor ( Java Synchronized), SDL, CSP Ikke bare spis grandiosaen blant demDen er ikke s grand som du trorSend meg gjerne en mailDiplom, prosjektoppgaver?T (2004)App. (endix):Punkt som ble diskutert p de to presentasjonene som er gjort (NTNU og p AFS)derfor4 sider til T (2004)App. (1): Deadlock i asynkron komm.Asynkron kommunikasjon kan ogs g i vrangls!Enten p applikasjonsniv,eller p kjresystemniv:Buffere designes ofte med blokkerende semantikk nr de gr fulleI MPI message passing standarden kalles et safe system et som har null bufring og synkron komm.k-safe er et system som har k buffere og som garantert fungererT (2004)App. (2): Lett ikke vanskeligOm du benytter synkron kommunikasjon= null bufring og blokkeringog guarderog pakker inn delte ressurser i prosesser og designer bortvranglsutsultinglivelock er sanntidsprogrammering lett!Og, for all del legg in asynkronitet der det er ndvendig!All erfaring viser at du blir ferdig med slike system!og kan g videre og lage nye! (..i strre grad.. etc..)Det vil til slutt overbevise sjefen din!T (2004)App. (3): Gjr ? nr det er fulltDu kan benytte asynkrone meldingerog sjekke om det er plass i bufferet fr du senderDa unngr du meldingsoverflyt .... men adderer til gjengjeld kompleksitet i senderprosessenNr skal du prve igjen? (privat schedule)Nr skal du kaste? (undvendig overflyt?)Tenn rd lampe om du ser at prosessene dine driver med (mye?) privat schedulering av operativsystemmekanismerT (2004)App. (4): Blokkr hvis fulltAlternativt: asynkront til fullt .... S, ikke overflyt, men blokkeringSlettes ikke dumt, det heller!Promela:0 buffers Synkron og blokkerendeN buffers Asynkron s lenge det er plassSynkron og blokkerende nr fulltDETTE VAR ENDELIG SISTE FOILT (2004)T (2004)T (2004)