Avaa päävalikko

Käyttöjärjestelmän ydin

määrittelee käyttöjärjestelmän rakenteen, luokituksen ja ominaisuudet
(Ohjattu sivulta Hybridiydin)
Erilaiset käyttöjärjestelmäarkkitehtuurit kuvattuna monoliittisen, mikro- sekä ”hybridi-ytimen” avulla.

Ydin eli kerneli (engl. kernel) on käyttöjärjestelmän osa, jolla on täysi kontrolli kaikesta järjestelmässä tapahtuvasta.[1]

Käyttöjärjestelmän ytimiä on kahta päätyyppiä: monoliittisia ja mikroytimiä. Monoliittinen ydin (makroydin) sisällyttää ytimen toiminnot samaan ytimen osoiteavaruuteen (engl. address space). Mikroydin ulkoistaa valtaosan ytimen toiminnoista käyttäjäavaruuteen. Nykyaikaiset käyttöjärjestelmät eivät ole rakenteeltaan puhtaasti monoliittisia tai mikroytimeen perustuvia, vaikka edelleen selviä esimerkkejä näistä kahdesta mallista on olemassa. Sen sijaan modernit käyttöjärjestelmät soveltavat monillakin tavoilla toistensa ideoita.

YleistäMuokkaa

Käyttöjärjestelmän ytimen sanotaan tarjoavan toimintonsa palveluina (engl. services), jotka voivat olla toteutettu erillisinä komponentteina (engl. components), jotka kommunikoivat erilaisten rajapintojen (engl. interfaces) avulla.[2]

Käyttöjärjestelmän ydin toimii suojatussa (engl. protected) ytimen muistiavaruudessa (engl. kernel space), joka estää muita ohjelmia ylikirjoittamatta sitä.[1] Ydin käsittelee prosesseja sekä keskeytyksiä, kun taas kaikki normaalisti tietokoneen käyttäjän tekemä kuten tekstieditorit ovat käyttäjäavaruudessa (engl. user space).[1]

Käyttöjärjestelmän ytimen yleisiä palveluita ovat muun muassa laitehallinta, muistihallinta ja vuoronnus.

Yksittäisen ohjelman kaatuminen ei ole järjestelmän kannalta yhtä kriittistä kuin ytimen kaatuminen, jonka myötä koko tietokoneen sanotaan kaatuneen.[1] Sovellusohjelmat kommunikoivat ytimen kanssa järjestelmäkutsujen avulla.[3]

MuistiavaruusMuokkaa

Ydin käyttää laitteiston fyysisiä osoitteita ja käyttäjäavaruudessa olevat prosessit käyttävät virtuaaliosoitteita niille varattuihin muistipaikkoihin.

Ytimen omat toiminnot sijaitsevat ytimen muistiavaruudessa tai ne on ulkoistettu käyttäjäavaruuteen (mikroytimet).

SuoritustilaMuokkaa

Tyypillisesti käyttöjärjestelmän ydin on suojattu omaan suoritustilaan (privileged mode, kernel mode) ja käyttäjäsovellukset ovat käyttäjätilassa (user mode): ydin voi käyttää suorittimen toimintoja, joita käyttäjätilassa olevat prosessit eivät voi käyttää.

Ytimen suoritustila voidaan toteuttaa suorittimen ominaisuuksista riippuen korkeammalla suoritustasolla (supervisor-tila, Motorola 68000-sarja) tai käyttämällä ohjelmasegmentin tilaa (x86).[4]

On myös ytimiä, jotka eivät toteuta muistisuojausta, kuten Amiga OS, jonka piti toimia myös suorittimilla ilman muistinhallintayksikköä.[5]

Ytimen kokoMuokkaa

Ydin voi olla kooltaan muutaman tuhannen tai jopa miljoonien koodirivien pituinen.

Ydinrakenteiden pääluokatMuokkaa

Monoliittinen ydinMuokkaa

 
Monoliittisen ytimen ja sovellusohjelmien suhde.

