5Aug

Cos'è il kernel di Linux e cosa fa?

click fraud protection


Con oltre 13 milioni di righe di codice, il kernel Linux è uno dei più grandi progetti open source al mondo, ma cos'è un kernel e a cosa serve?

Allora, qual è il kernel?

Un kernel è il livello più basso di software facilmente sostituibile che si interfaccia con l'hardware nel computer.È responsabile dell'interfaccia di tutte le applicazioni che sono in esecuzione in "modalità utente" fino all'hardware fisico e che consente ai processi, noti come server, di ottenere informazioni l'una dall'altra utilizzando la comunicazione tra processi( IPC).

Diversi tipi di kernel

Esistono, naturalmente, diversi modi per costruire un kernel e considerazioni architettoniche quando si costruisce uno da zero. In generale, la maggior parte dei kernel si suddivide in uno di questi tre tipi: monolitico, microkernel e ibrido. Linux è un kernel monolitico mentre OS X( XNU) e Windows 7 utilizzano i kernel ibridi. Facciamo un breve tour delle tre categorie in modo che possiamo entrare più nel dettaglio più tardi.

instagram viewer


Immagine di uptown popcorn

Microkernel
Un microkernel ha l'approccio di gestire solo ciò che deve: CPU, memoria e IPC.Praticamente tutto il resto in un computer può essere visto come un accessorio e può essere gestito in modalità utente. I microkernel hanno il vantaggio della portabilità perché non devono preoccuparsi se si cambia la scheda video o persino il sistema operativo a condizione che il sistema operativo cerchi ancora di accedere all'hardware nello stesso modo. Microkernels ha anche un ingombro molto ridotto, sia per la memoria che per lo spazio di installazione, e tendono ad essere più sicuri perché solo processi specifici vengono eseguiti in modalità utente che non dispone delle autorizzazioni elevate come modalità supervisore.

Pro

  • Portabilità
  • Small installazione footprint
  • Small memory footprint
  • Security

Contro

  • Hardware è più astratto tramite i driver
  • L'hardware può reagire più lentamente perché i driver sono in modalità utente
  • I processi devono attendere in coda per ottenere informazioni
  • I processi non possonoaccedere ad altri processi senza attendere

Kernel monolitico
I kernel monolitici sono l'opposto dei microkernel perché comprendono non solo la CPU, la memoria e l'IPC, ma includono anche elementi come driver di periferica, gestione del file system e chiamate al sistema. I kernel monolitici tendono ad accedere meglio all'hardware e al multitasking perché se un programma ha bisogno di ottenere informazioni dalla memoria o un altro processo in esecuzione ha una linea più diretta per accedervi e non deve attendere in coda per fare le cose. Questo tuttavia può causare problemi perché più cose vengono eseguite in modalità supervisore, più cose possono far cadere il sistema se uno non si comporta correttamente.

Pro

  • Più accesso diretto all'hardware per i programmi
  • Più facile per i processi di comunicare tra loro
  • Se il dispositivo è supportato, dovrebbe funzionare senza installazioni aggiuntive
  • I processi reagiscono più velocemente perché non c'è una coda per il tempo del processore

Contro

  • Grandeinstallazione impronta
  • ingombro memoria maggiore
  • Meno sicuro perché tutto viene eseguito in modalità supervisore


Immagine via schoschie su Flickr

Kernel ibrido
I kernel ibridi hanno la possibilità di selezionare e scegliere ciò che vogliono eseguire in modalità utente e ciò che vogliono eseguire in supervisoremodalità.Spesso le cose come driver di periferica e I / O del filesystem vengono eseguite in modalità utente mentre le chiamate IPC e server vengono mantenute in modalità supervisore. Ciò offre il meglio di entrambi i mondi, ma spesso richiede un lavoro maggiore del produttore dell'hardware perché tutta la responsabilità del guidatore spetta a loro. Può anche avere alcuni dei problemi di latenza inerenti ai microkernel.

Pro

  • Lo sviluppatore può scegliere e scegliere ciò che viene eseguito in modalità utente e ciò che viene eseguito in modalità supervisore
  • Ingombro di installazione più piccolo rispetto al kernel monolitico
  • Più flessibile di altri modelli

Contro

  • Può subire lo stesso ritardo di processo di microkernel
  • I driver di dispositivo devono essere gestiti dall'utente( in genere)

Dove sono i file del kernel di Linux?

