Jedro Linuxa: razvoj, opis razvojnega procesa, gradnja, namestitev, posodobitev. Kako nadgraditi jedro Linuxa?

10. 6. 2019

Seveda so danes najpogostejši operacijski sistemi Windows, ki jih je izdal Microsoft, vendar vsi uporabniki ne vedo, da to dejansko ni prvi in ​​zagotovo ni edini OS na svetu. Kot veste, so bili operacijski sistemi prvotno razviti že v šestdesetih letih prejšnjega stoletja, vendar zaradi številnih specifičnih značilnosti računalniške distribucije takrat niso postali tako pogosti, da bi predstavljali izključno akademske projekte.

Kako se je pojavil Linux?

linux kernel

Prvi sistem, ki je presegel meje svojega starša, je Unix, ki se je takoj razširil na različne izobraževalne ustanove, ki imajo povsem odprto naravo. Sčasoma se je odločilo skriti izvorno kodo Unixa kot poslovne skrivnosti zato so morali razvijalci biti zadovoljni samo s teorijo. Stanje se je lahko dramatično spremenilo po izdaji operacijskega sistema Minix in njegovem nasledniku Linuxu. Glavna značilnost teh operacijskih sistemov je, da vsebujejo popolnoma odprto izvorno kodo, tj. Jedro Linuxa je dostopno vsem uporabnikom. Zato je ta operacijski sistem danes drugi najpogostejši.

Kaj je znano o njem?

V sodobni literaturi najdemo ne toliko specifičnih informacij o tem, kako delujejo posamezni podsistemi, kar bistveno otežuje razvoj in nadaljnje izboljševanje tega OS-a, saj učenec predhodnika ugotavlja, da študenti začnejo oblikovati preveč enostranski pogled na to, lahko izgleda kot popoln operacijski sistem. Resnično pomembne stvari lahko preprosto izpustite, ker teorija ne gre globoko v njih.

Treba je omeniti, da uporabniki zelo zanimajo, kako deluje jedro Linuxa in načeloma celoten operacijski sistem. Tako se je kmalu po pojavu Minixa pojavila tudi posebna skupina novic, imenovana USENET, ki je bila namenjena izključno za razpravo o tem sistemu. Po nekaj tednih je imela ta skupina več kot 40.000 naročnikov, večina jih je poskušala sistemu dodati veliko priložnosti, da bi jo naredila veliko večje in boljše. Vsak dan je na stotine ljudi po vsem svetu razmišljalo, kakšne druge zamisli in odlomke kode je mogoče predlagati.

Vendar se mnogi sprašujejo, zakaj je zdaj na jedru Linuxa tako malo literature, toda v resnici lahko obstaja več razlogov.

Komercialna vrednost dokumentacije

kako posodobiti linux kernel

Ko se je Unix pojavil, so bile njegove kode znane množicam, zaradi česar so se aktivno raziskovale po vsem svetu. Najbolj znana knjiga, ki opisuje ta OS, je bil Lions Commentary na Unixu, ki je bila prvič objavljena leta 1977. Ta knjiga opisuje delo tega operacijskega sistema čim bolj podrobno, zaradi česar je bila uporabljena v različnih univerzitetnih tečajih, namenjenih proučevanju operacijskih sistemov. Vendar pa je sčasoma postalo jasno, da se Unix postopoma spreminja v komercialni izdelek, zaradi česar je bilo popolnoma prepovedano preučiti izvorno kodo na različnih tečajih, tako da status poslovne skrivnosti ne bi bil ogrožen.

Strokovnjaki pravijo, da ustvarite predpogoje za resnično uspešen zasebni posel, zato morate najprej oblikovati popolnoma zaprto poslovno infrastrukturo, s katero boste lahko razumeli kodo in delovati izključno za podjetje. Vsako prikrivanje informacij o arhitekturi je izredno učinkovita strategija za nadzor projekta, kjer so odprte kode.

Težave pri obvladovanju besedil

linux opis jedra

Stroškovna krivulja, ki je potrebna za podrobno preučevanje jedra Linuxa, postaja vse bolj strma in daljša, saj sistem nenehno postaja vse bolj kompleksen in se njegov obseg povečuje.

Pravilna razlaga programov je danes precej resen problem in leži v tem, da ni vedno dovolj imeti samo svoje vire. V primeru, da je sistem ali program napisan v relativno nizkem jeziku, kot sta Cobol, Fortran ali C in ima tudi slabo kakovostno dokumentacijo, se vse pomembne oblikovalske rešitve popolnoma raztopijo v kodiranje malenkosti, zaradi česar zahtevajo popolno rekonstrukcijo. V takih primerih lahko vrednost učinkovitejše dokumentacije, vključno s podrobnim opisom arhitekture, kakor tudi specifikacijo vmesnika, na koncu postane celo višja od vrednosti samega izvornega besedila.

