Linux ffl Ajalugu ffl Disainiprintsiibid ffl Tuuma moodulid ffl Protsessihaldus ffl Planeerimine ffl Mäluhaldus ffl Failisüsteemid ffl Sisend ja väljund ffl Protsessidevaheline side ffl Võrk ffl Turvalisus 1
Ajalugu ffl 0.01 (mai 1991) töötas 80386 peal, võrku polnud, piiratud riistavara tugi, Minixi failisüsteem ffl 1.0 (märts 1994 Λ TCP/IP Λ BSD sokliliides Λ IP üle Etherneti Λ Parem failisüsteem Λ SCSI kontrollerite tugi Λ Palju muud rauda toetatud ffl 1.2 (märts 1995) viimane versioon ainult PC-de jaoks (1.2 sees tegelike portide integreerimine) ffl 2.0 (juuni 1996) mitme protsessori tugi, uued riistavaraplatvormid ffl 2.2 (jaanuar 1999) tuum mitme protsessori peal, tulemüürindus, TCP pinu ffl 2.4 (jaanuar 2001) skaleeruv SMP (failisüsteemid, võrguprotokollid) 2
Linuxi süsteem ffl Linuxi tuum, GNU utiliidid (gcc!) (+ BSD, MIT, XFree,...) ffl GPL litsents (algul muu litsents) ffl Arendajad laiali üle maailma ffl Linux Standards Base, File System Hierarcy Standard (FHS) ffl Distributsioonid (SLS, Slackware, Red Hat, Debian,...) ffl POSIX (baas, lõimed, veidi reaalaja tuge) 3
Disainiprintsiibid ffl Tuum, süsteemsed teegid, süsteemsed programmid, rakendusprogrammid ffl Protsessor on tuuma moodis (kernel mode) või kasutaja moodis (user mode) ffl Monoliitne tuum ffl Tuuma aadressruumi saab käigu pealt mooduleid juurde laadida ffl Moodulid: arenduse hõlbustamiseks, mälu kokkuhoiu jaoks, universaalsuse jaoks, natuke ka 3. partei litsentsiprobleemide leevendamiseks 4
Moodulid ffl Liides: moodulite laadimine / välja laadimine ning sümbolite haldus ffl Sümbolid võivad olla tuuma sisesed või moodulitele eksporditud ffl Moodul saab kasutada ainult eksporditud sümboleid ffl GPL-klausliga eksporditud sümbolid ffl Tainted tuum kui on laaditud kahtlasi mooduleid ffl Sümbolite versioneerimine (modversions) ffl Alamsüsteemide registreerimisfunktsioonid Λ Registreerida saab failisüsteeme, võrguprotokolle, võrguliideseid, muid seadmedraiverid, binaarfailide formaate ffl Ressursihaldus I/O portide ja mäluvahemike haldus, IRQ-de ja DMA kanalite haldus 5
Protsessihaldus ffl fork+exec mudel ffl Copy-On-Write (COW) mudel protsesside kopeerimiseks ffl clone() fork(), mis jagab rohkem (lõimede tekitamiseks) ffl Iga protsessiga on seotud PID (+muu teenindusinfo), volitused, iseloom (personality) ffl Alamprotsessile saab andmeid edasi anda keskkonnamuutujate kaudu ffl Keskkonnamuutujad ja programmi argumendid 6
Protsessi kontekst ffl Planeerimiskontekst (prioriteediinfo, signaalid, registrid,ujukomaregistrid,...) ffl Raamatupidamisinfo (kasutatud aeg ja ressursid) ffl Avatud failide tabel ffl Failisüsteemi kontekst jooksev ja juurkataloog ning nimeruumiinfo ffl Signaalihandlerite tabel ffl Virtuaalmälu kontekst (nimekiri VMA-dest) ffl Lõimed jagavad omavahel VMA kirjeid, muidu eraldi protsessid (kasutajatasemel POSIXühilduv teek, mis Linuxi omapärad ära peidab) ffl Tuumas oma lõimed (paistavad kah protsessistabelist) 7
Planeerimine ffl Tuum võib töötada protsessi kontekstis või ilma protsessi kontekstita (katkestuste poolt algatatud töö) ffl Sünkroniseerimine tuuma sees: katkestused või teisel protsessoril toimuv võib kriitilisi sektsioone segada ) vaja kriitilisi sektsioone kaitsta ffl Bottom Half (! sof tirq) tase katkestuste kohal, aga allpool protsessi konteksti ffl Tuumas väljatõrjumist ei kasutata (kasutatakse 2.5 alates) ffl Kasutajaprotsessidel prioriteedid pluss ajaloo arvestamine ffl Lisaks kaks pehme reaalaja planeerimisklassi (SCHED FIFO ja SCHED RR) 8
Mäluhaldus ffl Füüsiline mälu jaguneb tsoonideks ffl Igas tsoonis nn buddy-allocator järjestikused mälutükid on paarikaupa samasuured, et saaks vabastamisel suuremaks kokku panna. Vajadusel saab omakorda kaheks võrdseks jagada ffl Lehekülje suurus sõltuvalt arhitektuurist 4K.. 8K ffl Ühesuunaline mäluhaldus (viidad protsesside mälult füüsilistele lehekülgedele, tagasi pole) ffl Kerneli tasemel oma mäluhaldus (virtuaalmälu plokkide ja füüsilise mälu plokkide kohta eraldi) ffl Kasutajaprotsessidel on nimekiri VMA-dest (Virtual Memory Area), nende seest viidad füüsilistele lehekülgedele ffl VMA-d võivad jagatud olla (mmap ja clone tõttu) ffl MMU leheküljetabelisse kopeerimiseks hoitakse protsessi juures ka leheküljetabeleid ffl Nõudmisel nullitav mälu (demand zero memory) 9
Programmide käivitamine ffl ELF formaadis binaarid, toetatud on ka A.OUT (3 sorti) ffl Käivitamisel mmap itakse binaar mällu, antakse juhtimine algusse ffl Leheküljepöörduse vead toovad programmi alguse sisse ja hakatakse täitma ffl Programmi alguses olev dünaamiline linkur mmap ib ka dünaamiliselt lingitud teegid ffl Dünaamilise koodi jaoks positsioonist sõltumatu kood (PIC positsion independent code) 10
Failisüsteemid ffl VFS tuumas olev virtuaalne failisüsteem ffl Tegeleb kataloogipuu, nimede ja i-kirjetega ffl Üldistab kõik erinevate failisüsteemide sarnase koodi ning teeb uue failisüsteemi realiseerimise litsamaks ffl Ext2 (2nd Extended Filesystem) seni põhiline failisüsteem Λ Põhineb Minixi failisüsteemil ja UFS ideedel (ikirjed, silindrigrupid) Λ Fragmente ei kasutata, ruumi haldamine plokikaupa Λ Plokigrupid silindrigruppide asemel Λ Bitikaart vabade plokkide kohta Λ Plokkide eelallokeerimine ffl Ext3, Reiserfs, XFS, JFS ffl /proc failisüsteem protsesside silumisinfo ja tuuma andmete jaoks 11
Sisend-väljund ffl Plokkseadmed, märkseadmed, võrguseadmed ffl Võrguseadmetega suheldakse soklite kaudu, enamasti protokollide vahendusel ffl Märkseadmetel liiniprotokoll (line discipline) tty, slip, HDLC,... ffl Plokkseadmetega on seotud kaks puhverdust: ffl Buffer cache puhvrid ootel IO operatsioonide andmetega ning täidetud IO tulemustega ffl Page cache seal hoitakse kõiki laaditud lehekülgi (protsesside kood ja andmed, failisüsteemi puhvrid,...) 12
Protsessidevaheline side ffl Signaalid ffl SYSV IPC (semaforid, jagatud mälu, teatejärjekorrad) ffl mmap() abil saadud jagatud mälu ffl Tuuma siseselt wait queue (signaale ei kasutata) ffl Torud (pipe) nimega ja nimeta ffl Sokliliides 13
Võrk ffl Tuuma tasemel tugi paljudele võrguprotokollidele ffl Võrguprotokolle saab käigu pealt lisada (moodulid) ffl Võrguliideseks kõigi protokollide puhul BSD-st pärit sokliliides (erinevatel protokollidel erinevad soklitüübid) ffl Kõige all on võrguseadmete draiverid (füüsilised või virtuaalsed) ffl skbuf sokliga seotud datagrammi andmed kernelis ffl Tulemüürindus: ipfw+ipfwadm! ipchains! iptables 14
Turvalisus ffl UID, GID, /etc/passwd ffl rwxrwxrwx ffl Kõik on võrdsed, aga root on eriti võrdne ffl Setuid, setgid ffl Rakendusprogrammidele PAM (Pluggable Authentication Modules) ffl Capabilities kõikvõimsa roodu ellimineerimiseks 15