Monoliittinen ydin (makroydin) sisältää kaikki ytimen toiminnot samassa ytimen osoiteavaruudessa (engl. kernel space). Monoliittisen rakenteen etuja ovat käyttöjärjestelmän nopeus sekä helppo kehitysmalli. Toisaalta ylläpitäminen monimutkaistuu ominaisuuksien lisääntyessä, sillä yksittäinen ohjelmoija ei voi tuntea kaikkia toimintoja ja niiden vaikutuksia toisiinsa. Huonoista puolista vakavin on, että yksikin virhe jossain ytimen toiminnossa, kuten muistinhallinnassa, verkkoprotokollassa, levyjärjestelmässä tai laiteajurissa, vaikuttaa ytimen muihinkin osiin. Tästä seuraa koko järjestelmän kaatuminen.

Monoliittinen ydin toimii yksin suojatussa tilassa omassa osoiteavaruudessa ja tarjoaa muille ohjelmistoille järjestelmäkutsut ytimen toimintojen kutsumiseen.

Monoliittisessä ytimessä kaikki ajurit ovat kiinteästi osana ydintä ilman ladattavia moduuleja, kun taas ladattavia moduuleja tukevia kuvataan toisinaan hybridiytimiksi.[6][7] Toisaalta moduuleiden katsotaan olevan vain laajennusta helpottavia tekijöitä monoliittiselle ytimelle.[1]

Esimerkkinä monoliittista rakennetta käyttävistä moderneista käyttöjärjestelmistä on OpenBSD. Sekä NetBSD että FreeBSD tukevat ladattavia ytimen moduuleja.[8][9]Linuxiin liittyvässä dokumentaatiossa monoliittisellä ytimellä on viittu ytimeen, josta ladattavien moduulien tuki on kytketty pois käännösvaiheessa.[10]

Myös VMS on monoliittiseen ytimeen perustuva (tosin Digital kokeili myös mikroydintä).[11] VAX-alustalle kehitetyn VMS:n kehittäjiin kuulunut David Cutler siirtyi myöhemmin Microsoftille.[12]

MikroydinMuokkaa

 
Mikroytimen, sen palveluiden ja sovellusohjelmien suhde.

Mikroydinrakenteella pyritään parantamaan ytimen tietoturvaa ja vakautta, mutta tämä tapahtuu nopeuden kustannuksella. Mikroydinrakenteessa ydin pilkotaan useisiin palasiin: pieneksi pelkistetyksi mikroytimeksi sekä ytimen moduuleiksi. Mikroydin sijoittaa ytimen osat toiseen osoiteavaruuteen eli käyttäjäavaruuteen (engl. userspace, user mode, userland), jotka käyttävät prosessien välistä kommunikointia varsinaisen ytimen kanssa toimintaan.[13] Jokainen ytimen moduuli suojataan eristämällä moduulit toisistaan, ja ne ovat yhteydessä ytimeen ja toisiinsa suojattuina prosesseina. Yhden ytimen moduulin kaatuminen ei vaikuta muihin moduulehin tai ytimeen, vaan ainoastaan sitä tarvitseviin prosesseihin. Vikaantunut ytimen moduuli voidaan käynnistää uudelleen. Jokainen ytimen moduuli tai jopa mikroydin voidaan päivittää muista osista riippumatta. Ydin on tällöin modulaarinen rakenteeltaan ja teoriassa hyvin vikasietoinen. Ytimen jakaminen erillisiin muistiavaruuksiin tekee siitä kuitenkin hitaan, koska tiedon siirtäminen ytimen moduulien ja mikroytimen välillä vaatii huomattavasti enemmän prosessorin kellojaksoja kuin monoliittiseen rakenteeseen perustuva ydin.

Ensimmäisen sukupolven mikroytimiä ovat Mach ja Chorus.[14] Toisen sukupolven mikroytimiin kuuluu L4 ja QNX.[14]

Symbian ja QNX ovat esimerkkejä mikroytimeen perustuvista menestyksekkäistä käyttöjärjestelmistä. Muita mikroytimeen perustuvia käyttöjärjestelmiä ovat BeOS ja Nextstep. GNU Hurd perustuu GNU Mach -ytimeen.

Mikroytimen keskeinen toimintaperiaate on viestien välittäminen moduulien välillä.[7] Kommunikaation aiheuttama kuormitus on myös merkittävä haittatekijä.[7][15]

Puhtaasti mikroydin-ajatteluun perustuva tutkimus on lähes täysin hylätty huonon suorituskyvyn johdosta.[14] Näissä ydin tarjoaa vain osoiteavaruuden, säikeistyksen ja prosessien välisen kommunikaation tai muun joukon vastaavia primitiivejä.[14]

Mikroytimen ajatuksen sanotaan olevan lähtöisin Per Brinch Hansenin kirjoituksesta The Nucleus of a Multiprogramming System (1970).[16][17] Mikroytimeen perustuvissa järjestelmissä on joitakin yhtäläisyyksiä hajautettujen käyttöjärjestelmien kanssa.[2]

NanoydinMuokkaa

Termi nanoydin (ja pikoydin) viittaa mikroytimeen, jossa moduulit rajataan pienempiin osiin vain kykyjen (engl. capabilities) perusteella.[18][19] Termiä on käytetty lähinnä mikroytimien alkuvaiheessa.[19]

Lisäksi on ainakin yksi tapaus jossa nanoydin viittaa nanosekuntien tarkkuudella toimivaan ytimeen[20] yksi tapaus jossa nanoydin viittaa laitteiston abstraktiokerrokseen (Adeos)[21].

EksoydinMuokkaa

 
Eksoytimen kuvaus.

1990-luvulla MIT:ssä esiteltiin eksoydin, joka on myös siinä käytetyn konseptin nimitys.[22][16][23] Vaikuttava ajatus oli että sovellukset tietävät enemmän resurssitarpeistaan ja niille annettaisiin mahdollisimman paljon kontrollia päätöksistä.[16] Osa toiminnoista sijoitettaisiin kirjastoihin, joihin ydin ei luottaisi.[16] Eksoytimeen viitataan myös kirjastokäyttöjärjestelmänä (library operating system, libOS).[24]

Eksoydin eriyttää hallinnan ja suojauksen siten, että ytimessä on suojaus mutta laitteiston hallinta tapahtuu sovelluksien käyttämien kirjastojen avulla.[25]

HybridiydinMuokkaa

 
Hybridiytimen yksinkertaistettu rakenne.

Hybridiytimessä tarkoitetaan monoliittisen ja mikroytimen yhdistelmää: ydin on pilkottu vaihtelevin tavoin moduuleiksi, jotka sijaitsevat ydinavaruudessa. Hybridiytimen on tarkoitus olla vakaudeltaan ja tietoturvaltaan yhtä hyvä kuin mikroytimeen perustuva ydin, mutta samalla yhtä nopea kuin monoliittinen ydin.

Vain harvat ytimet ovat puhtaasti monoliittisia ytimiä tai mikroytimiä.[7] Linux ja Solaris toteuttavat ladattavia moduuleja ytimen osoiteavaruuteen.[7][6] Mac OS X yhdistää Mach-ytimeen BSD-ytimen ominaisuuksia (XNU).[7] Myös Windows NT on suurelta osin monoliittinen: NT:ssä laiteajurit ovat kaikki samassa ytimen osoiteavaruudessa.[7][26]

Moni käyttöjärjestelmäasiantuntija kuitenkin katsoo, että hybridiydin-termi ei oikeastaan tarkoita mitään. Esimerkiksi Linus Torvalds on sanonut, että puhe hybridiytimistä on pelkkää markkinointia:

»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’.[27]»

Samoilla linjoilla on IBM:n Sonny Rao:

»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??[28]»

Ydinten kehityshistoriaaMuokkaa

Ferrantin valmistama Atlas oli luultavasti ensimmäinen tietokone, jonka kontrolliohjelmaa voitiin kutsua käyttöjärjestelmäksi.[29]

Varhaiset käyttöjärjestelmät kehitettiin 1960-luvun alussa ja kirjoitettiin assemblyllä. Sovellusohjelmointiin oli korkeamman tason ohjelmointikieliä kuten Fortran ja ALGOL. Järjestelmäohjelmointikielet kuten C-kieli lisäsivät ylemmän tason kielien käyttöä käyttöjärjestelmien toteutuksessa. Tietokoneet olivat vielä rajatussa käytössä, jossa niiden käyttö oli operaattoreiden vastuulla. Varhaisissa käyttöjärjestelmissä koko käyttöjärjestelmä toimi yhtenä suoritettavana binäärinä.

