Käyttöjärjestelmän ydin
Wikipedia
Käyttöjärjestelmäydin tai kerneli (engl. kernel) määrittelee käyttöjärjestelmän rakenteen, luokituksen ja ominaisuudet. Ydin voi olla kooltaan muutamista tuhansista aina miljooniin riveihin koodia. Tällöin ydin saattaa olla kooltaan vain kymmeniä kilotavuja tai jopa muutamia megatavuja. Käyttöjärjestelmäytimestä on kaksi päätyyppiä, nykyisin harvinaisempi ja perinteistä rakennetta noudattava monoliittinen, joka sisältää kaikki käyttöjärjestelmän ominaisuudet samassa osoiteavaruudessa (eng. Address space), tai vain osan käyttöjärjestelmän toiminnoista omaava mikroydin. Mikroytimeen perustuva käyttöjärjestelmärakenne on saavuttanut suosiota sen teoreettisesti parempien ominaisuuksien vuoksi, vaikka todellisuudessa edut ovat jääneet vähäisiksi perinteiseen modulaariseen rakenteeseen verrattuna. Viimeksi mainittu on suosittu rakenne muun muassa sulautetuissa järjestelmissä. Nykyisin modernit käyttöjärjestelmät eivät ole rakenteeltaan puhtaasti monoliittisia (makroydin) tai mikroytimeen perustuvia, vaikka selviä esimerkkejä näistä kahdesta mallista on olemassa. Sen sijaan ne soveltavat tavalla tai toisella toistensa ideoita.
Sisällysluettelo |
[muokkaa] Käyttöjärjestelmärakenteiden kaksi pääluokkaa
[muokkaa] Monoliittinen ydin
Monoliittinen ydin sisältää kaikki käyttöjärjestelmätoiminnot samassa osoiteavaruudessa, ydintilassa (eng. kernel space). Monoliittisen rakenteen tuomia selkeitä etuja ovat käyttöjärjestelmän nopeus sekä helppo kehitysmalli. Siitä huolimatta ylläpitäminen muuttuu monimutkaisemmaksi ominaisuuksien lisäämisen myötä, sillä yksittäinen ohjelmoija ei voi tietää kaikkia toimintoja ja miten ne vaikuttavat toisiinsa. Huonoista puolista vakavin on, että yksikin virhe jossain käyttöjärjestelmän toiminnossa, kuten muistinhallinnassa, verkkoprotokollassa, levyjärjestelmässä tai laiteajurissa vaikuttaa käyttöjärjestelmän muihinkin osiin. Samalla se vaikuttaa kaikkiin käyttöjärjestelmän suorittamiin prosesseihin. Tämä aiheuttaa koko järjestelmän kaatumisen. Monoliittinen ydin toimii yksin suojatussa supervisor-tilassa yhdessä osoiteavaruudessa ja tarjoaa muille ohjelmistoille järjestelmäkutsurajapinnat laitteistolle. Monoliittinen rakenne voi myös olla osittain modulaarinen, eikä ydintä tällöin kutsuta makroytimeksi. Osa käyttöjärjestelmän toiminnoista - kuten laiteajuri – siirretään irralleen ytimestä omaksi käyttöjärjestelmämoduuliksi, joka ladataan keskusmuistiin vain tarvittaessa - liitos on tarkasti sovitettu ytimeen. Tällä toiminnolla kyetään pienentämään käyttöjärjestelmän vaatimaa tilantarvetta keskusmuistissa. Esimerkkejä monoliittista rakennetta käyttävistä käyttöjärjestelmistä ovat Linux, OpenBSD, NetBSD, FreeBSD sekä SunOS
[muokkaa] Mikroydin
Rakenteen idea perustuu käyttöjärjestelmän tietoturvan ja vakauden parantamiseen, tosin nopeuden kustannuksella. Monoliittinen käyttöjärjestelmä pilkotaan useisiin paloihin, pieneksi pelkistetyksi mikroytimeksi, ja irroitettuihin käyttöjärjestelmämoduuleihin, jotka siirretään toiseen osoiteavaruuteen, käyttäjätilaan (eng. userspace/userland). Jokainen käyttöjärjestelmämoduuli suojataan eristämällä muduulit toisistaan, ja ne ovat yhteydessä ytimeen sekä toisiinsa suojattuina prosesseina. Yhden käyttöjärjestelmämoduulin kaatuminen ei vaikuta muihin moduulehin tai ytimeen, vaan ainoastaan niitä tarvitseviin prosesseihin. Vikaantunut käyttöjärjestelmämoduuli voidaan käynnistää uudelleen, ja jatkaa prosessin suorittamista. Jokainen käyttöjärjestelmämoduuli tai jopa mikroydin voidaan päivittää ilman, että muita osia joudutaan päivittämään. Käyttöjärjestelmä on tällöin hyvin modulaarinen rakenteeltaan ja teoriassa hyvin vikasietoinen. Samalla käyttöjärjestelmän jakaminen molempiin muistiavaruuksiin tekee siitä hitaan, koska tiedon siirtämiseen käyttöjärjestelmämoduulien ja mikroytimen välillä vaatii prosessorin kellojaksoja huomattavasti enemmän kuin monoliittiseen rakenteeseen perustuva käyttöjärjestelmä. Esimerkkejä mikroydin -rakenteeseen perustuvista ytimistä ovat Hurd ja Mach
[muokkaa] Muut rakenteet
Näiden kahden luokan lisäksi on useita erilaisia alaluokkia jotka yhdistelevät näitä kahta pääluokkaa kuten exoydin, nanoydin ja hybridi-ydin. Ristiriitaisin niistä taitaa olla niin kutsuttu “Hybridi-ydin”, jossa sovelletaan mikroytimeen perustuvaa käyttöjärjestelmärakennetta, mutta monoliittisen käyttöjärjestelmän tavoin. Käyttöjärjestelmä on pilkottu, mikä tarkoittaa, että se koostuu mikroytimestä ja käyttöjärjestelmämoduuleista, joista osa tai kaikki on siirretty käyttäjätilasta takaisin samaan osoiteavaruuteen, ydintilaan. “Hybridiytimen” päämäärä on olla vakaudeltaan ja tietoturvaltaan yhtä hyvä kuin mikroytimeen perustuva käyttöjärjestelmä, mutta samalla yhtä nopea kuin monoliittinen käyttöjärjestelmä. Esimerkkinä "hybridi-ydin" -rakennetta käyttävistä käyttöjärjestelmistä on Windows NT.
Moni käyttöjärjestelmäasiantuntija on hylännyt “Hybridiydin” -termin tarkoituksettomana ja pelkkänä markkinointina: Linus Torvalds on sanonut:
»As to the whole ‘hybrid kernel’ thing — it’s just marketing. It’s ‘oh, those microkernels had good PR, how can we try to get good PR for our working kernel? Oh, I know, let’s use a cool name and try to imply that it has all the PR advantages that that other system has’.[1]»
.
Sonny Rao IBM LTC Kernel Performance File/IO -tiimistä on sanonut:
»It’s wrong... I think this talk... was born from some kind of half-assed marketing game to try and make XXX kernel seem ‘more advanced.’ ‘Micro’ and ‘hybrid’ are always better, more advanced than ‘Monolithic’ right??"[2]»
[muokkaa] Rakenteellisia ongelmia ja hyötyjä
Monoliittisen ytimen moduulia ei pidä sekoittaa mikroytimen käyttämään käyttöjärjestelmämoduuliin,joka on eri tavalla toteutettu. Sen käyttöjärjestelmämoduulia ei voi päivittää erikseen, ja ytimen päivitykset vaikuttavat kaikkiin irroitettuihin käyttöjärjestelmämoduuleihin, jotka siten on pakko päivittää kun ydin itsessään muuttuu. Tämä tekee käyttöjärjestelmän päivittämisestä ja korjaamisesta vaivalloista kun olemassa olevaa laiteajuria ei voida sellaisenaan siirtää käytettäväksi toiseen tietokoneeseen. Kun laiteajuri päivitetään, täytyy koko käyttöjärjestelmä kääntää uudelleen. Tästä seuraa paljon ongelmia. Monoliittisen ytimen laiteajurirajapinnat muuttuvat usein, ja tämä lisää paljon työtä ajureiden ylläpitäjille. Vaikka monoliittisen ytimen käyttöjärjestelmä- eli järjestelmäkutsurajapinnat (eng. system call) ovat vakaita ja muuttuvat harvoin, tuottaa monoliittinen rakenne työtä enemmän laitteistovalmistajille kuin ohjelmistokehittäjille, jotka voivat luottaa rajapintojen säilyvän paremmin ennallaan.
Mikroytimeen perustuvat käyttöjärjestelmät ovat erilaisen modulaarisuuden vuoksi suosiossa. Yksittäinen ajuri voidaan päivittää helposti, tai sammuttaa vaarallinen käyttöjärjestelmämoduulin prosessi ilman, että käyttöjärjestelmä tai järjestelmä kärsii. Käyttöjärjestelmän ohjelmoijille mikroydinmalliin perustuva käyttöjärjestelmä on helpompi kernel-dump -tietojen saannin helppouden vuoksi.
[muokkaa] Historiallisia syitä
Kun ensimmäiset modernit käyttöjärjestelmät kehiteltiin 1960-luvun alussa, suunnittelijat olivat todella huolissaan niiden suorituskyvystä, sillä ne oli kirjoitettu assembler-kielellä, vaikka korkean tason ohjelmointikieliä kuten Fortran, Mad ja Algol, oli hyvin laajalti käytössä. Vakaus ja tietoturva eivät olleet edes suunnitelmissa. Useimmat nykyajan ongelmista voidaan jäljittää 40-50:n vuoden päähän jolloin käyttöjärjestelmien nopeustavoitteet laitettiin tietoturvan edelle. Tämä johti monoliittiseen rakenteeseen missä koko käyttöjärjestelmä toimi yhtenä suoritettavana binäärinä (makroydin) ydintilassa (eng. kernel space). Kun käyttöjärjestelmän käytettävissä oleva muisti oli vain 32 tuhatta sanaa, niinkuin MIT-yliopiston ensimmäisessä järjestelmässä, CTSS:ssä, monen miljoonan rivin käyttöjärjestelmät eivät olleet mahdollisia ja monimutkaisuus oli hallittavissa. Kun saatavilla oleva muistin määrä kasvoi, kasvoivat myös käyttöjärjestelmät. Lopulta jouduttiin nykyiseen tilanteeseen, missä käyttöjärjestelmä sisältää satoja järjestelmäkutsuja niin monipuolisilla tapahtumilla, että kukaan ei oikeastaan enää ymmärrä miten ne toimivat. Windows NT5.1- käyttöjärjestelmä sisältää 5 miljoonaa riviä koodia (koko järjestelmä sisältää yli 40 miljoonaa), ja Linux yli 3 miljoonaa riviä koodia. Käyttöjärjestelmien monimutkaisuus on nopeasti muodostumassa ongelmaksi. Tämän rivimäärän vuoksi käyttöjärjestelmän monoliittisella rakenteella on haittansa. Tutkimuksissa on havaittu, että tavallisessa sovellusohjelmassa virheitä on 1-20 kappaletta jokaista 1000:tta koodiriviä kohden. Koska käyttöjärjestelmä on paljon monimutkaisempi kuin tavallinen sovellusohjelma ja laiteajurit yleensä, sisältää se enemmän virheitä jokaista tuhatta koodiriviä kohden. Näin miljoonien rivien kokoiset monoliittiset käyttöjärjestelmät aiheuttavat vakaus- ja tietoturvaongelmia. Näitä ongelmia ehkäisemään kehitettiin mikroytimeen perustuva käyttöjärjestelmärakenne, jossa käyttöjärjestelmän toiminnallisuus hajautetaan molempiin osoiteavaruuksiin, ydintilaan ja käyttäjätilaan. Jokainen ongelmia tuova koodirivi siirretään käyttäjätilaan, ja pelkkä mikroydin jätetään ydintilaan. Nykyisin käyttöjärjestelmät soveltavat eri tapoja näiden kahden mallin välillä. Useat ovat kokonaan modulaarisia ja joidenkin monoliittisia modulaarisilla ominaisuuksilla. Harvat jäävät puhtaasti monoliittisiksi.
[muokkaa] Katso myös
[muokkaa] Lähteet
- http://www.amazon.com/gp/reader/0130313580/ref=sib_dp_pt/103-7158569-1619062#reader-link
- http://www.usenix.org/publications/login/2006-04/openpdfs/herder.pdf
- http://www.computer.org/portal/site/computer/menuitem.5d61c1d591162e4b0ef1bd108bcd45f3/index.jsp?&pName=computer_level1_article&TheCat=1005&path=computer/homepage/0506&file=cover1.xml&xsl=article.xsl&
[muokkaa] Viitteet
- ↑ Linus Torvalds, Real World Technologies Discussion Forum. Luettu 2006-05-09.
- ↑ Sonny Rao, Real World Technologies Discussion Forum. Luettu 2006-05-08.

