Cos'è il kernel di Linux e cosa fa?

Sommario:

Cos'è il kernel di Linux e cosa fa?
Cos'è il kernel di Linux e cosa fa?

Video: Cos'è il kernel di Linux e cosa fa?

Video: Cos'è il kernel di Linux e cosa fa?
Video: 14 ERRORI più COMUNI sui siti web (Privacy e GDPR) - YouTube 2024, Maggio
Anonim
 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?
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 tuo 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

Ci sono, 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.

Image
Image

Immagine di popcorn uptown

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 finché il sistema operativo tenta 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.

Professionisti

  • portabilità
  • Piccolo ingombro di installazione
  • Piccolo ingombro di memoria
  • Sicurezza

Contro

  • L'hardware è più astratto attraverso 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 possono accedere 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 dispositivo, gestione del file system e chiamate al server di 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.

Professionisti

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

Contro

  • Grande ingombro di installazione
  • Grande ingombro di memoria
  • Meno sicuro perché tutto funziona in modalità supervisore
 Immagine via schoschie su Flickr
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 modalità supervisore. 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.

Professionisti

  • Lo sviluppatore può scegliere e scegliere ciò che viene eseguito in modalità utente e ciò che viene eseguito in modalità supervisore
  • Impronta di installazione più piccola rispetto al kernel monolitico
  • Più flessibile degli 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?

Image
Image

Il file del kernel, in Ubuntu, è memorizzato nella tua 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à multitasking, "vm" è stato messo in primo piano per dimostrare 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.
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 di 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 di Linux hanno fatto per aggirare questi difetti è stata quella di creare moduli del kernel che potevano essere caricati e scaricati in fase di esecuzione, 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 …

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.
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 / lib / modules. Grazie alla loro natura modulare puoi personalizzare facilmente il tuo kernel impostando i moduli da caricare, o non caricare, durante l'avvio con il comando menuconfig o modificando il tuo file / boot / config, oppure puoi caricare e scaricare i moduli al volo con il modprobe comando.

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

Consigliato: