Tuum (informaatika)

Tuum ehk kernel on operatsioonisüsteemi keskne osa, mis suhtleb vahetult riistvaraga. Kihilise arhitektuuriga arvutisüsteemide puhul võib tuuma vastandiks mõelda kesta, mille ülesanne on suhelda kasutajaga. Tuum on ka esimene osa operatsioonisüsteemist, mis laetakse arvuti käivitamisel mällu. Oma olulisuse pärast operatsioonisüsteemi ohjamisel, laetakse tuuma lähtekood mälus kaitstud piirkonda, et välistada tuuma ülekirjutamist teiste programmide poolt.[1]

Tuum ja infoedastus

Tuuma peamine ülesanne on hallata arvuti riistvara ning ka protsessilõimesi. Tuum vastutab, et iga protsess saab oma arvutusaja protsessoril. Tuuma teisteks ülesanneteks on pakkuda algtasemel haldust ülejäänud süsteemikomponentide jaoks, hallates muutmälu, failiohje ning ka sisend/väljundit. Kerneli liideseks operatsioonisüsteemis on madala taseme abstraktsioonikiht ning tuuma hallatavad protsessid peavad küsima tuuma käest ressurssi (mitte otse suhtlema seadmega), tavaliselt läbi süsteemikutsungite.

Mälu haldamineRedigeeri

Muutmälu kasutatakse, et hoiustada nii programmi vaheandmeid kui ka koodi. Tänapäevased operatsioonisüsteemid haldavad mitmeid programme korraga ning mõnikord vajavad programmid rohkem mälu kui riistvaraliselt on saadaval. Tuuma ülesandeks on jagada programmide vahel mälu ning otsustada mida teha, kui piisavalt muutmälu ei ole saadaval

Kernelil on täisligipääs süsteemi muutmälule ja kernel vastutab programmidele mälu jagamise eest. Esimene samm selle tagamiseks on mälu addreseerimine, tavaliselt rakendatud läbi saalimise. Adresseeritud mälu tõlgib füüsilised mäluaadressid virtuaalseks ning aadressiruum kahe programmi vahel võib erineda, lubades programmil käituda nagu ta jookseks peale tuuma riistvara peal üksi.

Tuum jagab ka muutmälu erinevateks sektsioonideks, esmalt reserveerides süsteemi tööks vajaliku osa(kerneli aadressiruum) ja siis vastavate programmide jaoks(kasutajaruum)[2]. Erinevate aadressiruumide vahel töötavatel programmidel ei ole õigusi teisest sektsioonist mälu lugemiseks, lisades operatsioonisüsteemi tööse turvakihi.

Seadmete haldusRedigeeri

Programmide kasulik töö tagamiseks peab tavaliselt programmil olema ligipääs seadmetele mis on riistvaraga ühendatud. Seadmetega suhtlus kernelis käib läbi seadmedraiveri. Seadmedraiver on vaheprogramm mis suhtleb riistvaraga ning tõlgib kõrgtaseme keele suhtluse masinkoodiks.

Tuum haldab ka nimekirja riistvaralistest seadmetest ning tekitab vastavad ligipääsupunktid tagamiseks programmide suhtluse seadmetega. Seadmete nimekiri võib olla eelnevalt teada, näiteks sardsüsteemides kus kerneli ülesanne on spetsiifiline ja riistvara kitsahaardeline. Seadmete nimekirja võib ka käigu pealt tekitada(isehäälestuvalt), kus seadmehaldur(kernel) kõigepealt skanneerib vastavaid riistvaralisi ühendusi ning laeb vastavad draiverid.

KernelitüübidRedigeeri

MonoliitsedRedigeeri

Monoliitse kerneli puhul kõik operatsioonisüsteemi protsessid asuvad samas mälusaalis. Monoliitne kernel sisaldab kogu vajalikku koodi mida operatsioonisüsteemil on riistvara kasutamiseks vaja ning mida ei ole pärast kerneli laadimist võimalik teegist võtta. Osad kerneli arendajad väidavad(https://www.oreilly.com/openbook/opensources/book/appa.html), et monoliitse struktuuriga kerneleid on lihtsam rakendada.(thompsoni viide) Samas, viga kerneli alammoodulis väljendub monoliitse süsteemi puhul pea alati süsteemi krahhiga.

Monoliitse struktuuriga kernel kasutab oma töös peamiselt süsteemikutsungeid, sest kogu seadme funktsionaalsus on pakitud kerneliga kaasa ning väliseid teeke ei laeta.[3]

Monoliitsel disainil peamisteks vigadeks on

  • Kerneli arendamine osutub tihtipeale keerulisemaks, sest kogu kerneli kood asub ühes tükis.
  • Vead ühes koodiosas väljenduvad tugevalt teises koodiosas. Kogu kernel laetakse ühes tükis mällu ning protssessi- ja aadressiruumid ei ole eraldatud.
  • Monoliitsed kernelid on vähem vastuvõtvad riistvaramuudatustele, uue arhitektuuri kasutamiseks tuleb terve kernel üle kirjutada

MikrokernelRedigeeri

Mikrokernel üritab hoida võimalikult palju protsesse kasutajaruumis, tagades süsteemi minimaalse jalajälje mälus. Mikrokernelis laetakse süsteemimällu nii vähe kui võimalik, peamiselt implementeerides mälu- ja protsessihalduse. Ülejäänud kood jäetakse väljaspoole kernelit, kas süsteemsete teenustena või kerneli moodulitena.[4]

Mikrokerneli peamisteks tugevusteks loetakse hallatavust ja arenduslihtsust. Lisaks loetakse mikrokerneleid stabiilsemateks, kuna ühe koodi krahhi puhul saab selle asendada toimiva koopiaga käigu pealt.

Küll aga on peamiseks mikrokerneli nõrkuseks jõudlus. Suhtlus erinevate kerneli osade vahel tehakse läbi liideste, ning kihtide vahel tõlkimine võtab lisajõudlust erinevalt monoliitsest kernelist.. Seetõttu kasutatakse mikrokerneleid peamiselt väikestes süsteemides mille keerukus on madalam ning ei vaja sama laiahaardelist tuge kui monoliitsed kernelid.

HübriidkernelRedigeeri

Hübriidkerneli disainifilosoofia üritab parandada monoliitse ja mikrokerneli vigu. Hübriidkernelis laetakse algselt ainult vajalik kood kerneli enda töö garanteerimiseks. Seadmehalduse ja muude rakenduste teostamiseks laeb hübriidkernel endale vastavalt vajadusele vahemällu mooduleid, mille ülesandeks on vastava ülesandega tegelemine. [5]

Hübriidkerneli arendamine on ka hõlpsam, kuna tegu ei ole enam monoliitse koodibaasiga, vaid mooduleid saab vastavalt arendada. Lisaks saab mooduleid ka käigupealt ümber laadida, lubades arendajatel oma muudatusi testida ilma masinat taaskäivitamata.

  1. http://www.linfo.org/kernel.html
  2. http://www.linfo.org/user_space.html
  3. https://wiki.osdev.org/Monolithic_Kernel
  4. https://wiki.osdev.org/Microkernel
  5. https://wiki.osdev.org/Hybrid_Kernel