Perché il sistema operativo e il kernel sono trattati separatamente in Linux? [chiuso]

9

Quando si tratta di qualsiasi sistema operativo Linux, incluso Ubuntu, le persone tendono a distinguere i termini kernel e sistema operativo . Questo è corretto per Windows e la famiglia OS X, ma perché è così diffuso tra la comunità Linux? C'è un modo per aggiornare il kernel del sistema operativo, senza aggiornare il sistema operativo stesso? O vice versa? Se sì, come può essere utile?

    
posta Aleksandr Medvedev 09.05.2017 - 11:00

5 risposte

12

L'intero sistema GNU / Linux è costruito utilizzando l'approccio modulare. Puoi principalmente aggiornare ( sostituire in generale) un singolo modulo senza toccarne altri. Il modulo in questione può essere un bootloader, kernel, shell, comando, ambiente desktop, applicazione GUI, qualsiasi cosa ...

Naturalmente, è vero finché si è in grado di gestire correttamente le dipendenze. Nell'insieme di distribuzioni su Ubuntu, APT viene utilizzato per risolvere automaticamente le dipendenze.

Puoi installare un'altra versione del kernel usando il comando:

sudo apt install linux-image-<version>

Finché l'APT lo consente, dovresti essere in grado di riavviare e utilizzare la versione selezionata del kernel, sia essa generica, a bassa latenza, ecc. Oppure tu stesso costruisci una versione del kernel, ad es. il Linux in tempo reale , e usalo con il tuo sistema attuale.

    
risposta data Melebius 09.05.2017 - 11:17
5

Come sapete, il kernel è una parte importante del sistema operativo, nelle distribuzioni GNU / Linux è possibile aggiornare facilmente il kernel senza toccare altre parti del sistema operativo. Tuttavia stiamo semplicemente aggiornando una parte del nostro sistema operativo.

Un sistema operativo è costituito da due parti, lo spazio del kernel e lo spazio utente.

Quindi sì, puoi aggiornare lo spazio del tuo kernel senza toccare lo spazio utente se solo la nuova versione è compatibile con lo spazio utente corrente.

E sull'aggiornamento degli strumenti dello spazio utente, è un altro sì.

Quando corri:

sudo apt-get upgrade

Se è disponibile un aggiornamento per il kernel, otterrai:

The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic

quindi aggiorni solo lo spazio utente e quando esegui qualcosa come

sudo apt-get dist-upgrade

stai aggiornando tutto incluso il kernel.

Per aggiornare solo il tuo kernel a una versione più recente usa qualcosa come:

$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print }' | head -4
linux-image-4.4.0-21-generic
linux-image-4.10.0-14-generic
linux-image-4.10.0-19-generic
linux-image-4.10.0-20-generic

per trovare un elenco di kernel più recenti, quindi installarlo come nuovo pacchetto, ad esempio:

sudo apt install linux-image-4.10.0-14-generic
    
risposta data Ravexina 09.05.2017 - 11:10
3

Per prima cosa, alcuni chiarimenti, perché sento che non capisci come i sistemi GNU / Linux siano nati. Resta con me se questo non è niente di nuovo per te:

"Kernel" non è solo un altro programma che viene eseguito, ma è la parte del sistema operativo che fornisce le funzioni di base: se si desidera avviare un programma (ad esempio, si digita "ls" sulla riga di comando) il binario ha da caricare dal disco (che include alcune operazioni del filesystem per individuarlo e alcuni file di gestione per leggerlo), quindi viene creato un "ambiente di processo": viene assegnata la memoria, viene emesso un numero di processo, ecc. ecc. Tutto le precedenti attività (FS, lettura da file, ...) sono gestite da librerie di sistema, ma le ultime sono funzioni del kernel. In un certo senso il kernel "è il sistema operativo" e tutto il resto è solo una decorazione attorno ad esso.

