Real-Time Linux (RTL, myös Linux-rt, PREEMPT_RT) on reaaliaikainen (RTOS) versio Linux-ytimestä, joka tunnetaan Linux Foundationin projektina.

Reaaliaikaista Linuxia on käytetty mm. robotiikassa, pörssipalveluissa ja tietokoneissa, joiden pitää olla yhteydessä ”kovan” reaaliaikajärjestelmän kanssa.

Vaatimukset Kovan reaaliaikajärjestelmän vaatimuksille on neljä määrittelyä ja on tiedettävä mitä käyttäjä tarkoittaa: järjestelmän on aina kohdattava aikarajat tämä määritelmä on epäreilu ohjelmalle mikäli laitteisto vikaantuu järjestelmän on aina kohdattava aikarajat, mutta vain laitteistovian puuttuessa tämä määritelmä yksinkertaistaa asioita, mutta ei ole riittävä järjestelmätasolla ”timantinkova” reaaliaikajärjestelmä voi suorittaa kytkemällä pois laitteistokeskeytykset järjestelmä saa ohittaa aikarajan, mutta vain jos se ilmoittaa siitä esimerkiksi korkean tarkuuden anturitietojen keruussa ennakoimattomien kuormien ollessa läsnä järjestelmässä järjestelmä määritellään testijoukon läpäisyllä eräät vaativat tämän sijaan formaalia (matemaattista) todistetta eivätkä kelpuuta tätä määrittelyä

Reaaliaikaisuus ei tarkoita nopeutta vaan latenssia ja deterministisyyttä. Reaaliaikaisessa käsittelyssä 99 %:n todennäköisyys ei ole riittävä ja painopiste on pahimpien tapauksien () käsittely siten, että tulos on ennakoitava ja toistettava: suorituskykyä painottava käsittely optimoi keskivertotapausta. Turvakriittinen ja reaaliaikainen eivät ole sama asia, mutta voivat liittyä toisiinsa.

Historia Linuxia käytettiin tutkimusalustana jo varhain ja tutkijat alkoivat muuttaa Linuxia reaaliaikaiseksi käyttöjärjestelmäksi vaihtelevalla menestyksellä, mutta eivät tähdänneet pääsarjan ytimen muuttamiseen. Vuonna 2004 eri tahot aloittivat koordinoimattomia yrityksiä saada avaintekniikoita ytimeen, mutta ne olivat vielä puutteellisia. Red Hatille työskennellyt Ingo Molnar alkoi koota ja muokata kehitystä muutossarjaksi nimeltä PREEMPT_RT ja samaan aikaan Thomas Gleixner työskenteli Doug Niehausin kanssa oman ratkaisun siirtämiseksi. Molnarin ja Gleixnerin työ oli sekä toisiaan täydentävää että ristiriidassa keskenään joten he yhdistivät voimavaransa. Muita tahoja kuten Steven Rostedt liittyi mukaan tuoden omia ideoita ja kokemusta reaaliaikaisuuden tutkimuksesta. Ryhmä sai nopeasti aikaan ratkaisun, joka oli vielä kaukana ylläpidettävästä ja tuotantovalmiista. Pääsarjan ytimeen liittämiseksi on tarvittu vielä paljon valmistelevaa työtä ja integraatio ei ole voinut olla haittana muulle Linux-ytimen käytölle ja kehitykselle: muutossarja koskee keskeisiä osia ytimestä.

Reaaliaikaisten järjestelmien käyttöalue on laaja ja useissa tapauksissa hyvin erikoistunut sekä voi olla aluekohtaisten standardien ja lakien säätelemä. Real-Time Linux projekti ei tähtää näihin erikoistuneisiin tapauksiin vaan on suunnattu kattamaan 99% käyttötapauksista. Validointia varten on käynnistetty Linux Foundationin ELISA-projekti. Moniprosessointi on yleistynyt myös sulaututetuissa järjestelmissä ja järjestelmän osiointi (suorittimien eristäminen tiettyyn tehtävään) on yksi käyttötapaus.

RTL:stä on myös käytetty nimiä -rt, RT-Patch ja RT PREEMPT sekä PREEMPT_RT. Pääsarjan ydintä on vaiheittain muokattu yhteensopivaksi. Linux-ytimen versiossa 5.3 on CONFIG_PREEMPT_RT on liitetty osaksi pääsarjan ydintä. Muutoksilla ytimen omat toiminnot ovat keskeytettäviä. Lukitukseen liittyvä koodi on yhdistetty pääsarjaan versiossa 5.15.https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=e5e726f7bb9f SLUB-muistivaraus on tehty yhteensopivaksi PREEMPT_RT:n kanssa versiossa 5.15.https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc09ee80c3b18ae1a897a30a17fe710b2b2f620a Reaaliaikakäyttöön konfiguroidussa ytimessä on siihen tarkoitetut versiot mutexeista, wait/wound mutexeista, luku/kirjoitus semaforeista, spinlockeista ja read/write lukoista. Aiemmin SCHED_DEADLINE-vuoronnus on lisätty ytimeen versiossa 3.14. Muita käytäntöjä ovat SCHED_FIFO ja SCHED_RR. Keskeytyksien käsittely säikeissä on ollut ytimessä jo pitkään.