Il file del kernel, in Ubuntu, è memorizzato nella cartella / boot e si chiama vmlinuz- versione .Il nome vmlinuz deriva dal mondo unix in cui erano soliti chiamare i loro kernel semplicemente "unix" negli anni '60, quindi Linux iniziò a chiamare il loro kernel "linux" quando fu sviluppato per la prima volta negli anni '90.

Quando la memoria virtuale è stata sviluppata per facilitare le abilità di multitasking, "vm" è stato messo nella parte anteriore del file per mostrare che il kernel supporta la memoria virtuale. Per un po 'il kernel Linux è stato chiamato vmlinux, ma il kernel è diventato troppo grande per adattarsi alla memoria di avvio disponibile, quindi l'immagine del kernel è stata compressa e il finale x è stato modificato in una z per mostrare che è stato compresso con compressione zlib. Questa stessa compressione non è sempre utilizzata, spesso sostituita con LZMA o BZIP2, e alcuni kernel sono semplicemente chiamati zImage.

La numerazione delle versioni sarà nel formato A.B.C.D dove A.B sarà probabilmente 2.6, C sarà la tua versione e D indica le tue correzioni o correzioni.

Nella cartella / boot ci saranno anche altri file molto importanti chiamati initrd.img-version, system.map-version e config-version. Il file initrd è usato come un piccolo disco RAM che estrae ed esegue il vero file del kernel. Il file system.map viene utilizzato per la gestione della memoria prima che il kernel sia completamente caricato e il file di configurazione dice al kernel quali opzioni e moduli devono essere caricati nell'immagine del kernel quando viene compilato.

Architettura del kernel Linux

Poiché il kernel Linux è monolitico, ha l'ingombro maggiore e la maggiore complessità rispetto agli altri tipi di kernel. Questa era una caratteristica del design che era agli inizi di un bel po 'di discussioni su Linux e porta ancora alcune delle stesse imperfezioni progettuali che i kernel monolitici sono intrinseci ad avere.

Una cosa che gli sviluppatori del kernel Linux hanno fatto per aggirare questi difetti era quella di creare moduli del kernel che potevano essere caricati e scaricati in fase di runtime, il che significa che è possibile aggiungere o rimuovere funzionalità del kernel al volo. Questo può andare oltre la semplice aggiunta di funzionalità hardware al kernel, includendo moduli che eseguono processi server, come la virtualizzazione di basso livello, ma può anche consentire la sostituzione dell'intero kernel senza la necessità di riavviare il computer in alcuni casi.

Immagina di poter eseguire l'aggiornamento a un service pack di Windows senza dover riavviare il sistema. .. Moduli del kernel

Cosa succede se Windows ha già installato tutti i driver e devi solo accendere i driver necessari? Questo è essenzialmente ciò che i moduli del kernel fanno per Linux. I moduli del kernel, noto anche come modulo del kernel caricabile( LKM), sono essenziali per mantenere il kernel funzionante con tutto l'hardware senza consumare tutta la memoria disponibile.

Un modulo in genere aggiunge funzionalità al kernel di base per cose come dispositivi, file system e chiamate di sistema. I LKM hanno l'estensione file. ko e sono normalmente memorizzati nella directory dei moduli /lib/.Grazie alla loro natura modulare, è possibile personalizzare facilmente il proprio kernel impostando i moduli da caricare, o non caricare, durante l'avvio con il comando menuconfig o modificando il file di configurazione /boot/, oppure è possibile caricare e scaricare i moduli al volo con il comando modprobe.

I moduli di terze parti e closed source sono disponibili in alcune distribuzioni, come Ubuntu, e potrebbero non essere installati di default perché il codice sorgente per i moduli non è disponibile. Lo sviluppatore del software( ad esempio nVidia, ATI, tra gli altri) non fornisce il codice sorgente, ma piuttosto costruisce i propri moduli e compila i file. ko necessari per la distribuzione. Anche se questi moduli sono gratuiti come nella birra, non sono gratuiti come nel parlato e quindi non sono inclusi da alcune distribuzioni perché i manutentori sentono che "tinge" il kernel fornendo software non libero.

Un kernel non è magico, ma è assolutamente essenziale per qualsiasi computer che funzioni correttamente. Il kernel di Linux è diverso da OS X e Windows perché include driver a livello di kernel e rende molte cose supportate "out of the box".Spero che tu sappia un po 'di più su come il tuo software e l'hardware funzionano insieme e quali file sono necessari per avviare il tuo computer.

Kernel.org
Immagine di ingridtaylar