"Linux" è in effetti (solo!) un kernel senza altre parti del sistema operativo. Linus Torvalds ha iniziato a scriverlo prendendo il kernel del kernel di Andrew Minenbaums MINIX e completandolo in modo che fosse un kernel completo e reale. Ad oggi c'è Linus (e molti altri che contribuiscono / hanno contribuito) a sviluppare questo kernel. Questo kernel è ancora molto simile a UNIX, ma NON un kernel UNIX.

"GNU" è iniziato come un'iniziativa per "migliorare" molti comandi UNIX comuni. Non discuterò se ci sono riusciti o meno, ma hanno sicuramente scritto un sacco di software e ad un certo punto hanno avuto una collezione di programmi di utilità. Hanno persino iniziato a sviluppare un proprio kernel del sistema operativo (HURD), basato principalmente su UNIX, ma decisamente diverso. Ma fino ad oggi HURD è al suo primo sviluppo e difficilmente una soluzione funzionante. "GNU" btw. è l'abbreviazione di "GNU (is) Not UNIX" - hanno cercato di superare alcuni (percepiti o reali) limiti di UNIX con l'intenzione di creare un successore di UNIX (ancora: non voglio entrare nella discussione se ci sono riusciti o non - non mi interessa se è "migliore" o "peggio", ma è decisamente diverso!).

Quindi, con una serie di strumenti privi di un kernel e un kernel privo di un set di strumenti, è stato uno sviluppo naturale riunire questi due elementi: GNU / Linux è stato creato.

Tuttavia, per avere un SO funzionante (e lavorabile) hai bisogno di più di un kernel e un set di strumenti: hai bisogno di un sistema di gestione dei pacchetti, hai bisogno di procedure di installazione, hai bisogno di configurazioni dei modelli, hai bisogno ....

Diverse persone (o gruppi di persone diverse) sono giunti a questa conclusione e hanno usato la combinazione GNU / Linux per creare un sistema GNU / Linux di loro gradimento, aggiungendo esattamente le cose di cui ho parlato sopra: hanno creato un gestore di pacchetti, un sistema di imballaggio, procedure di installazione e cos'altro. Questi diversi gruppi (rispettivamente i risultati dei loro sforzi) sono ciò che le diverse distribuzioni sono. Oggi ci sono tre diversi gestori di pacchetti (adatti per Debian e sistemi derivati ​​come * ubuntu, rpm per RedHat e sistemi derivati ​​come Fedora, CentOS e altri, pacman per ArchLinux) ma tutti questi gestiscono solo pacchetti di software che è (essenzialmente) lo stesso: ciò che viene chiamato quando si rilascia "ls" o "df", ecc., su un sistema Debian o su un sistema RHEL viene da pacchetti diversi ma essenzialmente è la versione GNU di "ls" - (" df "-) programma, solo diversamente confezionato.

Quindi, "in linea di principio" puoi aggiornare il kernel da solo, come le persone che hanno creato una distribuzione da varie versioni di tutto il software di cui ho parlato sopra.

Ma, e questo è un vero grande MA: perché non c'è solo il kernel e qualche software aggiuntivo, ma molte altre cose da tenere a mente, come gli strumenti di configurazione del sistema (systemd, che alcune distribuzioni usano e altri no ), strumenti di gestione della rete come NetworkManager, che a loro volta dipendono da alcune versioni della libreria GNOME, ecc. ecc. - una "distribuzione" è una cosa piuttosto complessa e ci sono molte probabilità che se si tenta di aggiornare il kernel si finisce per aggiornare molte altre cose a causa delle molte interdipendenze.

Ancora, e anche "in linea di principio", come sopra: puoi anche creare la tua distribuzione scaricando tutte le fonti, compilandole, trovare un insieme funzionante di combinazioni di versioni, mettere in atto un sistema di imballaggio (o usare uno di quelli esistenti) e così via, finché non si dispone di un sistema distribuibile, installabile e configurabile. Questo è ciò che i creatori di distribuzioni come Ubuntu fanno e non è un miracolo - solo un sacco di lavoro complesso, quindi in realtà la maggior parte degli utenti si risparmia e usa qualcosa che può essere pronta per l'uso.

