Reaalaja operatsioonisüsteem

Allikas: Vikipeedia

Reaalaja operatsioonisüsteem (RTOS) reaalajaliste rakenduste jooksutamiseks disainitud operatsioonisüsteem. Neid kasutatakse reaalajasüsteemides.

Reaalaja operatsioonisüsteemide võtmetunnuseks on rakenduste nõuete vastuvõtmisele ja täitmisele kuluva aja, kosteaja, pidevus ja ette ennustatus.[1] Reaalaja operatsioonisüsteemid jagunevad rangeteks ning nõrkadeks reaalaja operatsioonisüsteemideks. Range reaalaja operatsioonisüsteem on pidevam ja paremini ette ennustatava ajalise kasutusega kui nõrk reaalaja operatsioonisüsteem. Reaalaja operatsioonisüsteem, mis enamasti või tavaliselt suudab täita tähtaegu on nõrk reaalaja operatsioonisüsteem. Kui süsteem suudab tähtaegu alati deterministlikult täita on tegemist range süsteemiga. Põhiline disainiprobleem ei ole mitte kõrge läbilaskevõime vaid tagatud nõrk või range jõudluskategooria.[2]

Reaalaja operatsioonisüsteemide tähtsaks osaks on ressursijaotusega tegelev arenenud plaanurid. Paindlik ja keeruline plaanur lubab küll erinevamate prioriteetidega rakenduste hulka, aga reaalaja operatsioonisüsteemid on enamasti pühendatud kitsamale kasutusvaldkonnale. Võtmetegurid on katkestuste ja lõimevahetuse minimaalne latents. Reaalaja operatsioonisüsteemi puhul väärtustatakse rohkem kui kiirelt ja etteaimatavalt see suudab reageerida, mitte see kui palju tööd ajaühikus ära tehakse.

Disainifilosoofia[muuda | redigeeri lähteteksti]

Levinumad disainid on järgmised:

  • sündmustel põhinev, mis aktiveerib tegumeid ainult siis, kui kõrgema prioriteediga tegum vajab tegemist;
  • aega jagavaid tegumeid vahetatakse kindla intervalliga – järjestikplaanur

Aega jagavad disainid aktiveerivad tegumeid tihemini kui rangelt vaja oleks, aga meed annavad ladusama multitegumtöö, tekitades illusiooni, et protsess või kasutaja kasutab arvutit üksi.

Vanad protsessorid vajasid tegumi vahetamiseks palju tsükleid, mille ajal protsessor ei saanud midagi kasulikku teha. Näiteks 20 MHz 68000 protsessoril (tavaline 1980. aastate lõpus) kulus tegumi vahetamiseks umbes 20 mikrosekundit. 2008. aastast pärit 100 MHz ARM-iga protsessoril kulub selleks alla 3 mikrosekundi. Sel põhjusel üritasid varajased operatsioonisüsteemid suurendada kiirust vahetades tegumeid võimalikult harva.[3][4]

Ressursijaotus[muuda | redigeeri lähteteksti]

Tavaliselt on protsessidel kolm staatust:[5]

  • Täitmisel (kasutab talle määratud protsessoriressurssi)
  • Täitmiseks valmis (ootab tööjärjekorras protsessoriressursi vabanemist)
  • Blokeeritud (ootab sündmust, näiteks sisend-väljundseadme vastust)

Enamus protsessid on suurema osa ajast blokeeritud või täitmiseks valmis, sest enamasti saab samal ajal ühe protsessori peal töötada ainult üks tegum. Järjekorras ootavate protsesside arv võib olla väga erinev, ning sõltub töötavate tegumite hulgast ja süsteemi kasutatavast plaanurist.

Tegumitevaheline suhtlus ja ressursside jagamine[muuda | redigeeri lähteteksti]

Multitegumtöötlusega süsteemid peavad andmeid ja riistvara ressursse protsesside vahel jagama. Kui samal ajal üritavad mitu protsessi samale ressursile ligi pääseda tekivad ette ennustatamatud olukorrad. On kolm enam levinud lahendust selle probleemiga võitlemiseks.

Katkestuste ajutine väljalülitamine[muuda | redigeeri lähteteksti]

Tavalised operatsioonisüsteemid ei luba kasutaja programmidel katkestusi välja lülitada, sest niiviisi võiks kasutaja programm kontrollida protsessorit nii kaua kui tahab. Modernsed protsessorid ei luba kasutaja programmidel katkestusi keelata, sest sellist kontrolli peetakse võtmetähtsusega operatsioonisüsteemi ressurssiks. Paljud manussüsteemid ja reaalaja operatsioonisüsteemid, lubavad kõigil programmidel tuuma õigustes töötada, et tagada suurem süsteemikutse efektiivsus, ning lubada suuremat kontrolli riistvara üle.

