Homepage » come » Qual è il kernel di Linux e cosa fa?

    Qual è il kernel di Linux e cosa fa?


    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?

    Quindi, qual è il kernel?

    Un kernel è il livello più basso di software facilmente sostituibile che si interfaccia con l'hardware del 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.


    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 un vantaggio di 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 minimo, 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 potrebbe 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 i driver dei dispositivi, la gestione del file system e le 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 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 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 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 più lavoro 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
    • Più piccolo ingombro di installazione rispetto al kernel monolitico
    • Più flessibile degli altri modelli

    Contro

    • Può subire lo stesso ritardo di processo del 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 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 negli anni '90.

    Quando la memoria virtuale è stata sviluppata per facilitare le abilità multitasking, "vm" è stato messo in primo piano 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 patch 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 viene 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 di Linux è monolitico, ha l'ingombro maggiore e la maggior 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 runtime, il che significa che è possibile aggiungere o rimuovere funzionalità del kernel al volo. Questo può andare oltre l'aggiunta di funzionalità hardware al kernel, includendo moduli che eseguono processi server, come la virtualizzazione di basso livello, ma può anche consentire l'intero kernel di essere sostituito senza dover riavviare il computer in alcune istanze.

    Immagina di poter eseguire l'aggiornamento a un service pack di Windows senza dover riavviare ...

    Moduli del kernel

    Cosa accadrebbe se Windows avesse già installato tutti i driver e dovessi semplicemente 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