5Aug

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

Deci, ce este Kernel-ul?

Un kernel este cel mai scăzut nivel de software ușor de înlocuit care interfețează cu hardware-ul calculatorului dumneavoastră.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ă î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.


Image by popcorn uptown

Microkernel
Un microkernel ia abordarea de a gestiona doar ceea ce are: 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 se execută în modul de utilizare care nu are permisiile înalte ca modul de supraveghere.

Pro

  • Portabilitate
  • amprentă de instalare mică
  • amprentă de memorie redusă
  • securitate

contra

  • Hardware este mult mai abstracționat prin drivere
  • Hardware poate reacționa mai lent deoarece driverele sunt în modul de utilizare
  • Procesele trebuie să aștepte într-o coadă pentru a obține informații
  • Procesele nu potobțineți acces la alte procese fără să așteptați

Kernel monolit
Nucleele monolitice sunt opusul microkernel-urilor deoarece acoperă nu doar procesorul, memoria ș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 a multitasking-ului, deoarece dacă un program necesită obținerea de informații din memorie sau alt proces care rulează, 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 cu cât mai multe lucruri care se execută în modul supervizor, cu atât mai multe lucruri care pot aduce sistemul în jos dacă nu se comportă corect.

Pro

  • Mai acces direct la hardware pentru programe
  • Mai ușor pentru procese de a comunica între celelalte
  • Dacă dispozitivul dvs. este suportat, ar trebui să funcționeze fără alte instalații
  • Procesele reacționează mai repede, deoarece nu există o coadă pentru timpul procesorului

Contra

  • Largeinstalează amprenta
  • amprentă de memorie mare
  • mai puțin sigur deoarece totul rulează în modul supervizor


Imagine prin schoschie pe Flickr Kernelul

Kernelul hibrid
au capacitatea de a alege și de a alege ce doresc să ruleze în modul de utilizare și ce doresc să ruleze în supraveghetormod. 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 ele. De asemenea, poate avea unele dintre problemele de latență care sunt inerente cu microkernele.

Pro

  • Dezvoltatorul poate alege și alege ce rulează în modul de utilizare și ce rulează în modul supervizor
  • Micșorați amprenta de instalare decât kernelul monolitic
  • Mai flexibil decât alte modele

Cons

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

Unde sunt fișiere Kernel Linux?

Fișierul de kernel, din Ubuntu, este stocat în folderul / boot și se numește vmlinuz- versiunea .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 apeleze kernelul "linux" când a fost dezvoltat pentru prima oară în anii '90.

Când sa dezvoltat memoria virtuală 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 crescut 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., D va indica patch-urile sau corecțiile.

În directorul / boot vor fi ș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 folosit 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 compilat.

Arhitectura kernel-ului Linux

Deoarece kernel-ul 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 monitoarele kernel sunt inerente de 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 kernelului î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 trece la un pachet de service Windows fără a fi nevoie să reporniți. ..

Module kernel

Ce ar fi dacă Windows avea fiecare driver disponibil deja instalat și tocmai ați trebuit să porniți driverele de care aveț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 nucleului 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 modulelor /lib/.Din cauza naturii lor modulare, puteți personaliza cu ușurință nucleul dvs. prin setarea modulelor pentru a încărca sau a nu încărca în timpul pornirii cu comanda menuconfig sau prin editarea fișierului config /boot/ sau puteți încărca și descărca module în zbor cu comanda modprobe.

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ă pentru module 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ă" 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 ști 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