Predlagan je en možen pristop Linus Torvalds, kar je bil razvoj jedra Linuxa. Predlagal je popolno jasnost izvorne kode, to je zagotovitev izjemno jasne strukture, uporabniku prijaznih vmesnikov, kot tudi upoštevanje načela "narediti malo, vendar to storiti kvalitativno".

Če govorimo o pristopu, ki ga je predlagal Andrew Morton, tukaj ponujamo več komentarjev neposredno znotraj izvorne kode, tako da lahko bralec razume končni namen programerja.

Kakšne so razlike med jedrom Unixa in Linuxom?

Seveda se opis jedra Linuxa bistveno razlikuje od osnovnega opisa Unixa, vendar mnogi ne vedo, kakšne so te razlike.

Zaradi istega API-ja in skupnega izvora so sodobna jedra Unixa precej podobna, izjeme pa so nekatere monolitne statične binarne datoteke, ki obstajajo kot velike izvršljive slike, ki se zaženejo samo enkrat in uporabljajo en sam naslovni prostor. Za zagotovitev normalnega delovanja Unixa je potrebno zagotoviti celovit sistem s krmilnikom krmilnika osebnega pomnilnika, s katerim bo mogoče zagotoviti učinkovito zaščito pomnilnika v sistemu, kot tudi zagotoviti vsakemu posameznemu procesu svoj virtualni naslovni prostor.

Jedro Linuxa ne temelji na nobenem posebnem sistemu Unix in je popolnoma monolitno. Kljub temu pa njena struktura zagotavlja določene lastnosti mikronuklearne arhitekture.

Razlike

linux kernel namestitev

Obstaja več razlik, ki vam omogočajo razumevanje, kako prepoznati jedro Linuxa:

  • Najprej je treba omeniti možnost podpore dinamično naloženih modulov. Kljub temu, da je jedro tega operacijskega sistema popolnoma monolitno, se dodatno podpira zmožnost dinamičnega nalaganja in razkladanja kode v primeru takšne potrebe. Ta funkcija se je prvotno pojavila v različici 0.99 in k temu je prispeval Peter MacDonald.
  • Jedro je sposobno podpirati simetrično večprocesiranje. V veliki večini komercialnih različic operacijskega sistema Unix je ta funkcija podprta, v tradicionalnih izvedbah pa je takšna podpora pogosteje odsotna.
  • Jedro Linuxa je predpogojno, to pomeni, da lahko popolnoma izloči izvršilno nalogo, tudi če deluje v načinu danega jedra. Med večino komercialnih implementacij ima predkupna jedra Unix OS samo IRIX, Solaris in Unix.
  • V Linuxu je bilo običajno uporabljati popolnoma drugačen pristop k implementaciji niti, zaradi česar se praktično ne razlikujejo od standardnih procesov. Glede na to z vidika jedra lahko rečemo, da so vsi procesi popolnoma enaki, le nekateri od njih se razlikujejo po razpoložljivosti skupnih virov.
  • Jedro Linuxa, opis katerega razvojnega procesa bo prikazano kasneje, nima določenih funkcij Unixa, za katere je bilo ugotovljeno, da so slabo izvedene. To velja zlasti za STREAMS in nekatere druge.

Moduli

kako prepoznati jedro Linuxa

Kljub temu, da je sistem monoliten, ga lahko uporabimo za dinamično vstavljanje ali odstranjevanje kode jedra v času delovanja. Objekti, ki jih je mogoče naložiti v jedro, so moduli jedra Linuxa.

V osnovi je modul standardni program, saj ima tudi izhodne in vhodne točke in se nahaja v binarni datoteki. Vendar je treba opozoriti, da imajo moduli neposreden dostop do različnih funkcij in struktur jedra. Za programe, ki se nahajajo v uporabniškem prostoru, je ta dostop omejen z uporabo vmesnikov knjižnice prevajalnikov.

Moduli sodelujejo v najrazličnejših procesih, s katerimi je povezan operacijski sistem, vključno s posodobitvijo jedra Linuxa. Nekatere funkcije so lahko na voljo izključno za tiste module, ki so distribuirani pod licenco GPL, zlasti to velja za zmožnost dela s čakalnimi vrstami procesov.

Skupščina

Jedro Linuxa je zgrajeno z uporabo specializiranega programa Make. Ko dobite izvorno kodo jedra, morate razpakirati arhiv linux-2.6.18.tar.bz2, kar se izvede s pomočjo posebnega pomožnega programa Tar, ki se odpre v imenu superuporabnika.

Ukaz make defconfig vam omogoča uporabo standardne konfiguracije za to arhitekturo, vendar morate razumeti, da v večini primerov to ni dovolj, zato morate jedro ročno konfigurirati. Če želite poklicati program za konfiguracijo jedra, vnesite ukaz make menuconfig. Vse dodatne informacije o tem, kaj so parametri ukaza make, lahko najdete v ločeni datoteki README.