Kui tegum töötab tuuma õigustes ühe protsessoriga süsteemis ja omab õigust katkestusi keelata, on nende väljalülitamine tihti parim (väikseima kuluga) lahendus takistamaks samaaegseid ligipääsemisi jagatud ressursile. Keelatud katkestustega ajal on protsessil eksklusiivne õigus protsessorile, sest mitte ükski teine tegum ega katkestus ei saa käivituda, seeläbi on kriitiline osa kaitstud. Kui tegum lõpetab kriitilise töö, peab ta katkestused uuesti sisse lülitama. Kui ootel oli katkestusi siis need käivituvad seejärel. Ajutiselt katkestuste keelamist peaks kasutama ainult siis kui kõige pikem tee läbi kriitilise osa võtab vähem aega kui maksimaalne katkestuse latents. Seda viisi kasutatakse enamasti siis kui kriitiline kood on mõned masinkäsud pikk ja ei sisalda tsükleid. Näiteks on see ideaalne kaitsmaks riistvara seadeid muutvaid registreid nende muutmise ajal.

Binaarne semafor[muuda | redigeeri lähteteksti]

Kui kriitiline kood on pikem kui mõni rida koodi või sisaldab endas tsükleid, peab reaalaja operatsioonisüsteem kasutusele võtma tavalistes operatsioonisüsteemides kasutatavad lahendused.

Binaarne semafor on lukus lahti või lukus. Kui see on lukus peab tegum ootama kuni see lukust lahti võetakse. Semoforidel on ka hulk teada olevaid probleeme – näiteks õiguste ümberpöördumine ja ummik.

Sõnumite saatmine[muuda | redigeeri lähteteksti]

Veel üks viis ressursside jagamiseks tegumite vahel, on organiseeritud sõnumite saatmise skeem. Sellises raamistikus omab ainult üks tegum otseselt ressurssi. Kui teine protsess tahab juurdepääsu ressursile saadab ta sõnumi haldavale protsessile. Kuigi nende reaalajaline käitumine on halvem kui semafori süsteemidel, õnnestub lihtsatel sõnumeid saatvatel süsteemidel võidelda paremini ummikute vastu.

Katkestuste juhtija ja plaanur[muuda | redigeeri lähteteksti]

Kuna katkestuste juhtija plokid on kõige kõrgema prioriteediga jooksev tegum ja reaalajasüsteemide lõime vahetuse aega hoitakse minimaalsena, on katkestuste kood võimalikult lühike. Enamasti katkestuse kood lihtsalt teadvustab katkestuse toimumist ja paneb vastava riistvaralise töö madalama prioriteediga juhtprogrammile, näiteks lukustades semafori lahti või saates teate. Tavaliselt pakuvad plaanurid viisi, kuidas katkestuse seest tegumeid lahti lukustada.

Mäluhaldus[muuda | redigeeri lähteteksti]

Mäluhaldus on reaalaja operatsioonisüsteemis palju tähtsamal kohal kui tavalistes operatsioonisüsteemides. Mälu eraldamise kiirus on väga tähtis. Tavalised mäluhaldus süsteemid otsivad vaba mäluosa teadmata pikkusega ahelloendist. Reaalaja operatsioonisüsteemi vaatepunktist on see lubamatu, sest mälu eraldamine peab toimuma kindla aja jooksul. Reaalaja operatsioonisüsteemides kasutatakse seetõttu lihtsamaid ja kiiremaid algoritme, mis on vähem efektiivsed.[6]

Näited[muuda | redigeeri lähteteksti]

Viited[muuda | redigeeri lähteteksti]

  1. Response Time and Jitter. Kasutatud 23.12.2012. (Inglise)
  2. National Instruments. Mis on reaalaja operatsioonisüsteem (RTOS). Kasutatud 23.12.2012. (Inglise)
  3. Segger. Context switching time. Kasutatud 23.12.2012. (Inglise)
  4. ChibiOS/RT. Kasutatud 23.12.2012. (Inglise)
  5. Protsess. Kasutatud 23.12.2012.
  6. C.-Z. Yang. Reaalaja operatsioonisüsteemide mäluhaldus. Kasutatud 23.12.2012. (Inglise)