Pagina principala » HOWTO » Ce este Kernel-ul Linux și ce face?

    Ce este Kernel-ul Linux și ce face?


    Cu peste 13 milioane de linii de cod, kernel-ul Linux este unul dintre cele mai mari proiecte open source din lume, dar ce este un kernel și ce este folosit pentru?

    Deci, Care este nucleul?

    Un kernel este cel mai scăzut nivel de software ușor de înlocuit care interfețează cu hardware-ul din computer. Este responsabil pentru interfața tuturor aplicațiilor dvs. care rulează în "modul de utilizare" până la hardware-ul fizic și permite proceselor cunoscute sub denumirea de servere să obțină informații una de la alta utilizând comunicarea între procese (IPC).

    Diferite tipuri de kernel

    Există, desigur, diferite moduri de a construi un nucleu și considerații arhitecturale atunci când construim unul de la zero. În general, majoritatea kernelurilor intră într-unul din cele trei tipuri: monolit, microkernel și hibrid. Linux este un kernel monolitic în timp ce OS X (XNU) și Windows 7 utilizează kerneluri hibride. Să facem un tur rapid cu privire la cele trei categorii, astfel încât să putem intra mai detaliat mai târziu.


    Imagine de floricele de popcorn

    microkernel
    Un microkernel ia abordarea de a gestiona doar ceea ce trebuie: CPU, memorie și IPC. Destul de mult, orice altceva dintr-un computer poate fi văzut ca un accesoriu și poate fi manipulat în modul de utilizare. Microkernelurile au un avantaj al portabilității, deoarece nu trebuie să vă faceți griji dacă schimbați placa video sau chiar sistemul de operare atât timp cât sistemul de operare încearcă încă să acceseze hardware-ul în același mod. Microkernelurile au, de asemenea, o amprentă foarte mică, atât pentru memorie, cât și pentru spațiul de instalare, și tind să fie mai sigure deoarece numai procesele specifice rulează în modul utilizator care nu are permisiile înalte ca modul supervizor.

    Pro-uri

    • portabilitate
    • Amprenta mică de instalare
    • Amprenta mică de memorie
    • Securitate

    Contra

    • Hardware-ul este mai abstractizat prin drivere
    • Hardware-ul poate reacționa mai încet, deoarece driverele sunt în modul utilizator
    • Procesele trebuie să aștepte într-o coadă pentru a obține informații
    • Procesele nu pot avea acces la alte procese fără a aștepta

    Kernelul monolitic
    Miezurile monolitice sunt opusul microkernel-urilor, deoarece acestea cuprind nu numai CPU-ul, memoria și IPC-ul, dar includ și elemente precum drivere de dispozitiv, gestionarea sistemului de fișiere și apeluri de server de sistem. Nucleele monolitice tind să fie mai bune la accesarea hardware-ului și multitasking-ului, deoarece dacă un program necesită obținerea de informații din memorie sau alt proces, acesta are o linie mai directă pentru a accesa și nu trebuie să aștepte într-o coadă pentru a face lucrurile. Cu toate acestea, acest lucru poate provoca probleme, deoarece mai multe lucruri care se execută în modul supervizor, cu atât mai multe lucruri care pot aduce în jos sistemul dvs., dacă nu se comportă corect.

    Pro-uri

    • Acces mai direct la hardware pentru programe
    • Este mai ușor ca procesele să comunice între ele
    • Dacă dispozitivul dvs. este acceptat, acesta ar trebui să funcționeze fără instalări suplimentare
    • Procesele reacționează mai repede, deoarece nu există o coadă pentru timpul procesorului

    Contra

    • Amprenta mare de instalare
    • Amprentă mare de memorie
    • Mai puțin sigur deoarece totul rulează în modul supervizor


    Imagine prin schoschie pe Flickr

    Hybrid Kernel
    Nucleele de tip hibrid au capacitatea de a alege și de a alege ce doresc să fie difuzate în modul de utilizare și ce doresc să ruleze în modul supervizor. De multe ori, lucrurile precum driverele de dispozitiv și sistemul de fișiere I / O se vor executa în modul utilizator, în timp ce apelurile IPC și serverul vor fi păstrate în modul supervizor. Acest lucru oferă cele mai bune din ambele lumi, dar de multe ori va necesita mai mult de lucru de producătorul de hardware, deoarece toate responsabilitatea șoferului este de până la ei. De asemenea, poate avea unele dintre problemele de latență care sunt inerente cu microkernele.

    Pro-uri

    • Programatorul poate alege și alege ce rulează în modul de utilizare și ce rulează în modul supervizor
    • Mai mic decât amprenta de instalare decât kernel-ul monolitic
    • Mai flexibil decât alte modele

    Contra

    • Pot suferi din același proces de întârziere ca și microkernelul
    • Driverele de dispozitiv trebuie să fie gestionate de utilizator (de obicei)

    Unde sunt fișierele kernel-ului Linux?

    Fișierul de kernel, din Ubuntu, este stocat în folderul / boot și se numește vmlinuz-versiune. Numele vmlinuz vine de la lumea UNIX, unde au apelat la kernel-ul lor pur și simplu "unix" în anii '60, astfel încât Linux a început să le numească kernelul "linux" când a fost dezvoltat pentru prima oară în anii '90.

    Când memoria virtuală a fost dezvoltată pentru abilități de multitasking mai ușor, "vm" a fost pus în partea din față a fișierului pentru a arăta că nucleul suportă memoria virtuală. Pentru un timp, kernel-ul Linux a fost numit vmlinux, dar kernel-ul a devenit prea mare pentru a se încadra în memoria de boot disponibilă, astfel încât imaginea kernel-ului a fost comprimată, iar capătul x a fost schimbat la un z pentru a arăta că a fost comprimat cu compresie zlib. Această comprimare nu este întotdeauna utilizată, adesea înlocuită cu LZMA sau BZIP2, iar unele kernel-uri sunt numite simplu zImage.

    Numerotarea versiunilor va fi în formatul A.B.C.D unde A.B va fi probabil 2.6, C va fi versiunea dvs. și D va indica patch-urile sau corecțiile.

    În directorul / boot vor exista și alte fișiere foarte importante numite initrd.img-version, system.map-version și config-version. Fișierul initrd este folosit ca un mic disc RAM care extrage și execută fișierul kernel actual. Fișierul system.map este utilizat pentru gestionarea memoriei înainte ca kernelul să se încarce complet, iar fișierul de configurare îi spune kernelului ce opțiuni și module să se încarce în imaginea kernelului atunci când este în curs de compilare.

    Linux Kernel Architecture

    Deoarece nucleul Linux este monolit, are cea mai mare amprentă și cea mai complexă față de celelalte tipuri de kernel-uri. Aceasta a fost o caracteristică de design care a fost destul de dezbătută în primele zile de Linux și încă poartă unele dintre aceleași defecte de proiectare pe care monitoarele kernel sunt inerente pentru a avea.

    Un lucru pe care dezvoltatorii kernel-ului Linux l-au făcut pentru a rezolva aceste erori a fost să facă module de kernel care ar putea fi încărcate și descărcate în timpul rulării, ceea ce înseamnă că puteți adăuga sau elimina caracteristici ale kernel-ului în zbor. Acest lucru poate depăși doar adăugarea de funcții hardware la kernel, prin includerea modulelor care rulează procese server, cum ar fi virtualizarea la nivel scăzut, dar poate permite și înlocuirea întregului kernel fără a fi nevoie să reporniți computerul în anumite situații.

    Imaginați-vă dacă ați putea să faceți upgrade la un pachet Service Pack fără a fi nevoie să reporniți ...

    Module kernel

    Ce ar fi dacă Windows avea la dispoziție toți driverele deja instalate și tocmai ați trebuit să activați driverele de care aveați nevoie? Aceasta este, în esență, ceea ce fac modulele de kernel pentru Linux. Modulele kernel, cunoscute și sub numele de un modul kernel încărcat (LKM), sunt esențiale pentru menținerea funcționării kernelului cu tot hardware-ul fără a consuma toată memoria disponibilă.

    Un modul adaugă de obicei funcționalitate kernelului de bază pentru lucruri precum dispozitive, sisteme de fișiere și apeluri de sistem. LKM-urile au extensia .ko și sunt de obicei stocate în directorul / lib / modules. Datorită naturii lor modulare, puteți personaliza cu ușurință nucleul dvs. prin setarea modulelor care se încarcă sau nu se încarcă în timpul pornirii cu comanda menuconfig sau prin editarea fișierului / boot / config sau puteți încărca și descărca module în zbor cu modprobe comanda.

    Modulele terță parte și cele închise sunt disponibile în unele distribuții, cum ar fi Ubuntu, și pot să nu fie instalate în mod implicit, deoarece codul sursă al modulelor nu este disponibil. Dezvoltatorul software-ului (adică nVidia, ATI, printre altele) nu furnizează codul sursă, ci construiesc propriile module și compilează fișierele .ko necesare pentru distribuire. În timp ce aceste module sunt libere, la fel ca în bere, ele nu sunt libere ca în vorbire și, prin urmare, nu sunt incluse în unele distribuții, deoarece întreținătorii consideră că "saculează" kernelul prin furnizarea de software non-liber.

    Un kernel nu este magic, dar este absolut esențial pentru orice computer care rulează corect. Kernel-ul Linux este diferit de OS X și Windows, deoarece include drivere la nivel de kernel și face multe lucruri acceptate "out of the box". Sperăm că veți cunoaște mai multe despre modul în care software-ul și hardware-ul dvs. funcționează împreună și ce fișiere aveți nevoie pentru a porni computerul.

    Kernel.org
    Imagine de ingridtaylar