Hans Baumgartner nimi nimi nimi nimi. Reaaliaikakäyttöjärjestelmät



Samankaltaiset tiedostot
Käyttöjärjestelmät: prosessit

Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön?

Palvelut. Sulautetut järjestelmät Luku 2 Sivu 1 (??) Sulautetut käyttöjärjestelmät

Käyttöjärjestelmät: poissulkeminen ja synkronointi

4. Luento: Prosessit ja säikeets. Tommi Mikkonen,

Ongelma(t): Jotta tietokone olisi mahdollisimman yleiskäyttöinen ja suorituskykyinen, niin miten tietokoneen resurssit tulisi tarjota ohjelmoijalle,

Tietojenkäsittelyn perusteet 2. Lisää käyttöjärjestelmistä

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen,

PRINCIPLES OF PROGRAMMING LANGUAGES - DEBUGGER

Algoritmit 1. Luento 3 Ti Timo Männikkö

Yleistä. Esimerkki. Yhden palvelimen jono. palvelin. saapuvat asiakkaat. poistuvat asiakkaat. odotushuone, jonotuspaikat

Käyttöjärjestelmät. Teemu Saarelainen Tietotekniikka

Tietokonejärjestelmä. Tietokoneen rakenne. Ch 1 - Ch 8 [Sta06] Valikoituja paloja. TITO-kurssista. John von Neumann ja EDVAC, 1949.

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen

Stallings, Luku 4.1. KJ-I S2004 / Tiina Niklander, kalvot Auvo Häkkinen 4-1. KJ-I I S2004 / Tiina Niklander, kalvot Auvo Häkkinen 12-1

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä.

Arto Salminen,

Salasanojen hallinta. Salasanojen hallintaopas RESTAURANT ENTERPRISE SOLUTION

Sisältöä. Tietokoneen rakenne. Ch 1 - Ch 8 [Sta06] Valikoituja paloja TITO-kurssista. Tietokonejärjestelmä

Käyttöjärjestelmän rakenne

2 Konekieli, aliohjelmat, keskeytykset

Osio 2: Luennot 5-8 Muistinhallinta

Uudelleenkäytön jako kahteen

Jaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007

UML -mallinnus TILAKAAVIO

Monitorit. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5

Monitorit. Tavoite. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5. Minimoi virhemahdollisuuksia

Linux rakenne. Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat

A TIETORAKENTEET JA ALGORITMIT

1. Keskusyksikön rakenne

IT K 1 45 K ä yt t öj ä rj estelmät

6. Luento: Skedulointi eli Vuoronnus. Tommi Mikkonen,

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

OHJ-4301 Sulautettu Ohjelmointi

Prosessi perinteisesti

Tietorakenteet ja algoritmit

Stallings, Luku 4.1. KJ-I I S2005 / Tiina Niklander, kalvot Auvo HäkkinenH

CUDA. Moniydinohjelmointi Mikko Honkonen

Ohjelmointi 1. Kumppanit

Ongelma(t): Jotta tietokonetta voitaisiin käyttää monipuolisesti ja mahdollisimman yksinkertaisesti kaikkiin sille soveltuviin käyttötarkoituksiin,

Jakso 8 Ohjelman toteutus järjestelmässä

Osio 2: Luennot 4-7 Muistinhallinta

Harjoitustyö: virtuaalikone

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

18. Abstraktit tietotyypit 18.1

Tehtävä 2: Tietoliikenneprotokolla

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Stabilointi. Marja Hassinen. p.1/48

Tieto- ja tallennusrakenteet

11/20: Konepelti auki

Rinnakkaisuuden hyväksikäyttö peleissä. Paula Kemppi

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

LoCCaM Riistakamerasovellus. Dimag Ky dimag.fi

Visual Voic -version 8.5 ja uudempien pikaopas

HARJOITUSTYÖ: LabVIEW, Liiketunnistin

Käyttöjärjestelmät II

Lyhyt kertaus osoittimista

Jakso 8 Ohjelman toteutus järjestelmässä

Ohjelmoinnin perusteet Y Python

Jakso 8 Ohjelman toteutus järjestelmässä. Prosessi Prosessin esitysmuoto järjestelmässä Käyttöjärjestelmä KJ-prosessit

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Luento 8 Ohjelman toteutus järjestelmässä

Luento 8 Ohjelman toteutus järjestelmässä. Prosessi Prosessin esitysmuoto järjestelmässä Käyttöjärjestelmä KJ-prosessit

Transaktiot - kertausta

TK Palvelinympäristö

BaseMidlet. KÄYTTÖOHJE v. 1.00

Käyttöjärjestelmät II

Linux. 00 Keskeiset piirteet. Unix ja Linux Helsingin ammattikorkeakoulu Stadia Vesa Ollikainen (muokannut M.Mäki-Uuro) Kysymyksiä

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

ROSSI-AVR Versio 1.1, päivitetty

TIES530 TIES530. Moniprosessorijärjestelmät. Moniprosessorijärjestelmät. Miksi moniprosessorijärjestelmä?

Febdok 6.0, Uudet ominaisuudet OHJEISTUS

Action Request System

Android. Sähköpostin määritys. Tässä oppaassa kuvataan uuden sähköpostitilin käyttöönotto Android Ice Cream Sandwichissä.

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Luento 10: Tosiaikakäyttöjärjestelmät

HARJOITUSTYÖ: LabVIEW, Kiihtyvyysanturi

Algoritmit 1. Luento 4 Ke Timo Männikkö

Sisältö. Luento 10: Tosiaikakäyttöjärjestelmät. Ominaisuuksia. Arkkitehtuuriratkaisuja. Sulautettu järjestelmä: Useita ohjaavia prosessoreja

Hälyri-tietojärjestelmän järjestelmätestaussuunnitelma ja -raporttimalli

IIO30220 Database Management / Tietokannan hallinta TAPAHTUMIEN HALLINTA JOUNI HUOTARI ( )

Luottamuksellinen sähköposti Trafissa

Luento 1 Tietokonejärjestelmän rakenne

Tervetuloa tutustumaan Seure Keikkanetti -mobiilisovellukseen!

Yleiskuva. Käyttöjärjestelmät II. Tietokonejärjestelm. rjestelmä. KJ ja laitteistopiirteet. KJ ja laitteistopiirteitä.

Prosessi (4) Luento 8 Ohjelman toteutus järjestelmässä. Prosessi. Prosessin vaihto (4)

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Ohje luottamuksellista tietoa sisältävien sähköpostiviestien lähettämiseen ja vastaanottamiseen

Ohjelmoinnin perusteet Y Python

Prosessi (4) Jakso 8 Ohjelman toteutus järjestelmässä. Prosessi. Prosessin vaihto (4) Prosessin elinkaari (9)

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

OHJELMISTOKEHITYS -suuntautumisvaihtoehto

Novapoint Finnish Value Pack Asennusohje Mar-06 1(5)

Kortinhaltijat joilla on maksukeskeytys Maksuryhmään liitettyjen kortinhaltijoiden lukumäärä, joiden maksut ovat tilapäisesti keskeytetty.

jotakin käyttötarkoitusta varten laadittu kokoelma toisiinsa liittyviä säilytettäviä tietoja

16. Ohjelmoinnin tekniikkaa 16.1

Käyttöjärjestelmien historia. Joni Herttuainen Henri Jantunen Markus Maijanen Timo Saksholm Johanna Tjäder Eetu Turunen

Transkriptio:

Hans Baumgartner nimi nimi nimi nimi Reaaliaikakäyttöjärjestelmät

ii TIIVISTELMÄ Hans Baumgartner nimi nimi nimi nimi Reaaliaikakäyttöjärjestelmät Käyttöjärjestelmät Seminaarityö 2009 23 sivua, 8 kuvaa Tarkastaja: Professori nimi nimi Hakusanat: kerneli, reaaliaikakäyttöjärjestelmät, RTOS, sulautetut järjestelmät, uc/os-ii, Reaaliaikakäyttöjärjestelmät ovat pääasiassa sulautetuissa järjestelmissä käytettäviä ohjelmistoja, joiden tarkoitus on lisätä laitteiston luotettavuutta ja monipuolisuutta. Reaaliaikakäyttöjärjestelmät koostuvat prosessoria ja suoritettavia tehtäviä hallinnoivista palveluista, joiden lähdekoodi on valmiiksi kirjoitettu ja optimoitu äärimmäistä luotettavuutta vaativiin käyttökohteisiin. Seminaarityössä on esitelty reaaliaikakäyttöjärjestelmien ominaisuuksia sekä esitelty yleisimpiä käytössä olevia käyttöjärjestelmiä.