Spero che questo risponda alla tua domanda.

    
risposta data bakunin 09.05.2017 - 14:08
3

La risposta più semplice non ha nulla a che fare con Ubuntu; è legato al modo in cui GNU / Linux è costruito. Se provi a considerarlo come uno sviluppatore di sistemi, vedrai due mondi, ciascuno separato da un bordo nitido (l'ABI).

Il mondo del kernel, dove gli sviluppatori di basso livello lavorano, è un sistema a sé stante. Ha tutto ciò che normalmente si trova in un'applicazione normale. L'unica differenza è che l'utente non è la persona reale che sta utilizzando la macchina, ma il mondo dello spazio utente. L''applicazione' del kernel è l'intermediario, il server che sta usando la macchina - il fantasma nella shell.

Ora, lo spazio utente, è il mondo normale su cui giocano gli utenti e gli sviluppatori di tutti i giorni. Ha rigide API, regole, file e, la cosa più importante, un'immagine astratta e infantile della macchina su cui è in esecuzione. Poiché l'utente vede solo questa parte e ciò rappresenta il 99% delle dimensioni della distribuzione, è facile dare un nome errato al sistema operativo. La giusta nomenclatura è chiamarla distribuzione di software, creata da qualche entità (Canonical, Fedora, ecc.), Usando un kernel (Linux, HURD, BSD, ecc.) E costruita usando un set di strumenti (di solito forniti da GNU ).

Per rispondere alla tua domanda, in GNU / Linux (come in Windows e OSX, credimi), puoi cambiare il kernel, non solo la versione, ma l'intera architettura (Linux Kernel, vs HURD Kernel), e, Finché l'ABI non viene toccato, non fare mai un singolo cambiamento nel mondo dell'utente ... Nel giorno in cui il vero uomo doveva costruire il kernel dai sorgenti, si potevano passare attraverso diversi cambiamenti come questi, per ottenere un La crappy USB webcam funziona ... Ora, con il kernel modulare, devi solo installare un modulo, e avrai un nuovissimo mondo del kernel, con l'ABI (a volte) esteso con nuove funzionalità ...

Ancora una volta, lo stesso vale per lo spazio utente. Quando installi una nuova applicazione, da, diciamo, un repository Ubuntu, il 99% delle volte, la tua più grande preoccupazione è la compatibilità degli altri componenti dello spazio utente, non il vero kernel. Ci sono casi in cui la versione del kernel detta (tramite ABI) la gamma di cose che possono essere installate nello userspace, ma l'obiettivo (almeno per gli sviluppatori) è di farlo andare via ...

Un'altra cosa su cui riflettere, è possibile (ed è piuttosto semplice) costruire una distribuzione GNU / Linux unica, speciale, unica nel suo genere. Ottieni un kernel, alcuni script semplici, diverse app e sei pronto. È proprio così facile (date un'occhiata alle distribuzioni OpenWRT GNU / Linux, per gli ingranaggi di rete, l'intera distribuzione si adatta come 16 Mb, o giù di lì).

    
risposta data rftghost 09.05.2017 - 12:21
1

Suppongo che siano tenuti separati perché il kernel è una parte critica. Un kernel con una regressione, o solo un aggiornamento fallito, potrebbe causare molti danni. Potresti aggiornarlo meno frequentemente; o solo dopo aver atteso un po 'di tempo per essere sicuri che nessuno segnali bug preoccupanti.

Anche alcuni utenti esperti o professionisti ricompilano il kernel per modificare il suo comportamento per soddisfare meglio le loro esigenze. In tal caso, ovviamente non vorrai che venga automaticamente sostituito con la versione di fabbrica ogni volta che esegui l'upgrade.

    
risposta data Francesco Dondi 09.05.2017 - 13:54

Leggi altre domande sui tag