Početna » kako da » Što je Linux kernel i što radi?

    Što je Linux kernel i što radi?


    S više od 13 milijuna redaka koda, Linux kernel je jedan od najvećih open source projekata na svijetu, ali što je kernel i za što se koristi?

    Dakle, što je kernel?

    Kernel je najniža razina lako zamjenjivog softvera koji se povezuje s hardverom vašeg računala. Odgovoran je za povezivanje svih vaših aplikacija koje se izvode u "korisničkom modu" sve do fizičkog hardvera, a dopuštajući procesima, poznatim kao poslužitelji, međusobno dobivanje informacija putem inter-procesne komunikacije (IPC).

    Različite vrste jezgri

    Postoje, naravno, različiti načini za izgradnju kernela i arhitektonskih razmatranja pri izgradnji jednog od nule. Općenito, većina zrna spada u jedan od tri tipa: monolitni, mikrokernel i hibrid. Linux je monolitni kernel, dok OS X (XNU) i Windows 7 koriste hibridne jezgre. Uzmimo brzi obilazak triju kategorija kako bismo kasnije mogli saznati više detalja.


    Slika po kokice

    mikrokernelu
    Mikrokernel ima pristup samo upravljanju svojim: CPU-om, memorijom i IPC-om. Gotovo sve ostalo u računalu može se promatrati kao dodatna oprema i može se rukovati u korisničkom načinu rada. Mikrokerneli imaju prednost prenosivosti jer ne moraju brinuti ako promijenite video karticu ili čak operativni sustav tako dugo dok operativni sustav i dalje pokušava pristupiti hardveru na isti način. Mikrokerneli također imaju vrlo malu površinu, i za memoriju i za instalaciju, a imaju veću sigurnost jer se u korisničkom načinu rada pokreću samo određeni procesi koji nemaju visoke dozvole kao način nadzora.

    prozodija

    • pokretnost
    • Mali instalacijski trag
    • Mali trag memorije
    • sigurnosti

    kontra

    • Hardver je više apstrahiran kroz upravljačke programe
    • Hardver može reagirati sporije jer su vozači u korisničkom načinu rada
    • Procesi moraju čekati u redu da bi dobili informacije
    • Procesi ne mogu dobiti pristup drugim procesima bez čekanja

    Monolitna jezgra
    Monolitni kerneli su suprotni od mikrokernela jer obuhvaćaju ne samo CPU, memoriju i IPC, već također uključuju i upravljačke programe uređaja, upravljanje sustavom datoteka i pozive poslužitelja sustava. Monolitni kerneli imaju tendenciju da budu bolji u pristupu hardveru i višezadaćnosti, jer ako program treba dobiti informacije iz memorije ili drugog procesa koji je pokrenut, ima izravniju liniju za pristup i ne mora čekati u redu da bi se stvari obavile. To međutim može uzrokovati probleme jer što više stvari radi u načinu rada nadzornika, to više stvari može srušiti vaš sustav ako se ne ponašate ispravno.

    prozodija

    • Više izravnog pristupa hardveru za programe
    • Lakše je komunicirati između procesa
    • Ako je vaš uređaj podržan, trebao bi raditi bez dodatnih instalacija
    • Procesi brže reagiraju jer ne postoji red za procesorsko vrijeme

    kontra

    • Veliki instalacijski trag
    • Veliki memorijski otisak
    • Manje je sigurno jer sve radi u nadzornom modu


    Slika putem schoschie na Flickr

    Hibridna jezgra
    Hibridna jezgra imaju mogućnost odabira i odabira onoga što žele raditi u korisničkom načinu rada i onoga što žele raditi u nadzorničkom modu. Često će se u korisničkom načinu rada izvoditi stvari poput upravljačkih programa uređaja i I / O datotečnog sustava, dok će se pozivi IPC-a i poslužitelja čuvati u načinu nadzora. To daje najbolje od oba svijeta, ali često će zahtijevati više rada proizvođača hardvera jer je sva odgovornost vozača na njima. To također može imati neke od problema s kašnjenjem koji su svojstveni mikrokernelima.

    prozodija

    • Razvojni programer može odabrati i izabrati što će se izvoditi u korisničkom načinu rada i što radi u načinu rada nadzornika
    • Manja instalacija otiska od monolitnog kernela
    • Fleksibilniji od drugih modela

    kontra

    • Može patiti od istog procesa zaostajanja kao mikrokernel
    • Upravljačima uređaja moraju upravljati korisnici (obično)

    Gdje su Linux kernel datoteke?

    Datoteka kernela u Ubuntuu je pohranjena u vašoj / boot mapi i zove se vmlinuz-verzija. Ime vmlinuz dolazi iz unix svijeta u kojem su se jezgra zvala jednostavno "unix" još davnih 60-ih, tako da je Linux počeo zvati svoj kernel "linux" kada je prvi put razvijen 90-ih.

    Kada je virtualna memorija razvijena za lakše multitasking sposobnosti, “vm” je stavljen na prednju stranu datoteke kako bi se pokazalo da kernel podržava virtualnu memoriju. Neko je vrijeme Linux kernel zvao vmlinux, ali je kernel postao prevelik da bi se uklopio u raspoloživu boot memoriju tako da je slika jezgre komprimirana i kraj x je promijenjen u z da bi se prikazao da je komprimiran sa zlib kompresijom. Ista kompresija se ne koristi uvijek, često se zamjenjuje s LZMA ili BZIP2, a neki se jezgri jednostavno nazivaju zImage.

    Numeriranje verzije bit će u obliku A.B.C.D gdje će A.B vjerojatno biti 2.6, C će biti vaša verzija, a D označava vaše zakrpe ili popravke.

    U mapi / boot bit će i drugih vrlo važnih datoteka pod nazivom initrd.img-version, system.map-version i config-version. Datoteka initrd koristi se kao mali RAM disk koji izvlači i izvršava stvarnu datoteku kernela. Datoteka system.map koristi se za upravljanje memorijom prije nego što se kernel u potpunosti učita, a konfiguracijska datoteka kernelu kaže koje opcije i moduli učitati u sliku jezgre kada se kompajlira.

    Arhitektura jezgre Linuxa

    Budući da je Linux kernel monolitni, ima najveći otisak i najsloženiji od ostalih tipova kernela. To je bila značajka dizajna koja je bila pod vrlo malom raspravom u ranim danima Linuxa i još uvijek nosi neke od istih nedostataka u dizajnu koje su monolitna jezgra inherentna.

    Jedna stvar koju su programeri Linux kernela napravili kako bi zaobišli te nedostatke je bila izrada kernel modula koji bi se mogli učitati i iskrcati tijekom izvođenja, što znači da možete dodavati ili uklanjati značajke kernela u hodu. To može ići dalje od dodavanja hardverske funkcionalnosti kernelu, uključujući module koji pokreću poslužiteljske procese, kao što je virtualizacija na niskoj razini, ali također može dopustiti da se cijeli kernel zamijeni bez potrebe za ponovnim pokretanjem računala u nekim slučajevima.

    Zamislite da možete nadograditi na Windows servisni paket bez potrebe za ponovnim pokretanjem ...

    Moduli jezgre

    Što ako je Windows imao već instaliran svaki upravljački program, a vi ste samo morali uključiti potrebne upravljačke programe? To je u suštini ono što kernel moduli rade za Linux. Moduli jezgre, poznati i kao kernel koji se može učitati (LKM), bitni su za održavanje kernela sa svim vašim hardverom bez konzumiranja sve raspoložive memorije.

    Modul obično dodaje funkcionalnost osnovnom kernelu za stvari poput uređaja, datotečnih sustava i sistemskih poziva. LKM-ovi imaju datotečni nastavak .ko i obično su pohranjeni u imeniku / lib / moduli. Zbog svoje modularne prirode jednostavno možete prilagoditi svoj kernel postavljanjem modula za učitavanje ili ne učitavanje tijekom pokretanja s naredbom menuconfig ili uređivanjem / boot / config datoteke, ili možete učitati i ukloniti module u pokretu s modprobe naredba.

    Moduli treće strane i zatvorenog izvora dostupni su u nekim distribucijama, kao što je Ubuntu, i možda neće biti instalirani po defaultu jer izvorni kod modula nije dostupan. Programer softvera (tj. NVidia, ATI, među ostalima) ne osigurava izvorni kod, već izrađuje vlastite module i kompiliraju potrebne datoteke .ko za distribuciju. Dok su ti moduli besplatni kao u pivu, oni nisu slobodni kao u govoru i stoga nisu uključeni u neke distribucije jer održavatelji osjećaju da "kvari" kernel tako što pruža neslobodan softver.

    Kernel nije magija, ali je potpuno bitan za bilo koje računalo koje radi ispravno. Linux kernel se razlikuje od OS X i Windowsa jer uključuje upravljačke programe na razini kernela i mnoge stvari podržava "izvan okvira". Nadam se da ćete znati nešto više o tome kako vaš softver i hardver rade zajedno i koje datoteke trebate za pokretanje računala.

    Kernel.org
    Slika po ingridtaylar