- Reaaliaikaisen järjestelmän on tuotettava oikeita tuloksia tiukkojen aikarajojen sisällä, koordinoidusti fyysisten prosessien ja deterministisen käyttäytymisen kanssa.
- STR-arkkitehtuuri yhdistää tietyn laitteiston, RTOS:n, ajoitusalgoritmit (kuten EDF) ja turvalliset samanaikaisuusmekanismit.
- Luotettavuus, turvallisuus, vikasietoisuus ja ajallinen tehokkuus ovat keskeisiä vaatimuksia esimerkiksi teollisuudessa, liikenteessä, puolustuksessa, televiestinnässä ja lääketieteessä.
- Reaaliaikaiset käyttöjärjestelmät (RTOS) ja reaaliaikaiset ohjelmointikielet mahdollistavat sulautettujen sovellusten suunnittelun, jotka pystyvät reagoimaan ulkoisiin tapahtumiin rajoitetuilla ja ennustettavilla latensseilla.
Reaaliaikaiset elektroniset järjestelmät ovat syvästi juurtuneet jokapäiväiseen elämäämme, vaikka ne jäävät usein huomaamatta. Auton turvatyynyistä lennonjohtoon ja jopa yksinkertaiseen mikroaaltouuniin – kaikki riippuu tietokonejärjestelmästä, joka ei ainoastaan tee asioita oikein, vaan tekee ne juuri sillä hetkellä . Jos aikaraja ylittyy, edes hieman, sitä pidetään epäonnistumisena, vaikka laskelma olisi täydellinen.
Näiden järjestelmien kauneus (ja haaste) piilee niiden tarpeessa olla vuorovaikutuksessa fyysisen maailman kanssa hyvin tietyillä aikajanoilla . Pelkkä "nopeus" ei riitä: niiden on oltava ennustettavia, vakaita ja synkronoituja tietokoneen ulkopuolella tapahtuvien asioiden kanssa. Tästä syystä reaaliaikaisen järjestelmän suunnittelu, analysointi ja testaus ovat huomattavasti monimutkaisempia kuin perinteisen, yleiskäyttöisen järjestelmän.
Mikä on reaaliaikainen järjestelmä ja miten se eroaa nopeasta järjestelmästä?
Reaaliaikainen järjestelmä (RTS) on pohjimmiltaan digitaalinen järjestelmä, joka ohjaa tai valvoo fyysistä prosessia selkeillä aikarajoituksilla. Sen on paitsi tuotettava loogisesti oikeita tuloksia, myös taattava, että vastaus saapuu määritellyn ajan kuluessa; tämän määräajan noudattamatta jättäminen katsotaan järjestelmävirheeksi.
Selkeitä esimerkkejä tästä käyttäytymisestä ovat auton turvatyynyn tai ABS-jarrujen aktivoituminen , ilmassa olevan pallon kiinniottaminen robotin toimesta tai nykyaikaisen ajoneuvon moottorinohjausjärjestelmän toiminta. Kaikissa näissä tapauksissa viivästynyt reaktio, jopa muutaman millisekunnin verran, voi olla hyödytön tai jopa vaarallinen.
Sana ”aika” tarkoittaa tässä yhteydessä, että oikea toiminta riippuu siitä, milloin reaktio tapahtuu , ei vain siitä, mitä se on. Ja ”todellinen” viittaa siihen, että järjestelmän on reagoitava ulkoisiin tapahtumiin niiden todellisen kehityksen aikana käyttäen aikaskaalan, joka on yhdenmukainen sen hallitseman fyysisen ympäristön kanssa.
Tämä on vastakohta yksinkertaisesti "nopealle" järjestelmälle, jossa ainoa tärkeä asia on, että tuloste näkyy mahdollisimman nopeasti ilman, että sitä tarvitsee synkronoida ulkomaailman kanssa. Hyvin tehokas web-palvelin voi olla nopea, mutta se ei välttämättä ole reaaliaikainen järjestelmä, jos sillä ei ole tiukkoja fyysisiin tapahtumiin sidottuja aikarajoja.
On myös tärkeää erottaa ne verkkojärjestelmistä : nämä voivat aina olla yhteydessä ja vastata pyyntöihin (esimerkiksi selain tai varausjärjestelmä), mutta niiden ei tarvitse noudattaa fyysisten prosessien kanssa koordinoituja jäykkiä aikarajoja, joten ne eivät ole automaattisesti reaaliaikaisia järjestelmiä. Nykyaikaisissa verkkosovelluksissa reaaliaikainen haku voi kuitenkin vaatia samanlaisia viiveitä ja takeita.
Käytännön esimerkki: liikennevalojen ohjaus risteyksessä
Hyvin havainnollistava esimerkki reaaliaikaisista sähköisistä järjestelmistä on vilkkaan risteyksen liikennevalojen ohjausjärjestelmä . Pelkkä valojen vaihtaminen "enemmän tai vähemmän" ajallaan ei riitä; päätöksiä on tehtävä jatkuvasti kadulla tapahtuvien asioiden perusteella.
Ensin seurataan liikennettä . Kaistoille ja suojateille sijoitetaan antureita (induktiosilmukoita, kameroita, infrapuna-antureita jne.) ajoneuvojen ja ihmisten havaitsemiseksi. Nämä laitteet lähettävät jatkuvasti dataa keskusohjaimelle, joka saa siten ajantasaista tietoa ympäristöstä.
Ohjauskeskuksessa sulautettu tietokone käsittelee dataa reaaliajassa ja soveltaa algoritmeja , jotka laskevat jonossa olevien ajoneuvojen määrän, kunkin kaistan käyttöasteen ja odottavien jalankulkijoiden määrän. Näiden tietojen perusteella se määrittää, kuinka kauan liikennevalojen kunkin vaiheen tulisi kestää kumpaankin suuntaan.
Seuraavaksi tulee päätöksenteko . Järjestelmä päättää esimerkiksi pidentää vihreää valoa ruuhkaisimmassa suunnassa liikenneruuhkien vähentämiseksi tai priorisoida jalankulkijoiden suojatietä, jos se on odottanut liian kauan. Nämä päätökset perustuvat ennalta määriteltyihin optimointikäytäntöihin sekä turvallisuus- ja liikennevirtavaatimuksiin.
Kun päätös on tehty, ohjain toimii valoja ohjaavien toimilaitteiden mukaan . Se muuttaa liikennevalojen tilaa millisekunnin tarkkuudella noudattaen keltaista, punaista, lukitustoimintoja ja muita turvallisuusvaatimuksia varmistaen sujuvan siirtymisen vaiheiden välillä.
Kaikki tämä tapahtuu jatkuvan optimoinnin avulla : järjestelmä valvoo liikennettä keskeytyksettä ja säätää vihreiden, keltaisten ja punaisten valojen ajoituksia reaaliajassa sopeutuakseen äkillisiin muutoksiin (liikenneruuhka, ohi ajava ambulanssi, liikennevirran vaihtelut tiettyinä vuorokaudenaikoina jne.). Tämä osoittaa selvästi, miksi puhumme reaaliajasta: ohjauslogiikka on järkevää vain, jos päätökset toteutetaan tiettyjen aikarajojen sisällä.
Reaaliaikaisten järjestelmien historia ja kehitys
Reaaliaikaisen laskennan alkuperä liittyy läheisesti 1900-luvun jälkipuoliskolla tapahtuneeseen teollisuus- ja ilmailuprosessien ohjaukseen . Jo vuonna 1965 julkaistiin viiteteoksia, jotka loivat perustan näille järjestelmille, ja pian sen jälkeen, vuonna 1973, Liu ja Layland virallistivat aikataulutuksen matemaattisen määritelmän tiukoissa ja joustavissa reaaliaikaisissa järjestelmissä.
Tietokonesimulaatiossa termiä "reaaliaikainen simulointi" alettiin käyttää, kun tietokonemalli toimi yhtä nopeasti kuin sen edustama fyysinen prosessi . Tämä toi esiin klassisen dilemman: joko lisätä mallin tarkkuutta nopeuden kustannuksella tai vähentää tarkkuutta reaaliaikaisen suorituskyvyn saavuttamiseksi tai ylittämiseksi.
Sama tapahtui graafisten käyttöliittymien ja pelimoottorien kanssa : jotta kokemus olisi sujuva, niiden on reagoitava riittävän nopeasti käyttäjän syötteisiin ja kohtauksen muutoksiin ylläpitäen korkeaa ja vakiota ruutujen määrää sekunnissa.
60- ja 70-luvuilta lähtien reaaliaikaiset järjestelmät ovat kypsyneet korkean profiilin, jotkut lähes katastrofaalisista, tosielämän tapauksista saatujen kokemusten ansiosta, mikä on auttanut hiomaan aika-analyysi- ja suunnittelutekniikoita.
Merkittäviä tapauksia: Apollo 11 ja Mars Pathfinder
Yksi reaaliaikaisen laskennan varhaishistorian kuuluisimmista tapahtumista oli Apollo 11:n kuumoduulin tietokoneen ylikuormitus . Laskeutumisen aikana ohjausjärjestelmä alkoi antaa hälytyksiä (kuten kuuluisa 1202), jotka osoittivat, että prosessori oli jäljessä työmäärästään.
Tehtäväraporttien mukaan, jos hälytykset olisivat jatkuneet, miehistön navigointitietojen luotettavuus olisi vaarantunut ja tehtävä olisi saatettu keskeyttää. Lopulta aiempien simulaatioiden ja kokemusten perusteella päätettiin jatkaa, ja Eagle-moduuli laskeutui onnistuneesti Kuuhun.
Pohjimmiltaan kyse oli prosessorin ylikuormituksesta : laskentaa tehtiin enemmän kuin keskusyksikkö pystyi käsittelemään annetussa ajassa, varsinkin kun hälytykseen liittyvä prosessointi lisättiin normaaliin työmäärään. Tämä tapaus korosti riittävien resurssien ylläpitämisen tärkeyttä järjestelmissä, joissa vikaantumisen kustannukset ovat kohtuuttomat.
Toinen hyvin tutkittu tapaus on Mars Pathfinder -luotain . Tässä ongelma ei ollut niinkään raakadatan ylikuormitus, vaan pikemminkin prioriteetin inversiona tunnettu ilmiö, joka aiheutti määräaikojen menetyksiä, vaikka suorittimella oli näennäisesti kohtuullinen kapasiteettimarginaali.
Preemptiivisessä ajoitusjärjestelmässä prioriteetin inversio tapahtuu, kun korkean prioriteetin tehtävä estyy jaetun resurssin (kuten mutexin) omistavan matalan prioriteetin tehtävän toimesta ja samaan aikaan keskitason prioriteetin tehtävä keskeyttää matalan prioriteetin tehtävän. Seurauksena on, että kriittinen tehtävä estyy epäsuorasti vähemmän tärkeän tehtävän toimesta, mikä rikkoo reaaliaikaiset takuut.
Tämän riskin lieventämiseksi käytetään prioriteetin periytymisprotokollaa . Kun korkean prioriteetin tehtävä estyy alemman prioriteetin tehtävän toimesta, ajoitusohjelma nostaa tilapäisesti matalan prioriteetin tehtävän prioriteetin korkean prioriteetin tehtävän tasolle. Tämä estää keskitason prioriteetin tehtäviä keskeyttämästä sitä, jolloin ajastin voi vapauttaa resurssin mahdollisimman nopeasti ja palata sitten alkuperäiseen prioriteettiinsä.
Nämä tapaukset tekivät selväksi, että STR:n suunnittelussa ei ole kyse pelkästään "riittävän suorittimen käyttövaran" varmistamisesta, vaan myös aikataulutus- ja ajoitusteorian ymmärtämisestä sekä koko järjestelmän (laitteisto, laiteohjelmisto ja ohjelmisto) väliaikaisesta testaamisesta yhdessä.
Reaaliaikaisen järjestelmän peruskomponentit
Tyypillinen STR koostuu erikoislaitteiston, ohjelmiston ja fyysisen prosessin rajapintaelementtien yhdistelmästä . Se ei ole pelkkä ohjelma; se on integroitu järjestelmä, jonka on reagoitava ulkoisiin ärsykkeisiin tunnetuissa aikaväleissä.
Fyysisellä puolella järjestelmä on ohjattava : se voi olla mikä tahansa säädettävissä oleva prosessi, kuten teollisuuslaitos, moottori, tuotantolinja, liikennevalo, robotti tai lääkinnällinen laite. STR mittaa tilaansa ja suorittaa ohjaustoimenpiteitä pitääkseen sen haluttujen parametrien sisällä.
Fyysisen maailman ja tietokoneen välissä on signaaliliitäntä , joka koostuu analogia-digitaalimuuntimista (ADC) ja digitaali-analogiamuuntimista (DAC) sekä sovituspiireistä. Tämä kerros mukauttaa jännitteitä, virtoja ja signaalimuotoja, jotta digitaalinen järjestelmä voi lukea ja tuottaa ne.
Keskeinen elementti on reaaliaikainen kello , joka tuottaa säännöllisiä keskeytyksiä jokaisessa näytteenottojaksossa. Tämä synkronoi tiedonkeruun, ohjauksen ja aktivoinnin tehtävät varmistaen, että mittaukset ja komennot annetaan juuri silloin, kun niiden pitäisi.
Järjestelmään kuuluu tyypillisesti ihmiskäyttöinen konsoli käynnistys- ja pysäytysohjaimilla, käyttöliittymät parametrien säätämiseen ja mekanismit manuaalisten tilojen pakottamiseksi. Lisäksi näyttöjä käytetään tilojen, hälytysten, trendien ja muiden prosessin seurantaan liittyvien tietojen näyttämiseen.
Merkittävät tilamuutokset tallennetaan reaaliaikaiseen tietokantaan , jonka avulla voidaan kirjata tapahtuneesta, tutkia vikoja ja kerätä tilastoja hallinnan parantamiseksi. Nämä historiatiedot kasvavat ajan myötä ja ohjaavat ylläpitoa, optimointia ja uudelleensuunnittelua koskevia päätöksiä.
Monissa teollisuusympäristöissä on etävalvontajärjestelmä , joka mahdollistaa laitoksen valvonnan ja joissakin tapauksissa jopa ohjauksen hajautetuista ohjauskeskuksista. Tämä on olennaista silloin, kun yksi laitos on riippuvainen toisesta (esimerkiksi laitos, joka toimittaa raaka-aineita toiselle), ja yhdessä tehdyt päätökset vaikuttavat koko ketjuun.
STR-ohjaimen ytimessä on sulautettu tietokone , jonka ohjelmisto on yleensä jaettu useisiin erityyppisiin moduuleihin: digitaaliset ohjausalgoritmit (säätimet, suodattimet, takaisinkytkentäsilmukat), tiedonkeruu, osoite- ja hallintaliittymät sekä suora vuorovaikutus käyttäjän kanssa.
Keskeiset ominaisuudet: aika, samanaikaisuus, turvallisuus ja tehokkuus
Reaaliaikaiset järjestelmät käsittelevät tyypillisesti suuria ja monimutkaisia ongelmia , joihin liittyy useita muuttujia, ulkoisia laitteita ja muuttuvia olosuhteita. Tämä edellyttää huolellista huomiota arkkitehtuuriin, suunnitteluun ja tehtävien välisiin kommunikaatiomekanismeihin.
Koska data tulee fyysisestä maailmasta, järjestelmän on käsiteltävä reaalilukuja (liukulukuja, kiinteän mittakaavan jne.), jotka edustavat suureita, kuten lämpötilaa, painetta, nopeutta tai jännitettä. Esityksen ja laskennan tarkkuus voi olla ratkaisevan tärkeää ohjauksen laadun kannalta.
Turvallisuus ja luotettavuus ovat yleensä kriittisiä: vika voi aiheuttaa vakavia taloudellisia menetyksiä, omaisuusvahinkoja, henkilövahinkoja tai ympäristövaikutuksia. Siksi integroidaan vikasietoisuustekniikoita, redundanssia ja hallittua heikkenemistä koskevia strategioita.
Samanaikaisuus on toinen määrittelevä ominaisuus. STR suorittaa tyypillisesti useita tehtäviä loogisesti rinnakkain: anturien lukemista, ohjausta, tiedonsiirtoa, lokinnusta , käyttöliittymää jne. Tämä edellyttää jaettujen resurssien hallintaa, kilpailutilanteiden välttämistä ja sen varmistamista, että kriittiset osiot eivät ylitä määräaikoja.
Tehokkuus ei ole luksusta, se on välttämättömyys. STR:n on oltava loogisesti ja ajallisesti oikein , mutta myös optimoitu hyödyntämään täysimääräisesti suoritinta, muistia ja I/O-laitteita. Haasteena on löytää tasapaino ajoitusmarginaalin, laitteistokustannusten ja ohjelmiston monimutkaisuuden välillä.
Tulo-/lähtölaitteet ovat tyypillisesti erikoistuneita ja tiiviisti kytkettyjä fyysiseen prosessiin . Emme puhu vain geneerisistä porteista, vaan kenttäväylistä, älykkäistä antureista ja tiedonsiirtoprotokollista, jotka on suunniteltu minimoimaan viive ja varmistamaan tiukat toimitusajat.
Reaaliaikaisten järjestelmien tyypit: kovat, pehmeät ja kiinteät
Riippuen siitä, kuinka vakavasti ajoitusvirheitä ne käsittelevät, STR-viat luokitellaan useisiin luokkiin. Kovassa reaaliaikaisessa järjestelmässä kaikkia määräaikoja on noudatettava poikkeuksetta. Yksikin vika voi johtaa vakaviin seurauksiin tai ainakin mitätöidä tuloksen.
Tyypillisiä esimerkkejä kovista reaaliaikaisista järjestelmistä ovat lennonjohto, tietyt kriittiset lääketieteelliset järjestelmät ja sähköinfrastruktuurin suojaus. Näissä tapauksissa oikea, mutta viivästynyt tulos on hyödytön; järjestelmä on suunniteltava siten, että se ei missään ennakoitavissa olevassa skenaariossa epäonnistu aikarajan noudattamisessa.
Pehmeät reaaliaikaiset järjestelmät sallivat satunnaisia viiveitä. Tuloksen käyttökelpoisuus heikkenee viiveen myötä, mutta se voi silti olla käyttökelpoinen. Näin on multimedia- tai tiedonkeruusovelluksissa, joissa muutamat kadonneet ruudut tai viivästyneet näytteet heikentävät laatua, mutta järjestelmä toimii edelleen.
Näiden kahden ääripään väliin sijoittuvat tiukat reaaliaikaiset järjestelmät . Näissä satunnaisia viiveitä siedetään, mutta kun vastaus saapuu myöhässä, siitä tulee arvoton ja se hylätään. Klassisia esimerkkejä ovat reaaliaikainen video- tai tietoliikennejärjestelmät: myöhässä saapuva kehys hylätään synkronoinnin ylläpitämiseksi.
Arkkitehtuurit: avoin/suljettu ja keskitetty/hajautettu
Reaaliaikaiset järjestelmät voidaan luokitella myös niiden teknologisen avoimuuden asteen mukaan . Yksilölliset järjestelmät käyttävät suljettuja teknologioita ja protokollia, joita hallinnoi yksi toimittaja, mikä voi tarjota hyvän suorituskyvyn, mutta rajoittaa yhteentoimivuutta ja kehitystä.
Avoimet järjestelmät sitä vastoin käyttävät julkisia standardeja ja protokollia , jotka helpottavat eri valmistajien komponenttien integrointia, ohjelmistojen uudelleenkäyttöä ja asteittaista siirtymistä uusille alustoille.
Toinen tärkeä ero on keskitettyjen ja hajautettujen järjestelmien välillä . Keskitetyssä lähestymistavassa pääsolmu vastaa viestinnän ja kriittisen prosessoinnin koordinoinnista, kun taas muut solmut toimivat suhteellisen yksinkertaisina päätteinä tai oheislaitteina.
Hajautetussa arkkitehtuurissa prosessointi ja tiedonsiirto on jaettu useiden älykkäiden solmujen kesken, jotka toimivat enemmän tai vähemmän itsenäisesti. Tämä mahdollistaa skaalautuvuuden, redundanssin ja läheisyyden fyysiseen prosessiin, mutta vaikeuttaa aikasynkronointia ja yleistä koordinointia.
Determinismi, keskeytyslatenssi ja reagointikyky
Determinismi on SRT:iden ydinominaisuus: se on kyky ennustaa suurella todennäköisyydellä, kuinka kauan tehtävän aloittaminen ja suorittaminen kestää . Kyse ei ole mahdollisimman nopeasta suorituksesta, vaan tunnetusta ja rajatusta vasteajasta.
Keskeytyslatenssi mittaa aikaa ulkoisen keskeytyksen syntymisestä (esimerkiksi anturin raportoimasta tapahtumasta) siihen, kun järjestelmä alkaa käsitellä sitä. Tämä arvo on kriittinen, koska monet palvelupyynnöt ovat peräisin fyysisestä ympäristöstä eivätkä siedä mielivaltaisia viiveitä.
Reagointikyky keskittyy siihen aikaan, joka tehtävän suorittamiseen kuluu keskeytyksen hyväksymisen jälkeen . Se sisältää tekijöitä, kuten palvelurutiinin käynnistysajan, siihen liittyvän prosessoinnin keston ja sisäkkäisten keskeytysten tai ennakkorajoitusten vaikutuksen.
Järjestelmän karakterisoimiseksi suoritetaan tyypillisesti determinismin ja reagointikyvyn kvantitatiivinen analyysi: esimerkiksi voidaan vaatia, että 95 % tehtävistä suoritetaan tietyssä ajassa . Tämän jälkeen RTOS:ssa toimivat sovellukset on suunniteltava siten, että ne eivät joudu pahimman mahdollisen odotetun suorituskykyalueen sisälle.
Järjestelmän ohjaus prosessien ja luotettavuuden avulla
Monissa kehittyneissä reaaliaikaisissa järjestelmissä sovellusprosesseilla itsellään on erittäin tarkka hallinta järjestelmään . Ne voivat eksplisiittisesti määrittää prioriteettinsa, muistivaatimuksensa (mikä osa tulisi tallentaa välimuistiin, mikä vaihtokäytäntö on sallittu jne.) ja tarvitsemansa käyttöoikeudet.
Vaikka se saattaa ensi silmäyksellä vaikuttaa anarkistiselta mallilta, se perustuu itse asiassa hyvin määriteltyihin prosessityyppeihin ja selkeisiin rajoituksiin . On yleistä asettaa vaatimuksia, kuten: "ylläpitoprosessit eivät saa ylittää 3 %:n suorittimen käyttöä, paitsi selkeästi määriteltyjen matalan kuormituksen ikkunoiden aikana."
Luotettavuus on enemmän kuin pelkkää satunnaisten häiriöiden puuttumista. Verkkopalveluntarjoajan (NSP) on ylläpidettävä palvelun laatua sovittujen rajojen sisällä pitkiä aikoja ja taattava, että vasteajat täyttävät vaatimukset jopa kohtuullisten häiriöiden sattuessa.
Lisäksi tarvitaan vikasietoisuutta : jos ilmenee vakava ongelma (laitteistovika, inhimillinen virhe, ulkoinen häiriö), järjestelmän on säilytettävä mahdollisimman paljon tietoa ja toiminnallisuutta ja heikennettävä toimintaansa priorisoimalla korkeimman prioriteetin kriittisiä tehtäviä.
Kielet ja reaaliaikainen ohjelmointi
Käytännössä monet reaaliaikaiset järjestelmät (RTS) ovat sulautettuja ja niiden on oltava vuorovaikutuksessa lukuisten ulkoisten komponenttien kanssa, mikä tekee samanaikaisesta ohjelmoinnista ja suorasta laitteen ohjauksesta välttämätöntä. Nykyaikaiset ohjelmointikielet tarjoavat primitiivit säikeistyksiin, kommunikointiin ja synkronointiin, mutta niitä on käytettävä erittäin huolellisesti reaaliaikaisissa sovelluksissa, erityisesti web-kehyksissä ja reaaliaikaisissa palveluissa, kuten Laravelissa.
Toteutuksen tehokkuus on avainasemassa: "kauniit" kieliominaisuudet voivat tulla kalliiksi vasteajan, suorittimen käytön tai muistin kulutuksen suhteen . Siksi sulautetuissa järjestelmissä jokainen abstraktio arvioidaan huolellisesti ennen käyttöönottoa.
Kaksi reaaliaikaisessa maailmassa näkyvästi läsnä olevaa kieltä ovat Ada ja Java reaaliaikaisilla laajennuksilla . Ada on suunniteltu erityisesti tukemaan kriittisiä järjestelmiä, ja siihen on tehty parannuksia sen ominaisuuksien vahvistamiseksi tällä alueella.
Javan tapauksessa reaaliaikaisia toimintoja lisättiin myöhemmin spesifikaatioilla, kuten Real-Time Specification for Java ja Real-Time Core Extension, jotka esittelevät RTOS:lle paremmin sopivia muisti- ja ajoitusmalleja.
Reaaliaikaiset käyttöjärjestelmät (RTOS)
Reaaliaikainen käyttöjärjestelmä (RTOS) on ydinohjelmisto , joka tarjoaa kehyksen, jolle tiukkojen aikarajojen omaavat sovellukset rakennetaan. Sen palveluiden (ajoitus, keskeytykset, synkronointi, I/O jne.) on toimittava ennustettavasti.
Toisin kuin yleiskäyttöinen käyttöjärjestelmä, RTOS on optimoitu suorittamaan toistuvia tehtäviä erittäin tiukoissa aikarajoissa . Tavoitteena ei ole "tehdä paljon asioita", vaan varmistaa, että tärkein tehtävä suoritetaan silloin, kun sen pitäisi, ilman yllätyksiä.
Siksi ne ovat yleensä paljon kevyempiä järjestelmiä, joissa ei ole graafisia yksityiskohtia tai tarpeettomia palveluita, joiden koko on vain muutama megatavu ja suunnittelufilosofia on minimalistinen. Vähemmän koodia tarkoittaa vähemmän odottamatonta viivettä ja vähemmän vikaantumiskohtia , mikä sopii reaaliaikaisiin vaatimuksiin.
Historiallisesti RTOS-järjestelmien kehitys alkoi 60- ja 70-luvuilla sotilas-, ilmailu- ja teollisuussovelluksiin. Seuraavina vuosikymmeninä syntyi kaupallisia tuotteita, kuten VxWorks, QNX ja Solariksen reaaliaikaiset variantit , joita käytettiin laajalti televiestinnässä, autoteollisuudessa ja sulautetuissa järjestelmissä.
Esineiden internetin (IoT) yleistyessä 2000- ja 2010-luvuilla kevyet RTOS:t, kuten FreeRTOS, ovat tulleet erittäin suosituiksi vähän virtaa kuluttavissa verkkoon kytketyissä laitteissa. Samaan aikaan on ehdotettu reaaliaikaisia POSIX-laajennuksia käyttöliittymien yhtenäistämiseksi ja ohjelmistojen siirrettävyyden helpottamiseksi.
Nykyään monet RTOS:t integroituvat tekoälyyn ja koneoppimistekniikoihin aikataulutuksen optimoimiseksi, vikojen ennustamiseksi ja ohjausparametrien mukauttamiseksi ajonaikana. Kaikki tämä tietenkin samalla, kun keskitytään aikatakuisiin.
RTOS-markkinoiden arvo on useita miljardeja dollareita, ja niiden odotetaan kasvavan tasaisesti tulevina vuosina lääkinnällisten laitteiden, teollisuusautomaation, autoteollisuuden ja kriittisten infrastruktuurijärjestelmien vauhdittamana.
Vaatimukset, jotka hyvän RTOS:n on täytettävä
Nykyaikaisen RTOS:n on oltava moniajokykyinen ja ennakoiva , jotta se voi ennakoida alemman prioriteetin tehtäviä ja suorittaa välittömästi kiireellisemmän tehtävän. Prioriteettiin perustuva ajoitus on vallitseva paradigma: se suorittaa aina tärkeimmän tehtävän, joka on valmis suoritettavaksi.
Lisäksi sen on tarjottava viestintä- ja synkronointimekanismeja (jonoja, semaforeja, mutekseja, tapahtumia), jotka on suunniteltu minimoimaan tarpeetonta estoa ja välttämään ilmiöitä, kuten prioriteetin inversiota, soveltamalla periytymisprotokollia tai prioriteetin rajoitusta tarvittaessa.
On olennaista, että RTOS:n ajoituskäyttäytyminen ymmärretään hyvin : maksimikeskeytyslatenssit, kontekstinvaihtoajat, synkronointiprimitiivien suoritusajat jne. Ilman näitä tietoja on mahdotonta osoittaa, että sovellus noudattaa määräaikojaan.
Aikataulutusalgoritmit: EDF ja muut mallit
Tehtävien ajoitus on yksi reaaliaikaisten järjestelmien kulmakivistä. Yksi tutkituimmista algoritmeista on Earliest Deadline First (EDF) , dynaamisesti priorisoitu ajoittaja, joka on optimaalinen monissa reaaliaikaisissa yhteyksissä.
EDF priorisoi tehtäviä niiden absoluuttisen valmistumispäivämäärän perusteella : lähimpänä olevalla määräajalla olevalla tehtävällä on korkein prioriteetti millä tahansa hetkellä. Tämä varmistaa tietyissä olosuhteissa, että jos on olemassa toteuttamiskelpoinen suunnitelma, joka täyttää kaikki määräajat, EDF löytää sen.
Tämä algoritmi on ennaltaehkäisevä: jos tehtävän suorituksen aikana saapuu toinen tehtävä, jolla on kiireellisempi määräaika, järjestelmä voi keskeyttää nykyisen tehtävän ja varata suorittimen uudelle. EDF toteutetaan tyypillisesti käyttämällä prioriteettijonoa, joka on järjestetty määräaikaan jäljellä olevan ajan mukaan.
Yksi EDF:n eduista on, että se voi saavuttaa lähes 100 %:n suorittimen käyttöasteen pitäen samalla aikataulut, edellyttäen, että tehtäväjoukko on aikataulutettavissa. Lisäksi se mukautuu hyvin dynaamisiin ympäristöihin, joissa aikataulut tai arvioidut suoritusajat muuttuvat.
Jos esimerkiksi prosessit P1 ja P2 ovat eri jaksoilla ja laskenta-ajoilla varustettuja, EDF antaa aina etusijan sille instanssille, jonka absoluuttinen määräaika on lähempänä, ja vuorottelee sen suoritusta uusien aktivointien saapuessa ja määräaikojen uudelleenlaskennan yhteydessä.
EDF:llä on kuitenkin myös haittapuolensa. Erittäin suurten työmäärien ja usein tapahtuvien muutosten tilanteissa sen tehokas käyttöönotto voi olla monimutkaista, ja tietyissä olosuhteissa suhteellisen pitkien määräaikojen tehtävissä voi ilmetä nälkäongelmia.
Muita tunnettuja reaaliaikaisia algoritmeja ovat Rate Monotonic (RM) ja Deadline Monotonic (DM) , jotka käyttävät kiinteitä prioriteetteja tehtävien ajanjakson tai suhteellisen aikataulun perusteella. Kummallakin on omat optimaalisuusehtonsa ja ensisijainen sovellusalueensa.
Reaaliaikaisten järjestelmien tyypillisiä sovelluksia
STR-laitteita on kaikkialla. Prosessiteollisuudessa niitä käytetään elintarvikkeiden, juomien, kemikaalien, lääkkeiden jne. tuotantolinjojen ohjaamiseen ja valvontaan varmistaen, että keskeiset muuttujat pysyvät rajoissa ja että lopputuotteella on odotettu laatu.
Liikenteessä lentokoneet, junat, autot ja laivat ovat riippuvaisia reaaliaikaisista navigointi-, ohjaus- ja turvallisuusjärjestelmistä . Näitä ovat ABS-jarrut, luistonesto ja ajonvakautus sekä raide- ja meriliikenteen hallintajärjestelmät.
Nykyaikainen televiestintä perustuu reaaliaikaiseen tiedonkulun hallintaan nopeissa verkoissa: pakettikytkentä, reaaliaikainen äänen ja videon siirto, palvelun laadun varmistus ja viiveen vähentäminen ovat tehtäviä, joissa määräaikojen noudattaminen on olennaista.
Puolustusalalla valvonta-, tutka-, elektroninen sodankäynti- ja kyberturvallisuusjärjestelmät käyttävät reaaliaikaisia alustoja uhkien havaitsemiseen ja niihin reagoimiseen millisekunneissa tai vähemmän, suojellen kriittistä infrastruktuuria ja strategisia resursseja.
Lääketieteessä laitteet, kuten elintoimintojen monitorit, hengityskoneet, sydämentahdistimet tai infuusiopumput, toimivat reaaliaikaisen ohjelmiston avulla, jonka on reagoitava turvallisesti potilaan tilan muutoksiin. Määräaikojen noudattamatta jättäminen voi johtaa hengenvaarallisiin seurauksiin.
Digitaalisen maailman ulkopuolella reaaliaikaisuutta voidaan havaita myös biologisissa prosesseissa. Esimerkiksi siemen itää vain, kun ympäristöolosuhteet ovat tietyissä rajoissa ja aikarajoissa (kosteus, lämpötila, valo). Jos se itäisi heti maata kosketettuaan, näitä aikarajoja noudattamatta, se ei todennäköisesti selviäisi. Tämä on hyödyllinen metafora siitä, miten järjestelmä, joka ei sopeudu ajalliseen ympäristöönsä, voi epäonnistua.
Kokonaiskuvaa tarkasteltaessa tieteelliset ja teknologiset tekniikat (STR) kattavat televiestinnän, multimedian, teollisuuden ohjauksen, robotiikan, avioniikan, rautatiet, autoteollisuuden, kodinkoneet, tieteelliset kokeet ja lääketieteelliset järjestelmät . Ja lista kasvaa jatkuvasti uusien teknologioiden kehittyessä.
Kaikissa näissä ympäristöissä tarvitaan erityisiä reaaliaikaisia tiedonsiirtoprotokollia , kuten CAN, Token Bus, TDMA-TTP, mukautettu CSMA/CD tai positiivisen kuittauksen tai uudelleenlähetyksen (PAR) menetelmät, jotka lyhentävät lähetysaikoja ja takaavat datan saapumisajankohdan.
Kaiken tämän rinnalla on hiottu omaa reaaliaikaista ohjelmistokehitystä, jossa tiedonkulkumenetelmät, tietorakenteet ja olio-orientaatio on mukautettu kuvaamaan keskeytyksiä, kontekstimuutoksia, asynkronista viestintää ja virheistä palautumista vaikeiden aikavaatimusten mukaisesti.
Kaiken edellä mainitun perusteella käy selvemmäksi, miksi reaaliaikaiset järjestelmät ovat nykyään olennainen osa modernia teknologista infrastruktuuria: ne vastaavat tuhansista kriittisistä ja jokapäiväisistä prosesseista, jotka toimivat turvallisesti, luotettavasti ja ilman, että käyttäjän tarvitsee miettiä kaikkea, mitä "kulissien takana" tapahtuu sekunnin murto-osissa.