iii ABSTRACT Hans Baumgartner name name name name Real-time operating systems Operating Systems Seminar Work 2009 23 pages, 8 figures Examiner: Professor name name Keywords: embedded systems, kernel, real-time operating systems, RTOS, uc/os-ii Real-time operating systems are mainly used in embedded systems. The purpose of using real-time operating system is to increase the reliability and diversity of the system. Real-time operating systems consist of services which controls the processor and tasks. The source code of real-time operating system is prewritten and optimised to use in application demanding extreme reliability. In the seminar work there has been presented common features of real-time operating systems. At the end of the work there s also mentioned some examples of commonly used real-time operating systems.

1 SISÄLLYS TIIVISTELMÄ... ii ABSTRACT... iii KÄYTETYT MERKINNÄT JA LYHENTEET... 2 1. JOHDANTO... 3 2. REAALIAIKAKÄYTTÖJÄRJESTELMIEN YLEISIÄ OMINAISUUKSIA... 4 3. REAALIAIKAKÄYTTÖJÄRJESTELMÄN RAKENNE... 6 3.1 Tehtävät... 6 3.2 Kernel... 7 3.3 Kello... 9 3.4 Muistinhallinta... 9 4. OPASTEET... 12 5. PRIORITEETIN MUUNNOKSET... 13 6. LUKKIUTUMINEN... 15 7. VIESTIT... 16 7.1 Postilaatikot... 16 7.2 Viestijonot... 16 8. ERILAISIA REAALIAIKAKÄYTTÖJÄRJESTELMIÄ... 17 8.1 Qnx Neutrino RTOS... 17 8.2 Free RTOS... 17 9. YHTEENVETO... 18 LÄHTEET... 19

2 KÄYTETYT MERKINNÄT JA LYHENTEET A/D CPU FIFO ISR LIFO PC RTOS SP Analog to Digital Central Processing Unit First In First Out Interrupt Service Routine Last In First Out Personal Computer Real-Time Operating System Stack Pointer

3 1. JOHDANTO Reaaliaikakäyttöjärjestelmät ovat pääasiassa sulautetuissa järjestelmissä käytettäviä käyttöjärjestelmiä, joiden avulla voidaan lisätä järjestelmän luotettavuutta huomattavasti. Sulautettuja järjestelmiä löytyy esimerkiksi puhelimista, autoista, kodinkoneista, roboteista, avaruusaluksista, jne. Yksinkertaisia järjestelmiä pystytään kohtalaisen helposti toteuttamaan ilman käyttöjärjestelmääkin, mutta järjestelmän monimutkaistuessa ja kasvaessa on jonkin valmiin käyttöjärjestelmän käyttäminen yleensä järkevin vaihtoehto. Seminaarityössä on perehdytty reaaliaikakäyttöjärjestelmien ominaisuuksiin ja käyttöön yleisesti sekä esitelty muutamia käyttöjärjestelmiä ja niiden sovelluskohteita.

4 2. REAALIAIKAKÄYTTÖJÄRJESTELMIEN YLEISIÄ OMINAISUUKSIA Reaaliaikakäyttöjärjestelmällä tarkoitetaan lähinnä sulautetuissa järjestelmissä käytettävää käyttöjärjestelmää, jonka tarkoitus on parantaa järjestelmän toiminnan ennustettavuutta. Myös PCtietokoneille (personal computer) voidaan portata reaaliaikakäyttöjärjestelmiä, mutta useimmiten sovellukset ovat mikrokontrolleripohjaisia. Yksinkertaiset järjestelmät eivät välttämättä tarvitse käyttöjärjestelmäksi luokiteltavaa ohjelmistoa toimiakseen, vaan ne voivat toimia esimerkiksi antureita tarkkailemalla ja/tai keskeytysten avulla. Suurin osa massatuotantoon tarkoitetuista laitteista, kuten mikroaaltouunit, lelut ja puhelimet toimivatkin ilman oikeaa käyttöjärjestelmää [1]. Kuvassa 1 on esitetty kaavio tällaisen foreground/background-järjestelmäksi kutsutun toteutuksen periaatteesta. Kuva 1 Foreground/background-järjestelmä [1] Alusta lähtien itse tehty sovellus muuttuu kuitenkin nopeasti ainakin kokemattoman ohjelmoijan käsissä epävakaaksi järjestelmäksi, joka ei kaikissa olosuhteissa toimi oletetulla tavalla. Tavallisessa työpöytäkäytössä olevan PC-tietokoneen ajoittainen kaatuminen tai uudelleenkäynnistys ei useinkaan ole kovin vakava ongelma, mutta lentokoneissa tai lääketieteessä käytettävissä laitteissa järjestelmän kaatuminen voi olla kohtalokasta. Reaaliaikakäyttöjärjestelmän

