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''' ècostituisce lail parte fondamentale'''nucleo''' di un [[sistema operativo]]. Si tratta di un [[software]] conavente il compito di fornire ai programmiprocessi in esecuzione sul computersull'elaboratore un accesso sicuro e controllato all'[[hardware]]. SiccomeDato che possono esserciesserne piùeseguiti programmisimultaneamente inpiù esecuzionedi simultanea e l'accesso all'hardware è limitatouno, il kernel ha anche la responsabilità di assegnare una porzione di tempo -macchina e di accesso all'hardware a ciascun programma, funzione detta ([[multiplexing]]). 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 software.
 
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:
 
<!-- An operating system kernel is not strictly needed to run a computer. Programs can be directly loaded and executed on the "bare metal" machine, provided that the authors of those programs are willing to do without any hardware abstraction or operating system support. This was the normal operating method of many early computers, which were reset and reloaded between the running of different programs. Eventually, small ancillary programs such as [[program loader]]s and [[debugger]]s were typically left in-core between runs, or loaded from [[read-only memory]]. As these were developed, they formed the basis of what became early operating system kernels. -->
I kernel si possono classificare 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 sonosi moltodifferenziano simili aidai microkernel puri tranne per ill'implementazione fattodi chealcune implementanofunzioni delaggiuntive codiceal aggiuntivo a livellofine di kernel per incrementare le prestazioni.
* ''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]].
* ''Esokernel'', che non forniscono astrazione ma che permettono l'uso di [[libreria|librerie]] per fornire più funzionalità tramite un accesso diretto o quasi all'hardware.
 
== Kernel monolitici ==
 
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]]
 
== 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 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ù conosciutonoto fradi questiessi è [[Exec]] (e il cosiddettosuo "microkernel"diretto allasuccessore base[http://it.wikipedia.org/AmigaOS#ExecSG dell'OSExecSG]) il kernel di AmigaAmigaOS, che può essere definita come ''executive library kernel''.<br>
 
== 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 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]]
* '''Quark''', cheil èkernel alla base deldi [[MorphOS]]
* [[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 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.
 
Quindi,Dato siccomeche un esokernel fornisce un'interfaccia davvero a basso livello all'hardware, mancando di qualsiasi funzionalità di alto livello tipica degli altri sistemi operativi, esso è accompagnato da un "''sistema operativo-libreria"'' (in gergo libOS) che si interfaccia con l'esokernel sottostante fornendo quindi agli sviluppatori di applicazioni le funzionalità di un sistema operativo completo.
Questo "[[libOS]]" si interfaccia all'esokernel sottostante e fornisce agli sviluppatori di applicazioni le funzionalità di un sistema operativo completo.
 
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>
Exec si può definire più correttamente come un executive library kernel.<br>
Recentemente sono nate alcune versioni aggiornate e più evolute di Exec: [[AROS]] e [http://it.wikipedia.org/AmigaOS#ExecSG ExecSG] di AmigaOS 4.0, che ne sono i diretti e legittimi eredi.
 
*[[Exec]]
*[http://it.wikipedia.org/AmigaOS#ExecSG ExecSG]
*[[AROS]]
 
== 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 OSsistema operativo privo di qualsiasi kernel.<br>
Il software cosiddetto "no kernel" non ha l'obbligo di essere limitato ad un unico entry point che sia oltretutto centralizzato.