Vuodesta 2005 kehitetty muutossarja on kokonaan mukana Linux-ytimen versiossa 6.12. Muutoksia on liitetty asteittain pääsarjan ytimeen, muun muassa NO_HZ-ominaisuus virrankulutuksen vähentämiseen on lisätty aiemmin. Joitakin kehityskohtia on edelleen jäljellä eri arkkitehtuurien ja ajurien tuen parantamiseksi. "Kova" reaaliaikajärjestelmä ei ole vain ytimestä kiinni, vaan vaatii myös laitteiston ja muun ohjelmiston optimointia halutulle vasteajalle.

Toteutus Linux-ytimen reaaliaikatuki on voitu konfiguroida useasta eri vaihtoehdosta: ei pakotettua keskeytystä - CONFIG_PREEMPT_NONE vapaaehtoinen keskeytys - CONFIG_PREEMPT_VOLUNTARY keskeytettävä ydin (alhaisen latenssin työpöytä) - CONFIG_PREEMPT_LL keskeytettävä ydin (perustason reaaliaikaisuus) - CONFIG_PREEMPT_RTB täysin keskeytettävä ydin - CONFIG_PREEMPT_RT_FULL

Valittavia konfigurointivaihtoehtoja on vähennetty kahteen: "full" ja "lazy" tuetuilla alustoilla, ja eräillä alustoilla on vielä vanhat "none" ja "voluntary".

Prioriteettien inversio-ongelman välttämiseksi reaaliaikainen ydin tukee prioriteettien perintää. Prioriteettien perintä nostaa lukon varanneen prioriteettia vähintään samalle tasolle kuin lukkoa odottavalla kunnes lukko vapautuu, jotta lukon varannut saa riittävästi ajoaikaa. Reaaliaikaisessa ytimessä spin lock -lukituksista tulee mutex-lukituksia.

Normaali Linux-ydin käyttää tasavertaista () vuoronnusta, mutta reaaliaikaisessa ytimessä korkeimmalla prioriteetilla oleva saa aina ensin vuoron. Tasavertaisessa lukkoa ensin odottava saa ensin vuoron mutta reaaliaikaisessa korkeammalla prioriteetilla oleva saa sen ensin. Levylle sivuttaminen on mahdollista estää. Muistivarauksessa on huomioitava, että oletuksena varsinainen varaus tapahtuu vasta kun muistia käytetään ja varattu muisti on lukittava muistiin.

Ytimessä on käytetty local_lock-alueita merkitsemään paikkoja, jotka tavallisessa ytimessä voivat hetkellisesti kytkeä moniajon pois tai estää keskeytykset. PREEMPT_RT-ytimessä nämä eivät estä ytimen moniajoa eivätkä kytke pois keskeytyksiä ja lisäksi PREEMPT_RT-ytimessä eräät primitiivit käyttävät eri tyyppiä jotta moniajoa ei estetä.

Ytimessä on Lockdep-niminen työkalu lukitusmallin oikeellisuuden validointiin.

Suoritintuki

Reaaliaikaversio on saatavilla mm. seuraaville suoritinarkkitehtuureille:OSADL Project: Realtime Linux ARM x86 / x86-64 MIPS M68k Power

Jäsenjärjestöt ja tukijat

Projektin tukijoina ovat: National Instruments OSADL Texas Instruments Altera ARM Intel IBM

OSADL jäseniä ovat: BMW Homag GmbH Intel KEBA AG Komax Phoenix Contact Roche Trumpf WAGO

OSADL-projekti Safety Critical Linux pyrkii sertifioimaan reaaliaikaisen Linuxin.

Muut projektit Lisäksi on olemassa RTLinux, RTAI-laajennus Linux-ytimeen, Xenomai, Linux/RK, LITMUS-RT sekä LibeRTOS.

Katso myös Jailhouse

Lähteet

Aiheesta muualla Real-Time Linux Wiki The RTL Collaborative Project OSADL

Luokka:Linux-ydin Luokka:Linux Foundation Luokka:Reaaliaikaiset käyttöjärjestelmät