Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!
Kernelis
Kernelis - tai dar taip vadinamas branduolys, jei jau labai lietuviškai sakant. Esminė bet kurios OS dalis - tai ir yra branduolys, paprastai šnekant - OS išties ir yra ne kas kita, kaip branduolys, nes visa kita - tai tik antstatas ant to branduolio, o antstatas gali būti įvairus.
Jei taip paprastai kalbant, tai kernelis veikia kaip tam tikras programinis antstatas ant kompiuterio geležies (būtent ANT), kuris visą tą geležį paverčia naudotina įvairioms normalioms, vartotojiško lygmens programoms. Kadangi tasai kernelis yra centrinė viso ko dalis, tai ir yra vadinamas branduoliu.
Esminės bendriausios kernelio funkcijos - tai geležies abstrakcija (naudojant draiverius), programų pakėlimas ir dinaminis linkinimas, multiprocesinis perjungimas, procesų ir teisių kontrolė, signalų ir duomenų tarp procesų perdavimas. Atrodo nieko tokio, bet tas nieko tokio - tai pati bet kurios OS esmė.
Branduolio architektūra
Panašiai, kaip būna procesoriaus architektūra, taip būna ir branduolio architektūra. Ji gali skirtis gerokai įvairiau, bet paprastai susiveda į tai, kad branduolys skirstomas pagal kai kuriuos kriterijus į tam tikras rūšis.
Vienprocesinės ir daugiaprocesinės OS
Pirmiausiai branduolys skirstomas būna į vieno proceso ir multiprocesinį. Nuo to priklauso ir bendrai visos OS veikimas:
- Vienprocesinės OS būna tokios primityvios, kad tenai branduolio sąvoka dažnai net neminima. Kaip pvz., DOS ar CP/M sistemos būdavo tokios paprastos, kad apie branduolį niekas net nesusimąstydavo, nors jis tenai ir buvo - MSDOS.SYS ir IO.SYS failuose, su kai kuriomis loaderio funkcijomis, įdėtomis į COMMAND.COM. Šios OS buvo tokios primityvios, kad tenai išties netgi nėra ką nagrinėti.
- Multiprocesinės OS būna sudėtingesnės - tenai jau būna aiškesnis branduolys ir aiškesnis procesų valdymas. Nepilnavertės OS turi branduolius, kurie valdo programas, naudodami visokias pranešimų eiles, pvz., kaip senos Windows ar MacOS versijos. Naujesnės sistemos naudoja pilnavertį procesų perjungimą, kur programos pilnai kontroliuojamos - kaip visokiose UNIX, OS/2, Windows NT, MacOS-X ar Linux sistemose.
- Atskirai būna išskiriamos realaus laiko OS, kur branduolys valdo procesus dar ir pagal laiką, kuris skiriamas, ir užtikrina, kad kitas procesas gaus savo procesoriaus pajėgumų porciją su ne didesniu už tam tikrą uždelsimu. Tokios sistemos būna gana komplikuotos, tai jų nebūna daug, pvz., QNX ar kai kurios modifikuotos Linux versijos.
Esminės šiuolaikinių OS branduolių rūšys
Pats branduolys pagal tai, kaip surenkamas, susikonfigūruojantis ir pasidarantis, būna irgi įvairiai klasifikuojamas. Čia tokia iš geresnių klasifikacijų:
- Statinis kernelis - kuris pilnai surenkamas ir sukompiliuojamas, būdavo dažniau labai senose sistemose. Perkeliant į kitą kompiuterį, kernelį paprastai reikdavo perkompiliuoti, naudojant kompiliatorių, sudedant į kernelį reikalingus draiverius, nustatant kintamųjų, masyvų dydžius, reikalingus funkcionalumus ir panašiai. Šitie kerneliai turėjo privalumą - būdavo žymiai greitesni už kitus, tačiau trūkumas būdavo paprastas - kiekvienam bent kiek skirtingam kompiuteriui reikdavo juos perkompiliuoti. Tokias kompiliavimo procedūras dar prisimena visokių seniausių FreeBSD ar Linux versijų naudotojai, kurie yra tokie seni, kad šiais laikais yra vadinami senais perdylomis netgi tarp visokių visai jau senų kompiuterastų.
- Tokios OS atpažįstamos pagal tai, kad instaliavimo metu ar po bet kokių didesnių pakeitimų kernelį, o kartais ir krūvą visokių kitokių OS priedų ar dalių reikia perkompiliuoti. Kai kurios naujesnės OS iš senų laikų turi su tuo susijusį palikimą - pvz., neretoje BSD sistemoje vis dar yra toksai "make buildworld".
- Generinis kernelis - panašus į statinį, tačiau sukonstruotas taip, kad galėtų susirinkti iš paskirų dalių be kompiliatoriaus, nes tos dalys yra sukompiliuotos iš anksto. Kernelis moka pats dinamiškai pagal nustatymus susikurti sau kintamuosius ir masyvus, o paskui susikelia sau likusias dalis. Paprastai tinkama konfigūracija nustatoma OS instaliavimo metu. Tokios būdavo kiek vėlesnės įvairių senovinių BSD kernelių versijos, o ir kažkurie labai seni Linux. Panašiai buvo ir su Windows 9x kerneliais. Tokie kerneliai saikingai sudėtingesni už statinius, o greičiu prilygsta tiems pat statiniams kerneliams.
- Tokių operacinių sistemų požymis - po bet kokių OS parametrų pakeitimų, draiverių pakeitimų ir panašiai būtina sistemą perkrauti.
- Modulinis kernelis - čia jau kernelis būna gerokai labiau nutolęs nuo statinių, nes turi paskiras dalis (modulius), kuriuos gali pasikrauti ar išsikrauti pagal reikalą. Pvz., pasikrauti tam tikrus draiverius, tam tikrą funkcinį modulį ar panašiai. Kadangi visą tą reikia persikraudinėti, tai dinamiškai keičiasi ir poreikis kernelio kintamiesiems. Žodžiu, paties kernelio viduje atsiranda tam tikri procesai, o kernelis pasidaro panašus į atskirą mažą operacinę sistemą, kuri skirta tam, kad realizuotų kažkokią didesnę operacinę sistemą. Tokios būna įvairios modernios OS, įskaitant ir šiuolaikinius BSD ar Linux.
- Geru atveju tokių sistemų nereikia perkraudinėti, netgi perinstaliavus kokius nors esminius draiverius ir pan., tai labai palengvina gyvenimą adminams
- Mikrokernelis - tai toksai modulinis kernelis, kurio esmė yra išmesti iš kernelio visiškai viską, ką tiktai įmanoma lauk, viską paliekant moduliams. Geru atveju kernelis beveik nieko nedaro, nes beveik viską daro tik visokie įvairių paskirčių kernelio moduliai, kurie dalinasi visokiomis veiklomis tarpusavy, o kernelis tik perdavinėja jiems tarpusavio informaciją. Bene vienintelė sėkminga tokio tipo OS buvo QNX, kuriam kernelį ir esminius kontrolės modulius praktikoje rašė asembleriu. Dauguma kitų atvejų bandymai sukurti mikrokernelines sistemas žlugdavo, nes visiems tiems persijungimams ir duomenų perdavimams tarp sistemos modulių tiek neįtikėtinai smarkiai ėsdavo resursus, kad visos tokios OS dar iki gimimo tapdavo negyvais kūdikiais - tipišku tokiu feilo pavyzdžiu gali būti GNU/Hurd.
- Veikimo atveju tokios sistemos pasižymi tuo, kad gali būti sukišamos į neįtikėtinai mažus kiekius atminties ir disko. Lengendinis QNX diskelis į pusantro megabaito talpino visą grafinę OS su langais, interneto naršykle ir dar kažkokiomis nesąmonėmis. Taip, pusantro megabaito. Taip, mes žinome skirtumą tarp megabaito ir gigabaito. Taip, tūkstantį kartų mažiau, nei kokia nors dabartinė OS. Ne, atrodė gerai ir gražiai.
- Virtualizuojantis kernelis - toksai kernelis, kuris gali paleisti savo paties klonus ar kitus kernelius ant virutalių mašinų, taip sukurdamas galimybę vienu metu ant vieno kompiuterio dirbti daugeliui OS. Pirmi tokie kerneliai buvo sukurti dar System/370 kažkokiais priešistoriniais laikais, tačiau labiau išpopuliarėjo tik po to, kai atsirado Solaris sistemoje. Po to greitai tokio tipo kerneliai atsirado ir kitur, taip pat ir Linux.
- Tokių sistemų požymis - tai būtent galimybė leisti virtualias mašinas pačios OS priemonėmis.
OS branduolys ir jo nesupratimas
Kadangi branduolys yra ta operacinės sistemos dalis, kuri sugeba dirbti, kai kompiuteris tėra plikas, tai branduolys būna gana komplikuotas ir sudėtingas. Tai ir supratimą, kaip veikia OS, paprastai turi tik tie žmonės, kurie supranta branduolio veikimą, o tą branduolio veikimą paprastai supranta tik žmonės, kurie turi bent minimalų supratimą ir patirtį, programuojant asembleriu. O kadangi asembleriu beveik niekas neprogramuoja, tai ir supratimo apie kernelio veikimą beveik niekas neturi.
Vienas iš būdų, kaip atpažinti savimi patenkintus lamerius - tai pagal taim, kaip jie vaizduojasi, kad supranta, kas yra kernelis, bet realiai nieko nenutuokia. Tipiškas Dunning-Kruger efektas čia pasireiškia per tai, kad lameris galvoja, kad kernelis yra kažkas neesminio ir pasakoja apie tai, kad, pvz., koks nors Linux išties turi vadintis ne Linux, o būtinai tiktai GNU/Linux, nes suprantate, Linus Torvalds tiktai branduolį sukūrė, o visa OS tai daug daug daugiau, nei kernelis, o be to kernelį galima ir kokį nors kitą panaudoti.
Vartotojai, kurie yra realiai patyrę, turi bent šiokius tokius programavimo pagrindus ir suvokimą apie OS vidurius, supranta, kad kernelis yra OS, o OS yra kernelis. Ir kartu supranta, kad kernelis - tai yra klaikiai komplikuota, sudėtinga ir jautru, kur geriau be reikalo nagų nekišti. Ir supranta, kodėl Linus Torvalds ar kokie kiti kernelių developeriai kartais taip pasiunta ir visokiais keiksmažodžiais plūsta tuos, kas be galvos pabando kernelį modifikuoti. Supratimas apie kernelio sudėtingumą ir tai, kad jis yra viso ko esmė - tai yra patyrusio vartotojo požymis.
Taip ar kitaip, kernelio sudėtingumas yra geras būdas lamerių atpažinimui. Patys pabandykite ir pamatysit.