5 yksi tarkoitus onkin huolehtia siitä, että järjestelmässä ei pääse tapahtumaan datan korruptoitumista tai mitään muuta, joka voisi aiheuttaa järjestelmän toiminnan lakkaamisen. Käyttöjärjestelmän suunnittelija on pyrkinyt ottamaan huomioon kaikki seikat, jotka voivat aiheuttaa järjestelmään epävakautta, jolloin varsinaisen sovelluksen suunnittelija voi keskittyä ainoastaan järjestelmän tehtävien kuvaamiseen. Luotettavuuden lisäksi toinen reaaliaikakäyttöjärjestelmän merkittävimmistä ominaisuuksista on nimensä mukaisesti ajan hallinta. Reaaliaikakäyttöjärjestelmät voidaan jakaa pehmeisiin ja koviin käyttöjärjestelmiin. Pehmeissä käyttöjärjestelmissä käyttöjärjestelmän on vastattava tehtävien pyyntöihin mahdollisimman nopeasti, mutta tehtävän suoritus ei ole yhtä aikakriittistä. Kovissa käyttöjärjestelmissä taas sekä tehtävän pyyntöön vastaaminen, että tehtävän suoritus on tapahduttava mahdollisimman nopeasti.

6 3. REAALIAIKAKÄYTTÖJÄRJESTELMÄN RAKENNE 3.1 Tehtävät Reaaliaikakäyttöjärjestelmän tehtäviä nimitetään taskeiksi [2]. Monissa käyttöjärjestelmissä taskien lukumäärälle on asetettu jokin yläraja, mutta periaatteessa taskeja voisi olla kuinka paljon tahansa. Käytettävien prosessorien muisti ja teho kuitenkin rajoittavat suoritettavien tehtävien lukumäärää huomattavasti. Tyypillisesti jokainen tehtävä on oma taskinsa, esimerkiksi lämpötilan mittaus voisi olla yksi taski ja lämpötilan näyttö näytöllä toinen taski. Reaaliaikakäyttöjärjestelmän idea on, että jokaista taskia suoritetaan rinnakkain, eikä peräkkäin kuten tavallisesti ilman käyttöjärjestelmää toimivassa laitteessa. Kuvassa 2 on esitetty yksinkertaisen reaaliaikakäyttöjärjestelmän avulla toimivan lämpömittarin periaatteellinen toiminta. Kuva 2 Lämpömittarin reaaliaikaohjelmiston periaatteellinen toiminta Kuvan 2 kuvaaman reaaliaikakäyttöjärjestelmän päällä toimivan lämpömittarin toiminta on yksinkertaistettuna seuraava: käyttöjärjestelmälle tehdään tarvittavat alustukset, alustetaan suoritettavat taskit ja käynnistetään ne. Tämän jälkeen luotuja taskeja suoritetaan rinnakkain. Taskeja ei kuitenkaan suoriteta tasavertaisesti rinnakkain, vaan taskeille on annettu prioriteetit. Suuremman prioriteetin taskit suoritetaan aina ennen alemman prioriteetin taskeja. Esimerkiksi lämpömittarissa suurimman prioriteetin taski on lämpötilan mittaus ja lämpötilan näyttö näytöllä on alemman prioriteetin tehtävä. Käyttöjärjestelmästä riippuen taskeilla voi olla myös sama prioriteetti, jolloin saman prioriteetin taskeille annetaan jokin vakio suoritusaika, jonka jälkeen siirrytään seuraavaan saman prioriteetin taskiin. Kyseistä aikataulutusta kutsutaan round-robin -aikatauluksi.

7 Käyttöjärjestelmästä riippuen taskeilla on useampia tiloja, joiden vaihdosta huolehtii käyttöjärjestelmän kerneli. Esimerkiksi µc/os-ii -reaaliaikakäyttöjärjestelmässä taski voi olla viidessä tilassa, jotka ovat lepotila, valmis, suorituksessa, odottaa ja keskeytetty [1]. Vastaavasti VxWorks-reaaliaikakäyttöjärjestelmän tilat ovat odottaa, valmis, viivästetty ja keskeytetty [2]. Valmis tilan nimi on siinä mielessä hieman hämäävä, että se ei tarkoita sitä, että taskin suoritus olisi valmis, vaan että taski on valmis suoritettavaksi. Kuvassa 3 on esitetty VxWorks-käyttöjärjestelmän tilat ja funktiot, joiden suorituksessa taskin tila vaihtuu. Kuva 3 Taskin tilojen muutokset VxWorks-reaalikaikakäyttöjärjestelmässä [3] Kuvan 3 funktiot on nimetty johdonmukaisesti kuvaamaan toimintaa, jonka funktio suorittaa. Nimistä voidaan nähdä reaaliaikakäyttöjärjestelmän tärkeitä toiminnallisuuksia, kuten viestit (msg), opasteet (sem) ja viiveet (delay). Näistä myöhemmin lisää. 3.2 Kernel Käyttöjärjestelmän sydäntä kutsutaan kerneliksi eli ytimeksi. Kernelin tehtävänä on hallita prosessorin suoritinaikaa ja jakaa sitä taskien kesken. Reaaliaikakäyttöjärjestelmien ominaisuuksiin

