Kernel: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m cat |
m aggiunte immagini |
||
Riga 4:
== Introduzione ==
L'accesso diretto all'hardware può essere anche molto complesso, quindi i kernel usualmente implementano uno o più tipi di ''[[astrazione dell'hardware]]''. Queste astrazioni servono a "nascondere" la complessità e a fornire un'interfaccia pulita ed uniforme all'hardware sottostante, in modo da semplificare il lavoro degli sviluppatori. I kernel si possono classificare - in base al grado di astrazione dell'hardware - in quattro categorie:
Riga 19 ⟶ 18:
Il più grosso svantaggio dei kernel monolitici è tuttavia che non è possibile aggiungere un nuovo dispositivo hardware senza aggiungere il relativo modulo al kernel, operazione che richiede la ''ricompilazione del kernel''. In alternativa è possibile compilare un kernel con tutti i moduli di supporto all'hardware, ingigantendo però le sue dimensioni. Tuttavia i kernel monolitici più moderni come il [[Kernel Linux]] e [[FreeBSD]] possono caricare dei moduli in fase di esecuzione, a patto che questi fossero previsti in fase di compilazione, permettendo così l'estensione del kernel quando richiesto, mantenendo al contempo le dimensioni del codice nello spazio del kernel al minimo indispensabile.
[[Image:Kernel-monolithic.png|frame|center|Rappresentazione grafica di un kernel monolitico kernel]]
Esempi di kernel monolitici:
* I tradizionali kernel [[UNIX]], quali ad esempio i kernel [[Berkeley Software Distribution|BSD]].
* Il [[kernel Linux]]
* Il kernel di [[Windows NT]]
* Kernel di ricerca come [[AGNIX|Agnix]]
== Microkernel ==
L'approccio microkernel consiste nel definire delle [[macchine virtuali]] molto semplici sopra l'hardware, con un set di primitive o [[chiamate di sistema]] per implementare servizi minimali del sistema operativo quali ''gestione dei thread'', ''spazi di indirizzamento'' o ''comunicazione interprocesso''.
L'obiettivo principale è la separazione delle implementazioni dei servizi di base dalle strutture operative del sistema. Per esempio, il processo di blocco (locking) dell'Input/Output può essere implementato come modulo server a livello utente. Questi moduli a livello utente, usati per fornire servizi di alto livello al sistema, sono modulari e semplificano la struttura e la progettazione del kernel. Un servizio server che smette di funzionare non provoca il blocco dell'intero sistema, e può essere riavviato indipendentemente dal resto.
[[Image:Kernel-microkernel.png|frame|center|Rappresentazione grafica di un microkernel]]
Esempi di microkernel e Sistemi operativi basati su microkernel:
* [[AIX]]
* [[Amoeba_distributed_operating_system|Amoeba]]
* [[Kernel Mach|Mach]], usato in [[HURD|GNU Hurd]] e [[Mac OS X]]▼
* [[BeOS]]
* La famiglia di microkernel [[L4]]▼
* [[ChorusOS|Chorus microkernel]]
* [[EROS]]
* [[K42]]
* [[LSE/OS]] (a [[nanokernel]])
* [[KeyKOS]] (a [[nanokernel]])
* [[MERT]]
* [[Minix]]
* [[MorphOS]]
* [[QNX]]
* [[RadiOS]]
* [[
* [[VSTa]]
=== Microkernel atipici ===
Vi sono aluni tipi di microkernel che non possono essere definiti esattamente come tali, perché non implementano alcune funzioni come i servizi server sebbene siano caratterizzati dalle altre prerogative che definiscono i microkernel. Il più noto di essi è [[AmigaOS#Exec|Exec]], abbreviazione di Executive Multitasking (e il suo diretto successore [[AmigaOS#ExecSG|ExecSG]]) che è il kernel di [[AmigaOS]].
=== Kernel monolitici e microkernel a confronto ===
I kernel monolitici sono spesso preferiti ai microkernel a causa del minor livello di complessità nel controllo dei codici di controllo in uno spazio di indirizzamento. Per esempio [[XNU]], il kernel di [[Mac OS X]], è basato su un kernel Mach 3.0 più BSD nello stesso spazio di indirizzamento in modo da abbattere i tempi di latenza tipici dei microkernel.
Riga 60 ⟶ 73:
== Kernel ibridi (microkernel modificati) ==
I kernel ibridi sono essenzialmente dei microkernel che hanno del codice "non essenziale" al livello di spazio del kernel in modo che questo codice possa girare più rapidamente che se fosse implementato ad alto livello. Questo fu un compromesso adottato da molti sviluppatori di sistemi operativi prima che fosse dimostrato che i microkernel puri potevano invece avere performance elevate. Molti sistemi operativi moderni rientrano in questa categoria: [[Microsoft Windows]] è l'esempio più noto. Anche [[XNU]], il kernel di Mac OS X, è di fatto un microkernel modificato, per via dell'inclusione di codice BSD in un kernel basato su Mach. [[DragonFly BSD]] è stato il primo sistema BSD non basato su Mach ad adottare l'architettura a kernel ibrido.
Riga 67 ⟶ 79:
Esempi di kernel ibridi:
* [[Microsoft]] [[Windows NT]] che è usato su tutti i sistemi basati su NT
* [[XNU]] kernel del [[Mac OS X]]
* [[DragonFly BSD]]
* Quark, il kernel di [[MorphOS]]
Riga 73 ⟶ 85:
== Esokernel ==
Gli esokernel, conosciuti anche come "sistemi operativi verticali", sono un approccio radicalmente differente alla progettazione dei sistemi operativi. L'idea centrale è "separare la protezione dalla gestione".
Riga 85 ⟶ 96:
Al momento gli esokernel sono più che altro dei progetti di ricerca e non sono usati in sistemi operativi commerciali. Un esempio di sistema basato su esokernel è [[Nemesis (informatica)|Nemesis]], sviluppato dall'[[Università di Cambridge]], dall'[[Università di Glasgow]], da [[Citrix Systems]] e dall'[[Istituto Svedese di Informatica]]. Anche il [[Massachusetts Institute of Technology|MIT]] ha sviluppato diversi sistemi basati su esokernel.
[[Image:Kernel-exo.png|frame|center|Rappresentazione grafica di un Exokernel]]
== No Kernel ==
Il software cosiddetto "no kernel" non ha l'obbligo di essere limitato ad un unico entry point che sia oltretutto centralizzato. Un esempio è dato dal progetto [http://tunes.org TUNES], che intende creare un sistema operativo privo di qualsiasi kernel.
|