S više od 13 milijuna linija koda, Linux kernel je jedan od najvećih open source projekata na svijetu, ali ono što je kernel i za što se koristi?
Kernel je najniža razina lako zamjenjivog softvera koji se povezuje s hardverom na vašem računalu. Odgovorno je za povezivanje svih vaših aplikacija koje se pokreću u "korisničkom načinu" do fizičkog hardvera i omogućuju procesima poznatim kao poslužitelji da međusobno one međusobno komuniciraju putem komunikacijskih procesa (IPC).
Postoje, naravno, razni načini za izgradnju jezgri i arhitektonskih razmatranja pri izgradnji jednog od nule. Općenito, većina zrna spadaju u jednu od tri vrste: monolitni, mikrokernel i hibridni. Linux je monolitni kernel, dok OS X (XNU) i Windows 7 koriste hibridne kernele. Krenimo na kratko razgledavanje tri kategorije kako bismo mogli kasnije proći detaljnije.
Slika od popodnevni kokica
mikrokernelu
Microkernel uzima pristup samo upravljanju onome što ima: CPU, memorija i IPC. Mnogo se drugo na računalu može vidjeti kao dodatak i može se rukovati u korisničkom načinu rada. Microkerneli imaju prednost od prenosivosti jer se ne moraju brinuti ako promijenite grafičku karticu ili čak vaš operativni sustav sve dok operacijski sustav i dalje pokušava pristupiti hardveru na isti način. Microkerneli također imaju vrlo mali trag za memoriju i instalaciju prostora, a oni imaju tendenciju da budu sigurniji jer se u korisničkom načinu izvode samo određeni procesi koji nemaju visoku dozvolu kao način supervizora.
prozodija
kontra
Monolitni kernel
Monolitne jezgre su suprotno mikrokernelima jer obuhvaćaju ne samo CPU, memoriju i IPC, već uključuju i stvari poput upravljačkih programa uređaja, upravljanja datotekama i poziva poslužitelja sustava. Monolitne jezgre imaju tendenciju da budu bolji u pristupu hardveru i višezadaćnosti, jer ako program treba dobiti informacije iz memorije ili drugog procesa, ima više izravne linije da mu pristupi i ne mora čekati u redu kako bi se stvari učinile. To, međutim, može uzrokovati probleme jer više stvari koje se pokreću u načinu nadzora, više stvari koje mogu dovesti vaš sustav ako se ne ponaša ispravno.
prozodija
kontra
Slika putem schoschie na Flickr
Hibridni kernel
Hibridni jezgri imaju mogućnost odabira onoga što žele pokrenuti u načinu rada korisnika i onoga što žele pokrenuti u načinu nadzora. Često se stvari poput upravljačkih programa uređaja i datotečnog sustava I / O pokreću u korisničkom načinu dok se IPC i pozivi poslužitelja zadržavaju u nadređenom načinu rada. To daje najbolje od oba svijeta, ali često će zahtijevati više posla od proizvođača hardvera, jer sve odgovornosti vozača je do njih. Također može imati neke od latentnih problema koji su svojstveni mikrokernelima.
prozodija
kontra
Datoteka kernela, u Ubuntu, pohranjena je u mapi / boot i zove se vmlinuz-verzija, Ime vmlinuz dolazi iz unix svijeta u kojem su svoje 60-tog stoljeća nazivali "unix" svojim jezgrama, tako da je Linux počeo zvati njihovu jezgru "linux" kada se prvi put razvio u 90-ima.
Kada je razvijena virtualna memorija za lakše višezadaćne sposobnosti, "vm" je stavljen na prednju stranu datoteke da pokaže da kernel podržava virtualnu memoriju. Neko vrijeme Linux kernel nazvan je vmlinux, ali kernel je postao prevelik da bi se uklopio u raspoloživu boot memorije tako da je slika kernela komprimirana i kraj x promijenjen u z kako bi pokazao da je komprimiran sa zlib kompresijom. Ta se kompresija ne koristi uvijek, često se zamjenjuju LZMA ili BZIP2, a neke su jezgre jednostavno zove zImage.
Broj verzije bit će u obliku A.B.C.D gdje A.B vjerojatno će biti 2.6, C će biti vaša verzija, a D označava zakrpe ili popravke.
U / boot mapi bit će i druge vrlo važne datoteke zvane initrd.img-verzija, system.map-verzija i config-verzija. Initrd datoteka se koristi kao mali RAM disk koji ekstrahira i izvršava stvarni kernel datoteku. File system.map koristi se za upravljanje memorijom prije no što se jezgra u potpunosti učita, a konfiguracijska datoteka govori kernelu o opcijama i modulima za učitavanje u sliku kernela kada se ona sastavlja.
Budući da je Linux kernel monolitan, ima najveći trag i najsloženiju nad drugim vrstama jezgri. To je bila značajka dizajna koja je bila prilično debata u ranim danima Linuxa i još uvijek nosi neke iste dizajnerske nedostatke koje su monolitne jezgre inherentne.
Jedna stvar koju su programeri Linux kernela napravili da bi dobili ove nedostatke bio je napraviti modula kernela koji bi mogli biti učitani i učitani tijekom izvođenja, što znači da možete dodati ili ukloniti značajke svog kernela na letu. To može ići dalje od dodavanja hardverske funkcionalnosti na kernel, uključivanjem modula koji pokreću poslužiteljske procese, kao što je virtualizacija niske razine, ali može dopustiti i da se cijeli kernel zamijeni bez potrebe za ponovno pokretanje računala u nekim slučajevima.
Zamislite da biste mogli nadograditi na servisni paket sustava Windows bez potrebe za ponovnim pokretanjem ...
Što ako je Windows imao svaki dostupan upravljački program već instaliran i samo ste morali uključiti vozače koji su vam potrebni? To je u biti ono što moduli kernela rade za Linux. Kernel moduli, također poznati kao učitani kernel modul (LKM), bitni su za održavanje kernela koji funkcionira sa svim vašim hardverom bez konzumiranja sve raspoložive memorije.
Modul obično dodaje funkcionalnost osnovnoj jezgri za stvari kao što su uređaji, datotečni sustavi i pozivi sustava. LKM-ovi imaju ekstenziju datoteke .ko i obično se pohranjuju u direktorij / lib / modules. Zbog svoje modularne prirode možete jednostavno prilagoditi vašu jezgru postavljanjem modula za učitavanje ili ne učitavanje tijekom pokretanja s naredbom menuconfig ili uređivanjem vaše / boot / config datoteke ili možete učitati i iskrcati module u letu pomoću modprobea naredba.
Treće strane i zatvoreni izvorni moduli dostupni su u nekim distribucijama, kao što je Ubuntu, i možda se ne mogu instalirati prema zadanim postavkama jer izvorni kod za module nije dostupan. Razvojni programer softvera (npr. NVidia, ATI, među ostalima) ne daje izvorni kod, već oni grade svoje module i sastavljaju potrebne .ko datoteke za distribuciju. Iako su ovi moduli besplatni kao u pivu, oni nisu besplatni kao u govoru i stoga nisu dio nekih distribucija, jer održavatelji smatraju da "kvarlja" jezgru pružajući ne-slobodan softver.
Kernel nije čarobna, ali je potpuno neophodno za bilo koje računalo koje radi ispravno. Linux kernel je drugačiji od OS X i Windows, jer uključuje upravljačke programe na razini kernela i podržava mnoge stvari "iz kutije". Nadamo se da ćete znati malo više o tome kako vaš softver i hardver zajedno rade i koje datoteke morate pokrenuti vaše računalo.
Kernel.org
Slika od ingridtaylar