kuulu olennaisena osana multitasking eli taskien moniajo. Kernelin tehtävänä on huolehtia, että kaikki taskit saavat tarvitessaan suoritinaikaa taskin prioriteetin määrittämässä järjestyksessä. 8 Aikatauluttaja eli dispatcher on kernelin osa, joka huolehtii keskeytyksen tapahtuessa siitä, mitä taskia aletaan suorittaa. Suurin osa käytettävistä reaaliaikakäyttöjärjestelmistä on prioriteettipohjaisia, jolloin suorittimen saa aina käyttöönsä suurimman prioriteetin tehtävä [1]. Kernelit voidaan jakaa aikatauluttajan toiminnan perusteella kahteen ryhmään, keskeyttäviin (preempive) ja ei keskeyttäviin (non-preemptive). Keskeyttävässä ytimessä korkeimman prioriteetin tehtävä saa välittömästi suorittimen käyttöönsä keskeytyksen jälkeen. Ei keskeyttävässä ytimessä taas suoritettavan tehtävän täytyy itse luovuttaa prosessori muiden taskien käyttöön. Keskeytyksen sattuessa ei keskeyttävässä ytimessä keskeytys ainoastaan laittaa tarvittavan taskin valmis tilaan ja jatkaa keskeytetyn taskin suoritusta, kunnes keskeytetty taski itse luovuttaa prosessorin muiden käyttöön. Kuva 4 havainnollistaa keskeyttävän ja ei keskeyttävän ytimen eroa. Kuva 4 Vasemmalla ei keskeyttävän kernelin vaste keskeytykseen (ISR, Interrupt Service Routine) ja oikealla keskeyttävän ytimen toiminta keskeytyksen tapahtuessa. [1] Kuvasta 4 voidaan havaita keskeyttävän ytimen suorittavan korkeimman prioriteetin taskin välittömästi tämän vaatiessa suoritinaikaa. Tästä syystä suurin osa kaupallisista reaaliaikakäyttöjärjestelmistä on keskeyttävällä ytimellä toimivia [1]. Ei keskeyttävällä ytimellä on kuitenkin omat hyvät puolensa, vaikka sen vasteajat korkeimman prioriteetin taskin suoritukseen ovatkin pidemmät kuin keskeyttävällä ytimellä. Esimerkiksi yhteisten resurssien kuten

yhteiskäytössä olevien muuttujien suojaamiseen ei ei keskeyttävässä ytimessä tarvitse kiinnittää niin paljon huomiota kuin keskeyttävässä ytimessä. Tästä lisää opasteiden ja viestien yhteydessä. 9 3.3 Kello Kellokeskeytys on käyttöjärjestelmässä oleva keskeytys jolla on erityinen merkitys. Ulkoisten keskeytysten, kuten signaalin kytkeytymisen tai A/D-muunnos (Analog to Digital) keskeytysten lisäksi reaaliaikakäyttöjärjestelmissä on tasaisin aikavälein tapahtuva kellokeskeytys. Kellokeskeytys voi tapahtua esimerkiksi 10 tai 100 millisekunnin välein. Keskeytyksen avulla voidaan laskea aikaa sekä asettaa taskeille erilaisia viiveitä. Kun taskille asetetaan jokin viive, se siirtyy käyttöjärjestelmästä riippuen, viivästettyyn tilaan, jonka aikana suoritetaan muita taskeja. [4] Esimerkiksi säätölaiteessa, jossa varsinainen säätö on suurimman prioriteetin tehtävä, voidaan säädölle asettaa viive, jonka säädin odottaa säätökierrosten välissä. Itse asiassa ilman viivettä käyttöjärjestelmä ei voisi edes suorittaa muita tehtäviä, sillä suurimman prioriteetin tehtävä veisi koko prosessorin suoritinajan. Keskeyttävässä järjestelmässä kellokeskeytys myös siirtyy jokaisen sykäyksen jälkeen suorittamaan suurimman prioriteetin tehtävää, joka vaatii suoritinaikaa. [1] 3.4 Muistinhallinta Reaaliaikakäyttöjärjestelmät toimivat tavallisesti pienissä, mikrokontrolleripohjaisissa laitteissa, joissa on erittäin rajallinen määrä muistia käytettävissä. Tämän takia ohjelmoijan sekä käyttöjärjestelmän täytyy huolehtia hyvin muistinhallinnasta. Jokaiselle taskille on varattu oma pino muistista, johon tallennetaan prosessorin rekisterien arvot sekä taskin tarvitsemien muuttujien arvot. Rekisterien arvot tallennetaan taskin suorituksen alussa ja palautetaan takaisin rekistereihin taskin suorituksen lopuksi. Tällä voidaaan varmistua, siitä, että taskit toimivat itsenäisesti, eivätkä pääse tahattomasti muuttamaan toisen taskin käyttämiä rekistereitä. Kuva 5 havainnollistaa muistinjakoa. [1]

