If-Koubou

Ce este Kernel-ul Linux și ce face?

Ce este Kernel-ul Linux și ce face? (Cum să)


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 pentru ce se utilizează?

Deci, Care este nucleul?

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

Diferite tipuri de kernel

Există, desigur, moduri diferite de a construi un nucleu și considerații arhitecturale atunci când construim unul de la zero. În general, majoritatea kernelurilor intră în unul din 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 dvs. de operare, atâta 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 se execută în modul de utilizare care nu are permisiile înalte ca modul de supraveghere.

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 lent, 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 microkernelilor, deoarece includ atât procesorul, memoria, cât și IPC-ul, dar includ și 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 are nevoie pentru a obține informații din memorie sau un alt proces care rulează, 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 cu cât 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 de supraveghere


Imagine prin schoschie pe Flickr

Hybrid Kernel
Miezurile hibride au abilitatea de a alege și de a alege ceea ce doresc să ruleze în modul de utilizare și de ce doresc să ruleze în modul supervizor. De multe ori, lucrurile precum driverele de dispozitiv și sistemul de fișiere I / O vor fi difuzate î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 cele mai multe ori va necesita mai multă muncă a producătorului de hardware deoarece toată responsabilitatea șoferului depinde de 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 de supraveghere
  • Micșorați amprenta de instalare decât kernelul monolitic
  • Mai flexibil decât alte modele

Contra

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

Unde sunt fișierele Kernel 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ă-și numească kernel-ul "linux" când a fost dezvoltat pentru prima oară în anii '90.

Atunci când a fost dezvoltată o memorie virtuală pentru abilități multiple de multitasking, "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. Aceeași comprimare nu este întotdeauna utilizată, adesea înlocuită cu LZMA sau BZIP2, iar unele kerneluri 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., iar 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 acesta este în curs de compilare.

Linux Kernel Architecture

Deoarece nucleul Linux este monolit, are cea mai mare amprentă și cea mai mare complexitate 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 design pe care nucleele monolitice le sunt inerente.

Un lucru pe care dezvoltatorii kernel-ului Linux l-au făcut pentru a rezolva aceste erori a fost să facă module 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 dvs. î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 kernel pentru Linux. Modulele kernel-ului, cunoscute și ca module de kernel încărcabile (LKM), sunt esențiale pentru menținerea funcției kernelului cu tot hardware-ul fără a consuma toată memoria disponibilă.

Un modul adaugă de obicei funcționalitate la kernelul 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 modulele î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 ca și î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ă" nucleul furnizând 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 ști ceva mai mult 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