Kernel: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m sistemazione fonti e fix vari |
fix |
||
Riga 15:
== Classificazione ==
[[File:OS-structure2.svg|miniatura|Confronto tra i diversi kernel]]
L'accesso diretto all'hardware può essere anche molto complesso, quindi i kernel usualmente implementano uno o più tipi di astrazione dall'hardware, il cosiddetto ''livello di astrazione dell'hardware'' (''[[hardware abstraction layer]]'' o ''HAL''). Queste astrazioni servono a "nascondere" la complessità e a fornire un'interfaccia pulita e uniforme all'hardware sottostante, in modo da semplificare il lavoro degli sviluppatori.
I kernel si possono classificare in quattro categorie, in base al grado di astrazione dell'hardware:
* ''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 software (chiamati [[device driver]] o [[server]]) per fornire maggiori funzionalità.
Riga 26:
=== Kernel monolitici ===
[[File:Kernel-monolithic.svg|miniatura|Rappresentazione grafica di un kernel monolitico]]
L'approccio monolitico definisce un'interfaccia virtuale di alto livello sull'hardware e software, 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''.
Line 38 ⟶ 39:
=== Microkernel ===
{{
[[File:Kernel-microkernel.svg|miniatura|Rappresentazione grafica di un microkernel]]
[[File:IBM AIX logo (2021).svg|thumb|Logo [[AIX (sistema operativo)]], sistema operativo, basato su microkernel]]▼
[[File:BeOS_screenshot.png|thumb|[[BeOS]], altro sistema operativo basato su microkernel]]▼
L'approccio microkernel consiste nel definire un kernel principale che fornisce esclusivamente un set di ''primitive'' o [[chiamata di sistema|chiamate di sistema]] per implementare servizi minimali del sistema operativo quali gestione dei [[Thread (informatica)|thread]], [[Spazio di indirizzamento|spazi di indirizzamento]] o [[Comunicazione tra processi|comunicazione interprocesso]]. Sopra tale kernel minimale (da cui il prefisso "micro") vengono innestati dei server, ovvero programmi separati dal kernel che comunicano con questo tramite le suddette chiamate di sistema per implementare le varie funzionalità del sistema.
Line 47 ⟶ 51:
Esempi di microkernel e Sistemi operativi basati su microkernel:
▲[[File:IBM AIX logo (2021).svg|thumb|Logo [[AIX (sistema operativo)]], sistema operativo, basato su microkernel]]
▲[[File:BeOS_screenshot.png|thumb|[[BeOS]], altro sistema operativo basato su microkernel]]
* [[AIX (sistema operativo)|AIX]]
* [[Amoeba (sistema operativo)|Amoeba]]
Line 65 ⟶ 67:
* [[QNX]]
* [[RadiOS]]
* [[Redox (sistema operativo)|Redox]]
* [[Spring operating system]]
* [[Symbian OS]]
Line 72 ⟶ 74:
=== Kernel monolitici e microkernel: confronto ===
[[File:DragonFly_BSD_4.2.3_bootloader_screenshot.png|thumb|[[DragonFly BSD|DragonFly]]]]▼
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]], è basato su un kernel Mach 3.0 e componenti BSD nello stesso spazio di indirizzamento in modo da abbattere i tempi di latenza tipici dei microkernel. XNU risulta così un kernel dalle notevoli prestazioni poiché basato in parte su una soluzione ibrida e non può in ogni caso essere considerato un microkernel. Nella documentazione ufficiale di Apple si fa chiaro riferimento a XNU come Kernel Monolitico Modulare.
Line 77 ⟶ 81:
In realtà vi sono ragioni da entrambe le parti.
▲[[File:DragonFly_BSD_4.2.3_bootloader_screenshot.png|thumb|[[DragonFly BSD|DragonFly]]]]
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 [[Sistema embedded|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.
Line 87 ⟶ 90:
=== Kernel ibridi ===
[[File:Kernel-hybrid.svg|miniatura|Rappresentazione grafica di un kernel ibrido]]
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.
Line 100 ⟶ 104:
=== Esokernel ===
[[File:Kernel-exo.png|frame|right|Rappresentazione grafica di un Exokernel]]
Gli esokernel, o Exokernel, conosciuti anche come "sistemi operativi verticali", sono un approccio radicalmente differente alla progettazione dei sistemi operativi. L'idea centrale è "separare la protezione dalla gestione".
Line 115 ⟶ 120:
Il software cosiddetto "no kernel" non ha l'obbligo di essere limitato ad un unico entry point che sia oltretutto centralizzato. Un esempio è dato da progetti come [https://web.archive.org/web/20190602150238/http://tunes.org/ TUNES] e UnununiumOS, che intendevano creare un sistema operativo privo di kernel (entrambi i progetti sono stati interrotti).
== Note ==
<references/>
Line 131 ⟶ 136:
* {{Cita libro |cognome= Tanenbaum |nome=Andrew S. |wkautore=Andrew S. Tanenbaum |titolo=Structured Computer Organization |anno=1979 |editore=Prentice-Hall |città=Englewood Cliffs, New Jersey |lingua=en|isbn=0-13-148521-0 }}
* {{cita pubblicazione |cognome=Wulf |nome=W. |coautori=E. Cohen, W. Corwin, A. Jones, R. Levin, C. Pierson, F. Pollack |anno=1974 |mese=giugno |titolo=HYDRA: the kernel of a multiprocessor operating system |rivista=Communications of the ACM |volume=17 |numero=6 |pp=337-345 |issn=0001-0782 |url=https://portal.acm.org/citation.cfm?id=36 |urlmorto=sì }}
** {{Cita pubblicazione| titolo = HYDRA:The Kernel of a Multiprocessor Operating System| autore1 = W. Wulf | autore2 = E. Cohen | autore3 = W. Corwin | autore4 = A. Jones | autore5 = R. Levin | autore6 = C. Pierson | autore7 =
== Voci correlate ==
|