Varhaiset käyttöjärjestelmät kuten MIT-yliopiston Compatible Time-Sharing System eivät voineet kasvaa suuriksi rajoitettujen tietokoneresurssien kuten muistimäärän ja suoritintehon vuoksi. THE-käyttöjärjestelmä vaikutti myöhempien käyttöjärjestelmien kehitykseen esittelemällä useita suunnitteluperiaatteita.[30] Kun saatavilla olevat resurssit kasvoivat samalla kasvoivat myös käyttöjärjestelmät. Suuret käyttöjärjestelmäprojektit kuten Multics olivat ongelmissa niiden suorituskyvyn kanssa.[31] Multics:in jälkeen General Electric kehitti General Comprehensive Operating System (GECOS) käyttöjärjestelmän ja Bell Labs kehitti Unix-käyttöjärjestelmän.[32]

1970-luvulla esitettiin ajatus mikroytimestä, jossa varsinainen luotettu ydin olisi pienempi.[16] Mikroytimiä toteutettiin useita 1980-luvulla ja osasta suunnittelutavoitteista luovuttiin käytännön ongelmien vuoksi, joista yksi on prosessien välisen kommunikaation aiheuttama lisäkuorma.[16] Mikroytimissä ei ollut myöskään joustavuutta tukea useampaa kuin yhtä toteutusta järjestelmän peruspalvelusta.[16] Mikroytimessä esiintyi myös enemmän moduulien välistä kopiointia ja moduulien välistä häirintää välimuistin käyttötavasta.[16]

1990-luvulla esitettiin ajatus eksoytimestä.[16][23] Vaikuttava ajatus oli että sovellukset tietävät enemmän resurssitarpeistaan ja niille annettaisiin mahdollisimman paljon kontrollia päätöksistä.[16] Osa toiminnoista sijoitettaisiin kirjastoihin, joihin ydin ei luottaisi.[16]

IBM pyrki kehittämään Workplace OS käyttöjärjestelmää OSF Research Instituten kanssa perustuen Carnegie Mellon -yliopiston (CMU) Mach-mikrokerneliin, josta tuli yksi kalleimmista epäonnistumisista.[15]

KiistatMuokkaa

Makro- ja mikroytimien puolesta puhujilla on väitteensä näiden eduista, jotka myös on usein tyrmätty:[1]

  • mikroytimen eduksi on mainittu vakaus, mutta myös makroytimet ovat osoittautuneet vakaiksi
  • siirrettävyys eri alustoille on mainittu mikroytimen eduksi, mutta ei ole käytännössä ollut este makroytimien siirtämiselle
  • moduulien latauksella käännetyn makroytimen koko voi olla pieni, kun taas mikroytimen vaatima lisäkoodi voi tehdä siitä suuremman

Tunnettu debatti ytimien ratkaisuista on käyty Linus Torvaldsin ja Andrew Tanenbaumin kesken usenetin välityksellä.[33][34]

Katso myösMuokkaa

LähteetMuokkaa

