Kernel: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Link di ExecSG adesso punta ad AmigaOS |
revisione stile, ortografia e grammatica. |
||
Riga 1:
In [[informatica]], il '''kernel'''
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:
* ''Kernel monolitici'', che implementano direttamente una completa astrazione dell'hardware sottostante.
* ''Microkernel'', che forniscono un insieme ristretto e semplice di astrazione dell'hardware e usano sofware (chiamati [[device driver]] o [[server]]) per fornire maggiori funzionalità.
* ''Kernel ibridi'' (o ''microkernel modificati''), che
* ''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]].
L'approccio monolitico definice 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 20 ⟶ 24:
* Il [[kernel Linux]]
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 51 ⟶ 55:
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à.
== Microkernel atipici ==▼
== Kernel ibridi (microkernel modificati)==▼
Vi sono aluni tipi di microkernel che non possono essere definiti esattamente come tali, perché non implementano alcune funzioni come i servizi server. Il più
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 59 ⟶ 67:
Esempi di kernel ibridi:
* [[Microsoft]] [[Windows NT]] che è usato su tutti i sistemi basati su NT
* '''Quark''' che è alla base del [[MorphOS]]▼
* [[XNU]]
* [[DragonFly BSD]]
* [[ReactOS]]
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 71 ⟶ 80:
I kernel "classici" (sia monolitici che microkernel) astraggono l'hardware, nascondendo le risorse dietro a un ''livello di astrazione dell'hardware'' ([[hardware abstraction layer]] o HAL), o dietro a server "sicuri". In questi sistemi "classici" ad esempio, se viene allocata della memoria il programma non può sapere in quale pagina fisica questa verrà riservata dal sistema operativo, e se viene scritto un file non c'è modo di sapere direttamente in quale settore del disco è stato allocato. È questo il livello di astrazione che un esokernel cerca di evitare. Esso permette ad un'applicazione di richiedere aree specifiche di memoria, settori specifici su disco e così via, e si assicura solamente che le risorse richieste siano disponibili e che le applicazioni vi possano accedere.
Tutto ciò ha un'importante implicazione: è possibile avere diversi libOS sul sistema. Se, per esempio, si installa un libOS che esporta un'API Unix e uno che esporta un'API Windows, è possibile eseguire simultaneamente applicazioni compilate per UNIX e per Windows. Lo sviluppo dei libOS avviene a livello utente, senza reboots, debug su console e in piena protezione della memoria.
Riga 78 ⟶ 86:
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 [[MIT]] ha sviluppato diversi sistemi basati su esokernel.
▲== 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. Il più conosciuto fra questi è [[Exec]] il cosiddetto "microkernel" alla base dell'OS di Amiga.<br>
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
|