Linux kernel: razvoj, opis procesa razvoja, izgradnja, instalacija, ažuriranje. Kako nadograditi Linux kernel?

10. 6. 2019.

Naravno, danas su najčešći operacijski sustavi Windows, koje je Microsoft izdao, ali ne znaju svi korisnici da to zapravo nije prvi i zasigurno nije jedini OS na svijetu. Kao što znate, operativni su sustavi izvorno razvijeni već 60-ih godina prošlog stoljeća, ali zbog mnogih specifičnosti računalne distribucije u to vrijeme nisu postali toliko uobičajeni da predstavljaju isključivo akademske projekte.

Kako se Linux pojavio?

Linux kernel

Prvi sustav koji je prešao granice svog roditelja je Unix, koji se odmah proširio na različite obrazovne ustanove, imajući potpuno otvorenu prirodu. Tijekom vremena, odlučeno je sakriti izvorni kod Unixa kao poslovne tajne kao rezultat toga, programeri su morali biti zadovoljni samo teorijom. Situacija se mogla dramatično promijeniti nakon što je izdan operativni sustav Minix, kao i njegov nasljednik pod nazivom Linux. Glavna značajka ovih operacijskih sustava je da sadrže potpuno otvoren izvorni kod, odnosno Linux kernel je dostupan svim korisnicima. Iz tog razloga, ovaj OS danas je drugi najčešći.

Što se zna o njemu?

U suvremenoj književnosti može se naći ne toliko specifičnih informacija o tome kako funkcioniraju pojedini podsustavi, što znatno otežava razvoj i daljnje poboljšanje ovog OS-a, kao što tvorac prethodnika, proučavajući samo teoriju, počinje formirati previše jednostrano viđenje kako može izgledati kao punopravni operativni sustav. Stvarno smislene stvari mogu jednostavno biti izostavljene, jer teorija ne ulazi duboko u njih.

Važno je napomenuti da korisnici izražavaju veliki interes za funkcioniranje Linux kernela i, u principu, za cijeli operativni sustav. Tako se ubrzo nakon pojavljivanja Minixa pojavila i zasebna vijest pod nazivom USENET, namijenjena isključivo za raspravu o tom sustavu. Nakon nekoliko tjedana, ova grupa je imala više od 40.000 pretplatnika, od kojih je većina pokušala dodati mnogo mogućnosti sustavu, pokušavajući ga učiniti mnogo većim i boljim. Svakoga dana stotine ljudi diljem svijeta razmišljalo je o tome koje druge ideje i isječke koda mogu biti predložene.

Međutim, mnogi se pitaju zašto je tako malo literature dostupno na Linux kernelu sada, ali u stvari moglo bi biti nekoliko temeljnih razloga.

Komercijalna vrijednost dokumentacije

kako ažurirati Linux kernel

Nakon što se Unix pojavio, njegove su šifre bile poznate masama, zbog čega su aktivno proučavane diljem svijeta. Najpoznatija knjiga koja opisuje ovaj OS bila je Lions Commentary na Unixu, koja je prvi put objavljena davne 1977. godine. Ova knjiga opisuje rad ovog operativnog sustava u što je moguće više detalja, što je rezultiralo korištenjem na različitim sveučilišnim kolegijima posvećenim proučavanju operativnih sustava. Međutim, s vremenom je postalo jasno da se Unix postupno pretvara u komercijalni proizvod, zbog čega je potpuno zabranjeno proučavati izvorni kod na različitim tečajevima tako da status komercijalne tajne ne bi bio ugrožen.

Kako stručnjaci kažu, da bi se stvorili preduvjeti za istinski uspješan privatni posao, najprije morate formirati potpuno zatvorenu komercijalnu infrastrukturu pomoću koje možete steći razumijevanje koda, a to bi trebalo raditi isključivo za tvrtku. Svako prikrivanje informacija o arhitekturi iznimno je učinkovita strategija za upravljanje projektom, gdje postoje otvoreni kodovi.

Poteškoće u svladavanju tekstova

linux opis kernela

Krivulja troškova potrebna za detaljno proučavanje Linux kernela postaje sve strmija i dulja, jer sustav stalno postaje sve složeniji i njegov se volumen povećava.

Točno tumačenje programa danas je prilično ozbiljan problem, a leži u činjenici da nije uvijek dovoljno imati samo vlastite izvore. U slučaju da je sustav ili program napisan na relativno niskim jezicima, kao što su Cobol, Fortran ili C, a ima i lošu dokumentaciju, onda se sva glavna projektna rješenja potpuno raspadaju u kodiranje trivijalnosti, zbog čega zahtijevaju potpunu rekonstrukciju. U takvim slučajevima, vrijednost učinkovitije dokumentacije, uključujući detaljan opis arhitekture, kao i specifikaciju sučelja, može u konačnici biti čak i veća od same vrijednosti izvornog teksta.