10 Kuva 5 Reaaliaikakäyttöjärjestelmän muistin rakenne [1] Kuvasta 5 nähdään jokaisella taskilla olevan oma pinonsa. Taskikohtainen Task Control Block sisältää tiedon pinon sijainnista muistista, eli osoittimen pinon alkuun (Stack Pointer, SP). Käytettävissä oleva muisti on jaettu lohkoihin, joita jaetaan taskeille. Jokaiselle taskille on varattu muistilohkoja tietty määrä, joka voi vaihdella eri taskien välillä. Tavallisesti sovellukset saavat käyttöönsä jonkin määrän vakiokokoisia muistilohkoja, mutta tarvittaessa muisti voidaan jakaa myös erikokoisiin lohkoalueisiin, jolloin taskit voivat saada käyttöönsä erikokoisia muistilohkoja. Kuva 6 havainnollistaa muistin jakoa erikokoisia lohkoja sisältäviin alueisiin. [1]

Kuva 6. Muisti voidaan tarvittaessa jakaa erikokoisia muistilohkoja sisältäviin muistialueisiin [1] 11

12 4. OPASTEET Tietorakenne ja ohjelmakoodit voidaan suojata esimerkiksi buzz lock:lla tai opasteilla (semaphore). Buzz lock tarkoittaa yksittäistä kokonaislukukenttää, jota käytetään lukkona. Lukko sallii vain jonkun tietyn prosessin pääsyn tietorakenteeseen tai koodiin samanaikaisesti. Kun prosessi yrittää päästä johonkin tietorakenteen kriittiseen osioon, lukon arvo muutetaan nollasta ykköseksi. Prosessin jättäessä kriittisen osion muutetaan lukon arvo takaisin ykkösestä nollaksi. Tietorakenteeseen pääsyä hallitseva muisti sijaitsee ytimessä ja sitä ei voida häiritä millään muulla prosessilla. [1] Ensimmäinen prosessi, joka lukee lukon arvon olevan nolla, pääsee kriittisiin osioihin käsiksi. Opasteet ovat tästä kehittyneempi tapa hallita ja käyttää kriittisiä osioita. Opastetietorakenne sisältää lukuisia tietoja liittyen prosessien vaiheista ja lukumääristä. Tietorakenne pitää kirjaa tietorakenteeseen pyrkivien resursseja käyttöön haluavien prosessien määrästä (Count), nukkuvien prosessien määrästä (Waking), jonossa olevien prosessien määrästä (Wait queue) ja buzz lock tiedot nukkuvat prosessit kenttään pääsyä varten (Lock). [1] Count-kentän alkuarvo on 1 ja kun joku prosessi haluaa päästä käyttämään resurssia, niin alkuarvoa vähennetään yhdellä. Tämän jälkeen prosessi on varannut resurssin ja muut prosessit eivät voi käyttää resurssia. Jos jokin prosessi yrittää päästä käyttämään resurssia, niin count-kentän arvo vähenee yhdellä miinus yhteen ja siirtyy odotusjonoon. Kun prosessi lopettaa resurssin varauksen niin lopettamisen yhteydessä tarkistaa luvun ja mikäli luku on alle yhden, prosessi herättää seuraavaan odotusjonossa. [1]