ViitteetMuokkaa

  1. a b c d e f Kernel Definition linfo.org. Viitattu 10.8.2019. (englanniksi)
  2. a b Ronald Aigner: Communication in Microkernel-Based Operating Systems (PDF) pdfs.semanticscholar.org. heinäkuu 2010. Viitattu 11.8.2019. (englanniksi)
  3. Architecting Containers Part 1: Why Understanding User Space vs. Kernel Space Matters Red Hat. Viitattu 15.8.2019. (englanniksi)
  4. John Gulbrandsen: How Do Windows NT System Calls REALLY Work? codeguru.com. 26.8.2004. Viitattu 6.11.2017.
  5. It’s alive!: Ars reviews AmigaOS 4.1 23.9.2008. Ars Technica. Viitattu 10.11.2017.
  6. a b Nitesh Dhanjani & Gustavo Rodriguez: Loadable Kernel Module Programming and System Call Interception 1.2.2001. Linux Journal. Viitattu 22.11.2017.
  7. a b c d e f g Silberschatz & Galvin & Gagne: Operating System Concepts Essentials (PDF) cs.columbia.edu. Arkistoitu 28.6.2016. Viitattu 10.11.2017.
  8. Writing a kernel module for FreeBSD freesoftwaremagazine.com. Viitattu 12.8.2019. (englanniksi)
  9. Benedikt Meurer: Introduction to NetBSD loadable kernel modules home.unix-ag.org. Viitattu 12.8.2019. (englanniksi)
  10. Building a Monolithic Kernel Red Hat. Viitattu 12.8.2019. (englanniksi)
  11. A Model and Prototype of VMS Using the Mach 3.0 Kernel Digital Equipment Corporation. Arkistoitu 31.1.2017. Viitattu 22. kesäkuuta 2007.
  12. Mark Russinovich: Windows NT and VMS: The Rest of the Story 30.11.1998. ITPro Today. Viitattu 11.8.2019. (englanniksi)
  13. Rafika Ida Mutia: Inter-Process Communication Mechanism in Monolithic Kernel and Microkernel (PDF) pdfs.semanticscholar.org. Viitattu 14.8.2019.
  14. a b c d Hermann Härtig & Michael Hohmuth & Jochen Liedtke & Sebastian Schönberg & Jean Wolter: The Performance of µ-Kernel-Based Systems os.inf.tu-dresden.de. Viitattu 9.8.2019. (englanniksi)
  15. a b Workplace Microkernel and OS: A Case Study University of California. Viitattu 20.1.2017.
  16. a b c d e f g h i j k Úlfar Erlingsson & Athanasios Kyparlis: Microkernels cs.cornell.edu. Viitattu 10.8.2019. (englanniksi)
  17. Per Brinch Hansen: The Nucleus of a Multiprogramming System (PDF) classes.cs.uchicago.edu. Viitattu 10.8.2019. (englanniksi)
  18. The KeyKOS Nanokernel Architecture (PDF) pdfs.semanticscholar.org. Viitattu 11.8.2019. (englanniksi)
  19. a b Trusted Real Time Operating System: Identifying its characteristics researchgate.net. joulukuu 2012. doi:10.1109/ISCAIE.2012.6482074. Viitattu 11.8.2019. (englanniksi)
  20. David L. Mills & Poul-Henning Kamp: The Nanokernel (PDF) papers.freebsd.org. Viitattu 11.8.2019. (englanniksi) 
  21. [ANNOUNCE Adeos nanokernel for Linux kernel] 3.6.2002. Lwn.net. Viitattu 11.8.2019. (englanniksi)
  22. MIT Exokernel Operating System pdos.csail.mit.edu. Viitattu 11.8.2019. (englanniksi)
  23. a b Dawson R. Engler & M. Frans Kaashoek & James O’Toole Jr.: Exokernel: An Operating System Architecture for Application-Level Resource Management (PDF) pdos.csail.mit.edu. Viitattu 11.8.2019. (englanniksi) 
  24. Dawson R. Engler: The Exokernel Operating System Architecture (PostScript) pdos.csail.mit.edu. 18.5.1998. Viitattu 11.8.2019. (englanniksi)
  25. Application Performance and Flexibility on Exokernel Systems pdos.csail.mit.edu. Viitattu 11.8.2019. (englanniksi)
  26. User mode and kernel mode 20.4.2017. Microsoft. Viitattu 11.8.2019. (englanniksi)
  27. Linus Torvalds, Real World Technologies Discussion Forum realworldtech.com. Viitattu 9.5.2006.
  28. Sonny Rao, Real World Technologies Discussion Forum realworldtech.com. Viitattu 8.5.2006.
  29. Atlas Architecture chilton-computing.org.uk. Viitattu 14.8.2019. (englanniksi)
  30. Edsger Wybe Dijkstra ACM. Viitattu 11.8.2019. (englanniksi) 
  31. John W Gintell: Thoughts about the early days of Multics with rusty analysis on the subject of Performance Improvement (PDF) multicians.org. Viitattu 22.11.2017.
  32. Dvorak, John C.: IBM and the Seven Dwarfs — Dwarf Five: GE dvorak.org. Viitattu 15.9.2017.
  33. Linux is obsolete – A must read debate between Andrew S. Tanenbaum and Linus Torvalds 24.11.2012. IBM. Viitattu 20.12.2017.
  34. [1-25 LINUX is obsolete] groups.google.com. 29.1.1992. Viitattu 20.12.2017.

Aiheesta muuallaMuokkaa