Predložen je jedan mogući pristup Linus Torvalds, što je bio razvoj Linux kernela. On je predložio punu jasnoću izvornog koda, to jest, pružanje iznimno jasne strukture, user-friendly sučelja, kao i slijedeći načelo "učinite malo, ali učinite to kvalitativno".

Ako govorimo o pristupu koji je predložio Andrew Morton, ovdje nudimo više komentara izravno unutar samog izvornog koda, tako da čitatelj može razumjeti konačnu namjeru programera.

Koje su razlike između Unix kernela i Linuxa?

Naravno, opis Linux kernela znatno se razlikuje od osnovnog opisa Unixa, ali mnogi ne znaju koje su to razlike.

Zbog istog API-ja, kao i zajedničkog podrijetla, moderna Unix kernela su prilično slična jedni drugima, a iznimke su neke monolitne statične binarne datoteke koje postoje kao velike izvršne slike koje se pokreću samo jednom i koriste jednu kopiju adresnog prostora. Kako bi se osigurao normalan rad Unixa, potrebno je osigurati cjelovit sustav s kontrolom kontrolera memorije stranične memorije, pomoću kojeg će se moći osigurati učinkovita zaštita memorije u sustavu, kao i osigurati svakom pojedinačnom procesu vlastiti virtualni adresni prostor.

Linux kernel se ne temelji na bilo kojem određenom Unix sustavu i potpuno je monolit. Međutim, unatoč tome, njegova struktura osigurava određena svojstva mikronuklearne arhitekture.

razlike

Linux kernel instalacija

Postoji nekoliko razlika koje vam omogućuju da shvatite kako prepoznati Linux kernel:

  • Prije svega, vrijedi napomenuti mogućnost podržavanja dinamički učitanih modula. Unatoč činjenici da je kernel ovog operacijskog sustava potpuno monolitan, dodatno se podržava i mogućnost dinamičkog učitavanja i uklanjanja koda u slučaju takve potrebe. Ova značajka izvorno se pojavila u verziji 0.99, a tome je pridonio Peter MacDonald.
  • Kernel može podržavati simetrično višestruko procesiranje. U velikoj većini komercijalnih verzija Unix OS-a, ova funkcija je podržana, ali u tradicionalnim implementacijama takva podrška je češće odsutna.
  • Linux kernel je pre-emptive, to jest, može potpuno istisnuti izvršni zadatak čak i ako radi u modu danog kernela. Među većinom komercijalnih implementacija, pre-emperative kernel Unix OS-a ima samo IRIX, Solaris i Unix.
  • U Linuxu je uobičajeno koristiti potpuno drugačiji pristup implementaciji niti, zbog čega se praktički ne razlikuju od standardnih procesa. Uzimajući ih u obzir s gledišta kernela, može se reći da su svi procesi apsolutno identični, samo se neki od njih razlikuju po dostupnosti zajedničkih resursa.
  • Linux kernel, opis razvoja procesa koji će biti prikazan kasnije, nema određene Unix funkcije za koje je utvrđeno da su loše implementirane. To se posebno odnosi na STREAMS i neke druge.

moduli

kako prepoznati Linux kernel

Unatoč činjenici da je sustav monolitni, može se koristiti za dinamičko umetanje ili uklanjanje kernel koda u vrijeme rada. Objekti koji se mogu učitati u kernel su moduli Linux kernela.

U svojoj osnovi, modul je standardni program, jer također ima izlazne i ulazne točke, a nalazi se u binarnoj datoteci. Međutim, treba napomenuti da moduli imaju izravan pristup različitim funkcijama i strukturama jezgre. Za one programe koji se nalaze u korisničkom prostoru, ovaj pristup je ograničen korištenjem sučelja biblioteke prevoditelja.

Moduli sudjeluju u različitim procesima s kojima je povezan operativni sustav, uključujući i ažuriranje Linux kernela. Neke funkcije mogu biti dostupne isključivo za one module koji se distribuiraju pod GPL licencom, osobito, to se odnosi na sposobnost rada s procesnim redovima.

zbor

Linux kernel je izgrađen pomoću specijaliziranog programa Make. Nakon što dobijete izvorni kod kernela, morate raspakirati arhivu linux-2.6.18.tar.bz2, što se radi uz pomoć posebnog Tar uslužnog programa koji se otvara u ime superkorisnika.

Naredba make defconfig omogućit će vam da koristite standardnu ​​konfiguraciju za ovu arhitekturu, ali trebate razumjeti da u većini slučajeva to nije dovoljno, tako da morate ručno konfigurirati kernel. Da biste pozvali program za konfiguriranje jezgre, unesite naredbu make menuconfig. Sve dodatne informacije o tome što su parametri naredbe make nalaze se u zasebnoj README datoteci.

