Linux Kernel
Autor: Jan Eerik DK31
Sissejuhatus
Linux kernel on Unix-tüüpi monoliitne operatsioonisüsteemi tuum, mis on välja arendatud Linus Torvalds'i poolt 1991. aastal. Nimi "Linux" tuleneb tema autori eesnimest ja tolleaegsest populaarsest operatsioonisüsteemist UNIX, millel Linux'i tuum põhineb. Linux'i tuum on vabavara ning põhineb GPL (Gnu Public Licence) litsensil.
Tuum on operatsioonisüsteemi põhiline osa, mis organiseerib tööd kasutaja ning arvutisüsteemi riistvara vahel.
Linux'i tuum sisaldab kõiki põhilisi omadusi, mis on iseloomulikud kaasaegsele operatsioonisüsteemile, muuhulgas multitegumtöötlust, virutaalmälu, jagatud teeke, mäluhaldust, mitmekihilist võrgusüsteemi (IPv4, IPv6).
Kuigi Linux'i tuum oli algselt välja arendatud 32-bitilise x86 tüüpi arhitektuuri jaoks, töötab Linux tänapäeval kõigi moodsate 32 ja 64-bitiliste masinate peal. Eriti levinud on Linux'i kasutamine serverites ning samuti domineerib mobiilsete seadmete turgu Android'i operatsioonisüsteem, mis põhineb omakorda Linux'il.
Arhitektuur
Linux'i tuum on monoliitne, mis tähendab, et terve operatsioonisüsteem töötab eraldatult "tuuma keskkonnas" ehk kogu tegevus tuumas on rangelt reserveeritud tema operatsioonide jaoks ning kasutaja keskkond sellele ligi pääse. Selle tulemusena on süsteem turvalisem, kuna pakub kaitset nii mäluruumile kui riistvarale potentsiaalse sissetungi eest. Samuti töötavad tuuma keskkonnas riistvara draiverid. Lisaks tuumale endale asub tuuma keskkonnas ka GNU C teek, mis võimaldab süsteemi kutseid ja üleminekut kasutaja keskkonnast tuuma keskkonda. Kasutaja keskkonnas töötavad seevastu erinevad kasutaja rakendused, näiteks graafiline kasutajaliides ja muud kasutaja rakendused.
Skeem 1: GNU/Linux operatsioonisüsteemi arhitektuur
Peamised Linux'i alamsüsteemid
Linuxi tuum on väga kompleksne ja mitmekihiline süsteem, mis omakorda koosneb mitmetest alamsüsteemidest.
Skeem 2: Arhitektuuriline vaade Linux'i alamsüsteemidele
Süsteemi kutsungiliides (System Call Interface):
Süsteemi kutsungiliides on õhuke kiht tuumas, mis vahendab funktsiooni väljakutseid kasutaja keskkonnast tuuma keskkonda. Kuna Linux'i tuum on eraldatud erinevateks õiguskihtideks (Privilege Levels), liiguvad kõik kasutaja antud käsud tuuma üle API, mis edastab vastavad käsud edasi tuumale.
Protsessihaldus (Process Management):
Protsessihalduse ülesandeks on protsesside täideviimine. Protsesse tuumas nimetatakse lõimedeks (*threads*) ning esindavad iseseisvat protsessori virtuaalset osa (lõimekood, andmed, registrid jne). Kuigi kasutaja keskkonnas kasutatakse pigem terminit protsess (või toiming), siis Linuxi puhul neid kontseptsioone spetsiaalselt ei eristata. Protsessihaldus peab lisaks tegelema ka protsessori ressursside eraldamisega aktiivsete lõimede vahel. Tuum kasutab selleks spetsiaalset planeerimisalgoritmi, mis töötab konstantses ajas ja ei ole sõltuv aktiivsete lõimede arvust, mis protsessori ressursse parajasti nõuavad. Tänapäeval toetavad need algoritmid ka mitut protsessorit (*Symmetric Multiprocessing*).
Mäluhaldus (Memory Management):
Lisaks protsessihaldusele peab tuum tegelema ka mäluhaldusega. Enamikes arhitektuuritüüpides hallatakse mälu 4KB suuruste puhvritena (*pages*). Linux'i tuum võimaldab lisaks tekitada abstraktsioone jagades mälu ka puhvrisiseselt, jälgides millised puhvrid on täis, pooltäis või tühjad. See võimaldab mäluhaldusskeemil dünaamiliselt vastavalt vajadusele mälu ümber jagada. Kuna mälu on jagatud mitmete erinevate protsesside vahel, võib juhtuda, et vaba mälu saab otsa, mistõttu tuleb puhvrid kirjutada kõvakettale. Seda protsessi nimetatakse saalimiseks (*swapping*).
Virtuaalne failisüsteem (Virtual File System):
Virtuaalne failisüsteem pakub vahekihti süsteemi kutsungiliidese ja tuuma poolt toetatud failisüsteemide vahel.
Skeem 3: Virtuaalne failisüsteem vahendab infot kasutajate ning failisüsteemide vahel
Virtuaalse failisüsteemi ülemises otsas on realiseeritud tavapärane API abstraktsioon, mis sisaldab põhilisemaid funktsioone (*nt open, close, read, write*). Allpool asub failisüsteemi abstraktsioon, mis defineerib kuidas kõrgema kihi funktsioone rakendatakse. Failisüsteemi kihi all asub omakorda puhver, mis sisaldab universaalseid funktsioone, mis ei sõltu konkreetsest failisüsteemi tüübist. See kiht optimeerib ligipääsu füüsilistele seadmetele ja muudele riistvarakomponentidele hoides lühiajaliselt mälus järgmisena vajaminevat infot. Puhvri all asuvad omakorda draiverid, mis juhivad juba konkreetsete füüsilise seadme tööd.
Võrgukihid (Networking Stack):
Võrgu ülesehitus Linux'is järgib kihilist arhitektuurimudelit ning koosneb seega mitmetest eriotstarbelistest kihtidest.
Seadme draiverid (Device Drivers):
Suur enamus Linux'i tuuma lähtekoodist eksisteerib seadme draiveritena, mis käituvad kui juhtprogrammid või ohjurid mingi konkreetse seadme kasutamiseks. Linux'is on draiverid järjestatud puuna vastavalt toetatavatele seadmetüüpidele (nt Bluetooth, I2C, Serial jne).
Lisaks eelnevale põgusale ülevaatele Linux'i tuuma ülesehitusest pakub ta lisaks palju huvitavaid võimalusi. Kuna tegemist on vabavaralise süsteemiga, mille lähtekood on kõigile avatud ning kättesaadav, on Linuxi tuumaga võimalik katsetada uusi protokolle ning nende edasiarendusi.
Veel üks kasulik omadus on dünaamiliselt laetavad moodulid, mis võimaldavad käigu pealt lisada ja eemaldada tarkvarakomponente.
Tuuma paigaldamine süsteemi
Süsteemil saab olla korraga paigaldatud ka mitu tuuma, mille vahel saab valida alglaadimise käigus (GRUB menu). Selleks, et näha milline tuuma versioon on hetkel paigaldatud, saab kasutada järgmist käsku:
uname -r
Viited
https://www.ibm.com/developerworks/library/l-linux-kernel/l-linux-kernel-pdf.pdf