Cosa c'è in un sistema operativo diverso dal kernel


43

A quanto ho capito, il kernel fa tutte le interazioni con l'hardware e gestisce la memoria, i dispositivi I / O, ecc. Quindi il kernel sta facendo tutto, eppure è solo una parte del sistema operativo. Quindi cos'altro c'è in un sistema operativo? Solo le applicazioni che vengono fornite in bundle con esso? Ad esempio, cosa ha Ubuntu oltre a un kernel? Il desktop Gnome e alcune altre applicazioni?

Risposte:


54

La conchiglia, ovviamente.

La metafora originale che ci ha procurato la parola "kernel" per questo in primo luogo è troppo spesso dimenticata. La metafora è che un sistema operativo è un seme o una noce. Il "kernel" del seme è il nucleo del sistema operativo, fornendo servizi del sistema operativo ai programmi applicativi, che è circondato dalla "shell" del seme che è ciò che gli utenti vedono dall'esterno.

Alcune persone vogliono legare "kernel" (e, in effetti, "shell") per essere più specifici di così. Ma in verità c'è molta variazione tra i sistemi operativi. Non ultimo queste variazioni è ciò che costituisce una "shell" (che può variare da Solaris shattraverso l'interprete di comandi della console di Netware a Workplace Shell di OS / 2 e Explorer di Windows NT), ma c'è anche molta varianza da un sistema operativo all'altro in cos'è e non fa parte di un "kernel" (che può includere o meno l'I / O del disco, ad esempio). È meglio ricordare che questi termini sono metafore .

Esistono altre terminologie. Nella terminologia del mainframe IBM, il "kernel" nella metafora seed / nut è chiamato programma di controllo . Altri nomi includono supervisore , monitor , core e dirigente . Il nucleo è un'altra metafora biologica abbastanza ovvia. È interessante che anche questo sia un altro nome. Harvey M. Deitel, nei suoi sistemi operativi , chiama il programma di controllo il nucleo e dice

Il nucleo normalmente rappresenta una piccola porzione del codice di quello che comunemente si pensa sia l'intero sistema operativo [...]

La parola "nucleo" deriva dal nucleo latino e significa il nocciolo di una noce (cfr. Il latino nux , che significa "noce"). Quindi anche chiamare il programma di controllo "il nucleo" sta di fatto facendo la stessa analogia del sistema operativo come un dado. È un'analogia utilizzata non solo per i sistemi operativi. Se hai familiarità con la chimica, ad esempio, saprai che un nucleo atomico è circondato da elettroni in gusci .

Ciò che la persona pseudonima new123456scrive di seguito esemplifica gli errori derivanti dalla dimenticanza delle origini di queste metafore nella misura in cui si confonde la parte per il tutto e il kernel per l'intero sistema operativo. Essere un programma "userland" non rende la shell meno esterna al sistema operativo, né lo rende meno ciò che racchiude il kernel. Inoltre, lungi dall'essere un'idea solo per DOS che non si applica a Unix oltre la versione 7, questa idea è sia diffusa che attuale nel mondo Unix.

(È ironico che new123456lo confonda con un DOSismo. La metafora del kernel / shell era abbastanza estranea al DOS nei suoi primi anni, che favoriva il processore dei comandi e simili, da CP / M. Come CP / M prima di esso, MS-DOS era diviso nel sistema operativo di base del disco (BDOS), nel sistema di input-output di base (BIOS - non il firmware del sistema, nota), il processore dei comandi e le utility di pulizia . Il codice è stato effettivamente suddiviso in file in questo modo. esempio, infatti, del modo in cui la metafora del kernel / shell non copre realmente o non coincide pienamente con le effettive divisioni in molti sistemi operativi.)

new123456sta dimenticando ciò che Deitel ha scritto sul fatto che il nucleo fa parte del sistema operativo globale. Un sistema operativo è sia kernel che shell. Questa è, dopo tutto, la metafora. Anche Deitel non è solo. Ci sono risme di libri Unix che spiegano la metafora di Unix-as-a-nut, dagli anni '80 in poi. Raccomando Teach Yourself FreeBSD di Urban e Tiemann in 24 Hours (SAMS, ISBN 9780672324246), per la semplice ragione che a pagina 54 ha uno schema che illustra la metafora del sistema operativo come un seme e - sorprendentemente - è uno dei pochi libri per farlo.

Il nome "nucleo" è probabilmente il nome più antico; sicuramente precedente a Unix, che favorisce la terminologia kernel / shell che oggi - probabilmente in minima parte grazie a Unix - è la più diffusa. Ecco cosa c'è nel libro di Alan C. Shaw del 1974. La progettazione logica dei sistemi operativi (Prentice-Hall, ISBN 9780135401125) per esempio:

Quella parte del sistema che risiede permanentemente nella memoria principale è stata storicamente chiamata nucleo . Il nucleo sarà generalmente costituito da un insieme minimo di primitivi e processi per la gestione di processi, risorse e input-output.
Anche Shaw ha un diagramma. ☺


7
Penso che questa sia una risposta brillante, semplicemente perché mi ha fatto venire in mente la relazione tra le metafore "shell" e "kernel". Conoscevo entrambi, non li collegavo mai. Conoscevo la risposta alla domanda, ma riuscivo comunque a imparare qualcosa da questa risposta. Da qui il voto. Grazie!
Andrew J. Brehm,

Sarei titubante nel dire questo, perché la shell UNIX è stata sottratta dal kernel stesso dalla versione 7, e da allora ha un programma userland in tutti i sensi della parola. Quello che dici è, tuttavia, vero per un DOS (che è una scelta di design particolarmente orribile).
nuovo123456,

Ben fatto, signore. Tuttavia, si prega di lasciare un @posto quando si menziona il mio nome utente in modo che venga pubblicato nella mia coda di risposta.
nuovo123456,

È stato votato per essere una risposta così completa con molta storia interessante (non ero a conoscenza del nucleo come termine computerizzato o della sua etimologia latina). Tuttavia, penso che leggerebbe molto meglio come risposta autonoma se non si riferisse esplicitamente alla risposta di un altro utente (ora eliminata).
Anthony G - giustizia per Monica il

45

Altre parti del sistema operativo includono i driver che interagiscono con il kernel, ci sono diversi livelli di programmi di supporto che si occupano dell'interfaccia utente, della rete e di altre parti fondamentali del sistema operativo che si trovano tra il kernel e l'applicazione effettiva.

Per fare un esempio, ho mostrato la struttura di OS X , come puoi vedere nella parte superiore del kernel (azzurro) si trovano diversi livelli di funzionalità "core", strumenti di sistema, servizi e API (Application Programming Interface) prima di te arriva persino alla GUI, che è ciò con cui in genere lavori nelle stesse applicazioni stesse.

inserisci qui la descrizione dell'immagine

La maggior parte dei sistemi operativi ha una struttura simile, ma esiste un ampio margine di discrepanza rispetto a quanto fa effettivamente parte del kernel. Vedi l'articolo di Wikipedia su Microkernels per un confronto.

MODIFICA - Per rispondere al tuo commento (il mio commento è diventato un po 'lungo)

Si potrebbe avviare solo un kernel Linux, ma non sarebbe in grado di raggiungere davvero tanto, è tutte quelle applicazioni helper che forniscono tutta l'interfaccia che si vede e l'uso.

Una volta avviato il kernel (e inizializzato l'hardware) tenterà di passare ad altre parti del sistema operativo GNU / Linux che forniscono la funzionalità per l'avvio di servizi (come UDEV che popola /devcon interfacce di dispositivi grezzi per programmi che usano cose come dischi rigidi e porte seriali e così via) e programmi per configurare la rete ( dhcpcd ) e le API come X.org affinché le applicazioni possano mostrare finestre e icone attraverso un Window Manager come GNOME o KDE .

Ma sì, potresti semplicemente avviare il kernel stesso, sarebbe semplicemente seduto lì con un "Ho avviato, e adesso?" richiesta.


quindi posso avviare solo un kernel e nessuna delle cose aggiuntive che il sistema operativo di solito ha?
AnkurVj,

In teoria, immagino, ma non farebbe nulla senza altri programmi. Ci sono minuscoli sistemi operativi che la gente ha creato per divertimento che non sono altro che un kernel, una shell e forse un compilatore o un assemblatore (penso che Linux abbia iniziato in questo modo, in realtà).
user55325,

@AnkurVj Ho aggiunto alla mia risposta.
Mokubai

3
Non penso che tu possa avviare solo il kernel Linux. Il kernel raggiunge un punto in cui chiama init, in quel momento il sistema passa dalla modalità kernel alla modalità utente. Se init non è disponibile (o un init falso, come bash), il kernel si blocca e si blocca. Quindi ci deve essere un processo init in esecuzione per evitare il panico, a quel punto in realtà non è solo il kernel in esecuzione.
Joe Internet

1
È possibile avviare un kernel nudo, ma senza il resto del sistema operativo, l'utente non avrebbe alcuna interazione con esso.
Keltari,
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.