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 nella comunità Linux? Esiste un modo per aggiornare il kernel del sistema operativo senza che il sistema operativo sia aggiornato? O vice versa? Se sì, come può essere utile?


3
Semplice: libertà. La libertà di creare la tua versione di ciò che ritieni di aver bisogno. Kernel? Conchiglia? Desktop. Fallo.
Rinzwind

6
Perché sono separati? Stesso motivo per cui il gestore di finestre viene trattato separatamente dal server X (perché sono separati) e perché la shell viene trattata separatamente dall'emulatore di terminale (perché sono anch'essi separati). Ora, se dovessi chiedere perché sono stati progettati in questo modo ...
user253751

Ubuntu ora funziona anche con il kernel di Windows 10, il che dimostra che si tratta di una vera separazione. Ovviamente, Windows non viene fornito con un server X che complica leggermente le cose, ma è prevedibile quando mancano delle parti.
MSalters

@MSalters Il gestore di finestre in Windows è un po 'complicato, sì; tuttavia, se qualcuno vuole effettivamente eseguire X su Windows, ci sono molti modi per gestirlo. Il più semplice per un estraneo sarebbe probabilmente un "emulatore" di server in cima al gestore di finestre esistente, anche se non ho idea di quanto bene possa mappare (l'ultima volta che ho visto X interni, non ero molto fiducioso). Non trattengo il respiro - non mi sembra che molte persone siano interessate ad avere X in esecuzione su Windows.
Luaan,

Risposte:


12

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

Certo, è vero finché si è in grado di gestire correttamente le dipendenze. Nel set di distribuzioni attorno a 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>

Fintanto che APT lo consente, dovresti essere in grado di riavviare e utilizzare la versione selezionata del kernel, sia essa generica, a bassa latenza, ecc. O costruisci tu stesso una versione del kernel, ad esempio Real-Time Linux , e la usi con il tuo sistema attuale .


Grazie mille, ma sarebbe coerente? Ad esempio, Ubuntu 14.04 LTS ha la versione 3.19.0 del kernel e, in caso di aggiornamento del kernel, non è più la 14.04 LTS, giusto? Quindi, se provo ad aggiornare l'intero sistema in un secondo momento, o il meccanismo di aggiornamento integrato (Software Updater) mi porta la nuova versione, sarà a conoscenza della versione aggiornata del kernel? È in grado di controllare i moduli separatamente e apportare solo le modifiche necessarie, senza che i moduli già aggiornati siano interessati?
The Dreams Wind

1
Vedi package.ubuntu.com/search?keywords=linux-image per il lungo elenco di versioni del kernel supportate da ciascuna versione di Ubuntu. La versione di Ubuntu è determinata da cose diverse dalla versione del kernel, ma non sono davvero consapevole di quali ... Se ti interessa, puoi iniziare un'altra domanda.
Melebio

1
@AleksandrMedvedev Molto dopo l'ho trovato! La versione di Ubuntu è annotata nel file /etc/issuefornito dal base-filespacchetto. Come ho già scritto, non è correlato alla versione del kernel.
Melebio

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 è composto da due parti, spazio kernel e spazio utente.

Quindi sì, puoi aggiornare lo spazio del 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 fosse disponibile un aggiornamento per il kernel, otterrai:

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

quindi stai solo aggiornando il tuo spazio utente e quando esegui qualcosa di simile

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 $1}' | 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

Questo non è assolutamente vero.
mook765,

Correggimi;) così imparo qualcosa di nuovo :)
Ravexina,

3
sudo apt upgradeaggiornerà anche il kernel se sono disponibili nuove versioni. sudo apt full-upgraderimuoverà bene i packeges, cosa asudo apt upgradenon farà.
Soren A

Poiché ora l'aggiornamento a un nuovo kernel è una sorta di installazione e durante l'utilizzo del upgradesottocomando, non installerà alcun nuovo pacchetto e non rimuoverà alcun pacchetto, ecco perché lo usiamo dist-upgrade. almeno apt-getfunziona in questo modo;) quindi ho aggiornato i miei comandi per evitare qualsiasi confusione.
Ravexina,

1
Ho più esperienza con il apt-comando, dopo una breve ricerca sembra che la tua risposta sia corretta ora apte apt-getgestisca la cosa diversamente, vedi hiroom2.com/2016/05/20/ubuntu-16-04-debian-8-apt -comando /… . Quindi un po 'di conoscenza per entrambi ...
mook765,

3

Innanzitutto, alcuni chiarimenti, perché sento che non capisci come sono nati i sistemi GNU / Linux. Abbi pazienza se questa non è una novità 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, digitare "ls" nella riga di comando) il binario deve essere caricato dal disco (che include alcune operazioni del filesystem per localizzarlo e una gestione dei file per leggerlo), quindi viene creato un "ambiente di processo": viene assegnata la memoria, viene emesso un numero di processo, ecc. ecc. Tutte le attività precedenti (FS, lettura da file, ...) sono gestiti dalle librerie di sistema, ma queste 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 realtà (solo!) Un kernel senza altre parti di un sistema operativo in giro. Linus Torvalds ha iniziato a scriverlo prendendo il kernel del modello OS MINIX di Andrew Tanenbaums e completandolo in modo che fosse un kernel completo e realmente funzionante. Ad oggi c'è Linus (e molti altri che contribuiscono / hanno contribuito) che sviluppano questo kernel. Questo kernel è ancora molto simile a UNIX, ma NON un kernel UNIX.

