Kernel: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m intestazioni |
|||
Riga 3:
Naturalmente, un kernel non è strettamente necessario per far funzionare un elaboratore. I programmi possono essere infatti direttamente caricati ed eseguiti sulla macchina, a patto che i loro sviluppatori ritengano necessario fare a meno del supporto del sistema operativo: questa era la modalità di funzionamento tipica dei primi elaboratori, che venivano resettati prima di eseguire un nuovo programma. In un secondo tempo, alcuni software ancillari come i [[program loader]] e i [[debugger]] venivano lanciati da una ROM o fatti risiedere in memoria durante le transizioni dell'elaboratore da un'applicazione all'altra: essi hanno formato di fatto la base per la creazione dei primi sistemi operativi.
== 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 12:
* ''Esokernel'', che rimuovono tutte le limitazioni legate all'astrazione dell'hardware e si limitano a garantire l'accesso concorrente allo stesso, permettendo alle singole applicazioni di implementare autonomamente le tradizionali astrazioni del sistema operativo per mezzo di speciali [[libreria|librerie]].
== Kernel monolitici ==
L'approccio monolitico definisce un'interfaccia virtuale di alto livello sull'hardware, con un set di primitive o [[chiamata di sistema|chiamate di sistema]] per implementare servizi di sistema operativo come ''gestione dei processi'', ''multitasking'' e ''gestione della memoria'', in diversi moduli che girano in ''modalità supervisore''.
Riga 24:
* Il [[kernel Linux]]
== 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''.
Riga 39:
* [[BeOS]]
=== 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 59:
In molti credono che, siccome Mach ha fallito nel compito di risolvere tutti i problemi per i quali i microkernel erano stati concepiti, l'intera tecnologia microkernel sia fallimentare ed inutile. Invece i sostenitori dei microkernel sostengono che questa sia una concezione poco aperta mentalmente e che sia diventata così popolare da essere ormai accettata come verità.
== 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 72:
* [[ReactOS]]
== 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 88:
== 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.
|