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]

Kõige enimlevinud disainid on:

  • Sündmustel põhinev, mis lülitab töid ainult siis kui kõrgema prioriteediga töö vajab tegemist
  • Aega jagavad töid vahetatakse korrapäraste ajavahemike järel – järjestikplaanur

Aega jagavad disainid lülitavad töid tihedamini kui rangelt vaja oleks, aga annavad ladusama multitegumitöö, tekitades illusiooni, et protsess või kasutaja kasutab masinat üksi.

Vanad protsessorid vajasid tegumi vahetamiseks palju tsükleid, mille ajal protsessor ei saanud midagi kasuliku teha. Näiteks 20MHz 68000 protsessoril (tavaline kaheksakümmnendate lõpus) kulus tegumi vahetamisele umbes 20 mikrosekundit. 2008 aastast pärit 100MHz ARMiga protsessoril kulub selleks alla 3 mikrosekundi. Sellel põhjusel üritasid varajased operatsioonisüsteemid suurendada kiirust vahetades tegumite vahel 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.

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

Mitmiktegumitöö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älja lü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älja lü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 tagasi 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)