"GNU" è nato come iniziativa per "migliorare" molti comandi UNIX comuni. Non discuterò se ci sono riusciti o meno, ma hanno sicuramente scritto molto software e ad un certo punto avevano una collezione di programmi di utilità. Hanno anche iniziato a sviluppare un proprio kernel OS (HURD), che era basato in gran parte su UNIX, ma era decisamente diverso. Ma fino ad oggi HURD è nel suo sviluppo iniziale e difficilmente una soluzione funzionante. "GNU" tra l'altro. è l'abbreviazione di "GNU (is) Not UNIX" - hanno cercato di superare alcune limitazioni (percepite o reali) di UNIX con l'intenzione di creare un successore di UNIX (di nuovo: non voglio entrare nella discussione se ci sono riusciti o no - non mi importa se è "meglio" o "peggio", ma è decisamente diverso!).

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

Tuttavia, per avere un sistema operativo funzionante (e praticabile) hai bisogno di qualcosa di più di un semplice kernel e di un set di strumenti: hai bisogno di un sistema di gestione dei pacchetti, hai bisogno di procedure di installazione, hai bisogno di configurazioni di template, hai bisogno di ...

Diverse persone (o gruppi di questi) sono arrivati ​​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 packaging , procedure di installazione e altro. Questi diversi gruppi (rispettivamente i risultati dei loro sforzi) sono le diverse distribuzioni. Oggi ci sono tre diversi gestori di pacchetti (adatti a Debian e sistemi derivati ​​come * ubuntu, rpm per RedHat e sistemi derivati ​​come Fedora, CentOS e altro, pacman per ArchLinux) ma tutti questi gestiscono solo pacchetti di software che è (essenzialmente) lo stesso: ciò che viene chiamato quando si emette "ls" o "df", ecc.,

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

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

Tuttavia, e anche "in linea di principio", come sopra: puoi anche creare la tua distribuzione scaricando tutte le fonti, compilandole, trovando un insieme funzionante di combinazioni di versioni, mettendo in atto un sistema di packaging (o usando uno di quelli esistenti ) - e così via, fino a quando non si dispone di un sistema distribuibile, installabile e configurabile. Questo è ciò che fanno i creatori di distribuzioni come Ubuntu e non è un miracolo - solo un sacco di lavoro complesso, quindi in realtà la maggior parte degli utenti lo evita e usa qualcosa che può essere pronto per l'uso.

Spero che questo risponda alla tua domanda.


GNU non è stato avviato come iniziativa per "migliorare" molti comandi UNIX comuni. GNU era un sistema operativo sin dall'inizio, ai fini del software libero in risposta a UNIX che era proprietario limitato. Puoi leggere di più dal loro sito web . Decisero di trasferire tutti i loro software su Linux perché al momento della creazione di Linux, GNU non aveva ancora un kernel funzionante.
Ian Emnace,

3

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

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

Ora, lo spazio utente, è il mondo normale su cui stanno giocando utenti e sviluppatori. Ha API, regole, file rigidi e, cosa più importante, un'immagine astratta e infantile della macchina su cui è in esecuzione. Poiché l'utente sta vedendo solo questa parte, che equivale al 99% della dimensione della distribuzione, è facile nominarlo erroneamente Sistema Operativo. La nomenclatura giusta è chiamarla distribuzione di software, creata da qualche entità (canonica, Fedora, ecc.), Usando un kernel (Linux, HURD, BSD, ecc.), E costruita usando un set di strumenti (solitamente fornito da GNU ).

Per rispondere alla tua domanda, in GNU / Linux (proprio come in Windows e OSX, fidati di me), puoi cambiare il kernel, non solo la versione, ma l'intera architettura (kernel Linux, vs kernel HURD) e, purché l'ABI non viene toccato, non fare mai un singolo cambiamento nel mondo degli utenti ... All'epoca, quando il vero uomo doveva costruire il kernel da fonti, si potevano passare diversi cambiamenti come questi, per ottenere una webcam USB schifosa per funzionare ... Ora, con il kernel modulare, devi solo installare un modulo e otterrai un nuovissimo mondo di kernel, con l'ABI (a volte) esteso con nuove funzionalità ...

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

Un'altra cosa su cui riflettere, puoi (ed è abbastanza facile) costruire la tua distribuzione GNU / Linux unica e speciale. Ottieni un kernel, alcuni semplici script, diverse app e sei pronto. È così semplice (dai un'occhiata alle distribuzioni OpenWRT GNU / Linux, per le apparecchiature di rete, l'intera distribuzione si adatta a circa 16 Mb, o giù di lì).


"un bordo netto (l'ABI)." Penso che intendi l'API. L'ABI è, per mancanza di un termine migliore, un'interfaccia da codice a hardware. L'API invece è un'interfaccia da codice a codice.
Sam,

1

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

Inoltre alcuni utenti esperti o professionisti ricompilano il kernel per modificarne il comportamento in modo da soddisfare meglio le proprie esigenze. In tal caso, ovviamente, non si vorrebbe sostituirlo automaticamente con la versione di fabbrica ogni volta che si aggiorna.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.