Kernel: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Iron Bishop (discussione | contributi)
mNessun oggetto della modifica
Riga 14:
Anche se ogni modulo che serve queste operazioni è separato dal resto, l'integrazione del codice è molto stretta e difficile da fare in maniera corretta e, siccome tutti i moduli operano nello stesso spazio, un bug in uno di essi può bloccare l'intero sistema. Tuttavia, quando l'implementazione è completa e sicura, la stretta integrazione interna dei componenti rende un buon kernel monolitico estremamente efficiente. <!-- Proponents of the monolithic kernel approach make the case that if code is not correct, it does not belong in a kernel, and if it is, there is little advantage in the microkernel approach. -->
 
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.
 
Esempi di kernel monolitici:
* I tradizionali kernel [[UNIX]], quali ad esempio i kernel [[Berkeley Software Distribution|BSD]].
* Il kernel [[kernel Linux]]
 
== Microkernel ==
Riga 40:
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 [[MacOS 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.
 
A partire dai primi anni '90 i kernel monolitici sono considerati obsoleti. Il progetto di [[Kernel Linux|Linux]] come kernel monolitico anziché come microkernel è stato uno degli argomenti della famosa ''guerra di religione'' fra [[Linus Torvalds]] (il creatore di Linux) e [[Andrew S. Tanenbaum|Andrew Tanenbaum]] (celebre docente di sistemi operativi, autore di [[Minix]] e padre del linguaggio [[Pascal]]) - in rete sono [http://www.dina.dk/~abraham/Linus_vs_Tanenbaum.html disponibili] maggiori dettagli.
 
In realtà vi sono ragioni da entrambe le parti.
Riga 46:
I kernel monolitici tendono ad essere più semplici da progettare correttamente, e possono quindi evolversi più rapidamente di un sistema basato su microkernel. Ci sono storie di successi in entrambi gli schieramenti. I microkernel sono spesso usati in [[sistemi embedded]] in applicazioni [[mission critical]] di automazione robotica o di medicina, a causa del fatto che i componenti del sistema risiedono in aree di memoria separate, private e protette. Ciò non è possibile con i kernel monolitici, nemmeno con i moderni moduli caricabili.
 
A parte il kernel [[Mach]], che è il più noto microkernel di uso generico, molti altri microkernel sono stati sviluppati con scopi specifici. [[L3]] in particolare è stato creato per dimostrare che i microkernel non sono necessariamente lenti. La famiglia di microkernel [[L4]], successori di L3, dispongono di una implementazione chiamata [[Fiasco]] in grado di eseguire il [[Kernel Linux]] accanto agli altri processi di L4 in spazi di indirizzamento separati.
 
[[QNX]] è un sistema operativo presente sulle scene dai primi anni '80 e dispone di una implementazione a microkernel davvero minimalista. Questo sistema ha avuto molto più successo di Mach nel raggiungere gli obiettivi del paradigma a microkernel. È usato in situazioni in cui al software non è concesso di sbagliare, ad esempio nei bracci robotici dello [[space shuttle]] o in macchine che lavorano il vetro dove un errore anche piccolo può costare centinaia di migliaia di Euro.
Riga 77:
 
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]], sviluppato dall'[[Università di Cambridge]], dall'[[Università di Glasgow]], da [[Citrix Systems]] e dall'[[Istituto Svedese di Informatica]]. Anche il [[MIT]] ha sviluppato diversi sistemi basati su esokernel.
 
[[Categoria:Software]]
 
[[en:Kernel]]