Za zagon jedra v minimalni konfiguraciji je dovolj, da preprosto podate gonilnik krmilnika IDE, ki ga uporabljate v razdelku »Podpora čipov PCI IDE«. Poleg tega morate biti pozorni na razdelek "Datotečni sistemi", kjer je treba označiti obstoječe datotečne sisteme.

Zgradba jedra se zažene po pritisku na ukaz make. V večini primerov je uporabljen ukaz make -j2, saj bo mogoče jedro Linuxa nadgraditi veliko hitreje. V tem primeru parameter -j2 kaže, da se hkrati sprožita dve niti izvajanja.

Pozor!

linux kernel moduli

Opravljanje eksperimentov z jedrom lahko vodi do zelo različnih škodljivih procesov, saj ne more vsak specialist posodobiti jedra Linuxa. Posledice so lahko zelo resne, vključno s popolnim zlomom sistema in popolnim uničenjem informacij na vašem disku. Zaradi tega je za zagotovitev maksimalne varnosti priporočljivo uporabljati samo ločeno distribucijo, ki je nameščena na navideznem računalniku.

Poleg varnosti jo lahko uporabite za doseganje enotne konfiguracije vseh računalnikov, ki so bili vključeni v ta postopek. Priporočljivo je, da uporabljate Slackware Linux kot takšno distribucijo, ker uporablja nespremenjene komponente programske opreme. VMware ali QEMU lahko delujejo kot virtualni stroj, vendar to ni potrebno.

Namestitev jedra Linux traja približno 20 minut, vendar je vredno omeniti, da je gradnja jedra, ki je zgrajena v skladu s standardno konfiguracijo, možna brez ustvarjanja RAM diska, saj v tem primeru ni nobenega pomembnega zagonskega gonilnika.

Razvoj

linux razvoj jedra

Jedro je zbirka vmesnikov, imenovanih sistemski klici, ki zagotavljajo interakcijo med različnimi aplikacijskimi programi, ki delujejo v uporabniškem prostoru, kot tudi strojno opremo sistema. Pri delu s posameznimi datotekami lahko na primer pripomočki ne upoštevajo vrste trdega diska kot tudi datotečnega sistema, ki je na njem uporabljen.

S sistemskimi klici je zagotovljeno jamstvo za stabilno in varno delovanje sistema. Ker je jedro posrednik med različnimi programi in sistemskimi viri, lahko sprejemajo odločitve o odobritvi dostopa v popolni skladnosti s pravicami uporabnikov, pa tudi številnimi drugimi merili.

Razvoj aplikacijskih programov poteka s pomočjo specializiranih vmesnikov programske aplikacije. V tem primeru ni treba povezovati vmesnikov z aplikacijami in tistimi, ki jih ponuja jedro. Morda obstaja popolnoma enak API za več operacijskih sistemov, njegovo izvajanje pa je lahko odlično. Na primer, Linux in sistem FreeBSD, ki sta znana do danes, sta povsem skladna s standardom POSIX, zaradi česar se lahko večina aplikacij, ki so napisane posebej za en operacijski sistem, kasneje prenese na drugega, če je to potrebno.

V določenem delu je vmesnik s sistemskimi funkcijami zagotovljen z uporabo knjižnice C. Na primer, funkcija printf vam omogoča, da oblikujete črto, ki ustreza določeni obliki, zaradi česar se bo ta pomivalnik prenesel v sistemski klic pisanja, ki ga pošlje na standardno izhodno napravo, ki je lahko na primer: .

Poleg ločene knjižnice jezikovnih funkcij C zagotavlja tudi precej velik del standarda API POSIX. Še posebej, s pomočjo ukaza strace, če je potrebno, je mogoče natančno izslediti privlačnost določenega programa za jedro, če se izvede s sistemskimi klici. Zato se ta ukaz pogosto uporablja, ko pride do napak, da jih odpravi in ​​da tudi najde vzrok njihovega pojava.

Med drugim je vredno omeniti dejstvo, da ima Linux popolnoma edinstveno izvajanje niti, saj med nitmi in procesi ni razlike. Multithreading je organizirano kot proces z deljenimi viri, medtem ko so v prostoru jedra tudi ločene niti, ki se izvajajo izključno tam. Vendar pa se njihovo načrtovanje in izvajanje izvaja na enak način kot pri standardnih postopkih. Kadar koli je mogoče, se vsi programi, ki se izvajajo v jedru, imenujejo ločene naloge, medtem ko se programi, ki se izvajajo v uporabniškem načinu, imenujejo procesi.

Treba je omeniti, da v sodobnih sistemskih procesih hkrati uporabljamo dva virtualna sredstva.