Za pokretanje kernela u minimalnoj konfiguraciji, dovoljno je jednostavno odrediti upravljački program IDE kontrolera koji koristite u odjeljku "PCI IDE chipset support". Osim toga, trebate obratiti pozornost na odjeljak "Datotečni sustavi", u kojem bi trebali biti označeni postojeći datotečni sustavi.

Izgradnja jezgre počinje nakon pritiska naredbe make. U većini slučajeva koristi se naredba make -j2, budući da će biti moguće nadograditi Linux kernel mnogo brže. U ovom slučaju, parametar –j2 ukazuje da se istovremeno pokreću dvije niti izvršenja.

upozorenje

Linux kernel moduli

Izvođenje bilo kakvih eksperimenata s kernelom može dovesti do vrlo različitih štetnih procesa, budući da ne može svaki stručnjak ažurirati Linux kernel. Posljedice mogu biti najozbiljnije, uključujući potpuni pad sustava i potpuno uništenje informacija na vašem disku. Iz tog razloga, da bi se osigurala maksimalna sigurnost, preporučuje se da koristite samo zasebnu distribuciju koja je instalirana na virtualnom računalu.

Osim sigurnosti, možete ga koristiti za postizanje ujednačene konfiguracije svih računala koja su bila uključena u ovaj postupak. Preporučljivo je koristiti Slackware Linux kao takvu distribuciju jer koristi nemodificirane softverske komponente. VMware ili QEMU mogu djelovati kao virtualni stroj, ali to nije potrebno.

Instaliranje Linux kernela traje oko 20 minuta, dok je vrijedno napomenuti da se gradnja jezgre, koja je izgrađena u skladu sa standardnom konfiguracijom, može obaviti bez stvaranja RAM diska, jer u ovom slučaju nema kreiranja važnih pokretačkih programa.

dizajn

linux razvoj jezgre

Kernel je skup sučelja nazvanih sistemski pozivi koji osiguravaju interakciju između različitih aplikacijskih programa koji djeluju u korisničkom prostoru kao i hardvera sustava. Na primjer, kada radite s pojedinačnim datotekama, uslužni programi možda neće uzeti u obzir vrstu tvrdog diska, kao ni sustav datoteka koji se na njemu koristi.

Sustavskim pozivima osigurava se jamstvo stabilnog i sigurnog rada sustava. Budući da je jezgra posrednik između različitih programa i sistemskih resursa, oni mogu donositi odluke o odobravanju pristupa u potpunosti u skladu s korisničkim pravima, kao i niz drugih kriterija.

Razvoj aplikativnih programa provodi se pomoću specijaliziranih sučelja softverskih aplikacija. U ovom slučaju, nema potrebe za korelacijom između sučelja pomoću aplikacija i onih koje pruža sam kernel. Može postojati apsolutno identičan API za nekoliko operacijskih sustava, dok njegova implementacija može biti izvrsna. Na primjer, poznati Linux i FreeBSD sustav u potpunosti su u skladu s POSIX standardom, zbog čega se većina aplikacija pisanih posebno za jedan operativni sustav može kasnije prenijeti na drugu ako je potrebno.

U određenom dijelu, sučelje za funkcije sustava osigurava se pomoću biblioteke C. Na primjer, funkcija printf omogućuje vam da formirate liniju koja odgovara navedenom formatu, zbog čega će se taj sudoper prenijeti na sustav za pisanje koji ga šalje standardnom izlaznom uređaju, koji može biti, na primjer, terminal. ,

Osim toga zasebna knjižnica funkcije jezika C također pruža prilično velik dio POSIX API standarda. Konkretno, uz pomoć naredbe strace, ako je potrebno, moguće je detaljno pratiti privlačnost određenog programa na kernel, ako se provodi pomoću sistemskih poziva. Zbog toga se ova naredba često koristi kada dođe do grešaka, za njihovo otkrivanje i za pronalaženje uzroka njihovog pojavljivanja.

Između ostalog, vrijedi spomenuti i činjenicu da Linux ima apsolutno jedinstvenu implementaciju niti, budući da nema razlike između niti i procesa. Multithreading je organiziran kao proces s dijeljenim resursima, dok u prostoru jezgre postoje i odvojene niti koje se izvode isključivo tamo. Međutim, njihovo planiranje i izvršenje provodi se na isti način kao u slučaju standardnih procesa. Kad god je to moguće, svi programi koji se izvode u kernelu nazivaju se zasebnim zadacima, dok se programi koji se izvode u korisničkom načinu nazivaju procesima.

Važno je napomenuti da u modernim sustavima procesi istovremeno koriste dva virtualna resursa.