13 5. PRIORITEETIN MUUNNOKSET Tavallisesti taskien prioriteetit ovat määritelty kiinteästi alustusten yhteydessä. Tämä aiheuttaa kuitenkin helposti ongelmia taskien suorituksen aikana. Kuvassa 6 on esitetty tyypillinen prioriteettiongelma. Kuva 7 Prioriteetin muunnos [1] Kuvassa 7 taski 1 ja taski 2 molemmat odottavat tapahtumaa ja taski 3 on ajossa. Taski 3 varaa opasteen, jota tarvitsee suoritukseen. Taskin 1 odottama tapahtuma keskeyttää taskin 3, jolloin kerneli alkaa suorittaa korkeamman prioriteetin taskia numero 1. Taskia 1 suoritetaan kunnes taski tarvitsee resurssin käyttöönsä (taskin 3 varaama opaste). Koska resurssi on taskin 3 käytössä, task 1 asetetaan odottamaan resurssin vapautumista. Kerneli jatkaa nyt taskin 3 suoritusta, kunnes taskin 2 odottama tapahtuma keskeyttää sen. Kerneli siirtyy suorittamaan taskia 2, suorittaa sen loppuun ja siirtyy takaisin taskin 3 suoritukseen. Taski 3 suoritetaan loppuun ja resurssi vapautetaan. Kerneli tietää nyt, että korkeamman prioriteetin taski 1 odottaa kyseistä resurssia ja alkaa suorittaa taskia 1. Edellisessä esimerkissä taskin 3 prioriteetti oli näennäisesti suurempi, kuin taskilla 1. Myös taski 2 suoritettiin ennen taskia 1, jolloin taskin 1 suoritusaika kasvoi edelleen. Kyseistä tilannetta

kutsutaan prioriteetin muunnokseksi. Tilanteelta voidaan välttyä esimerkiksi korottamalla taskin 3 prioriteettia, kunnes taski vapauttaa varaamansa resurssin. 14

15 6. LUKKIUTUMINEN Lukkiutuminen (deadlock) on tilanne, jossa kaksi taskia ovat tietämättään odottamassa toisen hallussa olevaa resurssia. Otetaan esimerkki jossa taski 1 pitää hallussaan resurssia R1, sekä taski 2, jolla on resurssi R2. Taski 1 tarvitsee resurssia R2 ja taski 2 resurssia R1. Koska molemman taskit odottavat toiselta vapautuvaa resurssia, ei kummankaan taskin suoritus voi jatkua. Kyseistä tilannetta kutsutaan lukkiutumiseksi. Ongelma voidaan välttää esimerkiksi siten, että taskit saavat kaikki tarvitsemansa resurssit ennen suorituksen alkamista, saavat kaikki resurssit samassa järjestyksessä ja antavat ne pois käänteisessä järjestyksessä. Myös aikarajoja (timeout) on mahdollista määritellä opasteiden saamiseen useissa kerneleissä. Tämä ominaisuus sallii lukkiutumisen purkamisen, mikäli opaste ei ole saatavilla aikarajan sisällä. Taskille täytyy tässä tapauksessa palauttaa virhekoodi, jottei se luule saaneensa resurssia. Lukkiutuminen on melko harvinaista sulautetuissa järjestelmissä, mutta laajemmissa systeemeissä ilmiö esiintyy yleisemmin. [1]

16 7. VIESTIT 7.1 Postilaatikot Monesti taskien täytyy vaihtaa tietoa keskenään. Reaaliaikakäyttöjärjestelmien kerneli tarjoaa viestien välittämiseen palvelun, jota kutsutaan postilaatikoksi (message mailbox). Tavallinen toteutustapa viestien välittämiseen on viestin lähettäminen osoittimen avulla. Tällöin varsinaista viestiä ei lähetetä taskien välillä, vaan postilaatikko sisältää osoittimen viestiin. Viesti voi olla esimerkiksi tietorakenne tai merkkijono. Postilaatikon käyttö viestien lähettämiseen mahdollistaa taskeille monia lisäominaisuuksia. Taski voi esimerkiksi jäädä tilaan, jossa se odottaa viestiä postilaatikosta ja jatkaa toimintaansa, kun on saanut viestin. Tekniikassa on selvä yhtäläisyys opasteen kanssa, joten postilaatikkoa voidaan käyttää myös opasteena. Taskeille on järkevää antaa aikaraja, jonka taski odottaa viestiä postilaatikosta. Mikäli postilaatikkoon ei saavu viestiä aikarajan sisällä. Palautuu odottavalle taskille virhekoodi, jolloin taskin suoritusta voidaan jatkaa. Kuvassa 8 on esitetty postilaatikon käyttö viestin välittämiseen. Kuva 8 Postilaatikon välityksellä taskit voivat lähettää viestejä toisilleen. Kuvan tiimalasi kuvaa aikarajaa, jonka jälkeen viestiä odottavalle taskille lähetetään virheilmoitus, joka kertoo aikarajan ylityksestä. [1] 7.2 Viestijonot Postilaatikko sallii ainoastaan yhden viestin välittämisen kerrallaan. Mikäli taskit vaativat useamman viestin lähettämistä samaan aikaan, voidaan käyttää viestijonoa. Käytännössä viestijono on taulukko postilaatikoita, joten jonon toimintaperiaate on samanlainen postilaatikon kanssa.

17 8. ERILAISIA REAALIAIKAKÄYTTÖJÄRJESTELMIÄ Markkinoilla on lukuisia reaaliaikakäyttöjärjestelmätoimittajia, jotka tarjoavat erilaisia palveluita erilaisiin käyttöympäristöihin ja sovelluskohteisiin. Sovelluskohteet ulottuvat lääketieteellisistä instrumenteista verkkoreitittimiin. [1] 8.1 Qnx Neutrino RTOS Qnx Neutrino eroaa muista reaaliaikakäyttöjärjestelmistä kernelin rakenteen osalta. Qnx:n kerneli koostuu palveluista, jotka voidaan ottaa käyttöön tai poistaa käytöstä tarpeen mukaan. Tämä tekee kernelistä hyvin skaalautuvan ja pienikokoisen. Neutrino RTOS on mikrokernel käyttöjärjestelmä, jossa ajurit, ohjelmat, protokollapinot ja tiedostorakenteet ovat kaikki erillisinä osioina. Qnx Neutrino on käytössä muun muassa 911-puhelinkeskuksissa, teollisuusprosessinhallintasovelluksissa ja lentoliikenteeseen liittyvissä järjestelmissä. [5] 8.2 Free RTOS Free RTOS on nimensä mukaisesti ilmainen reaaliaikakäyttöjärjestelmä. Free RTOS:n lähdekoodia vertaamalla µc/os-ii käyttöjärjestelmään voidaan havaita samankaltaisuuksia. Käyttöjärjestelmä on GPL-lisenssoitu, joten sitä tietyin ehdoin voi käyttää kaupallisiin tarkoituksiin. Käyttöjärjestelmän avoimen lähdekoodin vuoksi se tukee lähes kaikkia prosessoriperheitä. Free RTOS on myös aloittelijaystävällinen yksinkertaisuutensa ja hyvän dokumentaation vuoksi. [6]

18 9. YHTEENVETO Pääasiassa sulautetuissa järjestelmissä käytettävät reaaliaikakäyttöjärjestelmät mahdollistavat luotettavampien ja monimutkaisempien järjestelmien toteuttamisen verrattuna perinteisiin, ilman käyttöjärjestelmää toimiviin toteutuksiin. Käyttöjärjestelmät ovat kuitenkin verrattain monimutkaisia ja niiden käyttäminen vaatii enemmän perehtymistä. Vaikka reaaliaikakäyttöjärjestelmät muodostuvatkin useammasta osasta ja vaikuttavat monimutkaisilta, lisää käyttöjärjestelmän käyttäminen sovellusten luotettavuutta ja ylläpidettävyyttä merkittävästi. Reaaliaikakäyttöjärjestelmien luotettavuus perustuu valmiiksi kirjoitettuihin käyttöjärjestelmän osiin, joten käyttöjärjestelmän käyttäjän ei tarvitse huolehtia itse esimerkiksi muistinhallinnasta, muuttujien suojauksesta ja tehtävien ajoituksista. Markkinoilla on useita eri käyttötarkoituksiin ja prosessoriperheisiin soveltuvia reaaliaikakäyttöjärjestelmiä, joiden ominaisuudet poikkeavat hieman toisistaan.

19 LÄHTEET [1] Labrosse, Jean, MicroC/OS-II The Realtime Kernel, 2002 [2] Luukko, Julius, Real-time operating systems and programs [luentomoniste], 2008 [3] VxWorks Programmer's Guide 5.5, Wind River, 2003 [4] Stallings, William, Operating Systems Internals and Design Principles, 2005 [5] QNX News Releases, http://www.qnx.com/news/pr_2471_2.html, 27.4.2009 [6] The FreeRTOS.org Project, http://www.freertos.org/, 27.4.2009