Kernel: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
m Corretti wikilink
 
(11 versioni intermedie di 9 utenti non mostrate)
Riga 2:
[[File:Kernel-simple.svg|thumb|Astrazione dal [[software]] all'[[hardware]] passando per il ''kernel'']]
 
In [[informatica]], il '''kernel''' ([[Alfabeto fonetico internazionale|AFI]]: {{IPA|[ˈkəːnəl]|en}}) o '''nucleo''' è un [[Programma (informatica)|programma]] situato al centro del [[sistema operativo]] che ha gefneralmentegeneralmente un controllo completo dell'intero sistema<ref name="Linfo">{{cita web|url=http://www.linfo.org/kernel.html|titolo=Kernel|sito=Linfo|editore=Bellevue Linux Users Group|accesso=15 settembre 2016|urlarchivio=https://web.archive.org/web/20061208185439/http://www.linfo.org/kernel.html|urlmorto=}}</ref> e fornisce un accesso sicuro e controllato dell'[[hardware]] ai [[processo (informatica)|processi]] in [[esecuzione (informatica)|esecuzione]] sul [[elaboratore|computer]].<ref>{{cita libro|autore=Brian Bagnall|titolo=On The Edge: The Spectacular Rise and Fall of Commodore|anno=2006|editore=Variant Press|lingua=en|p=202|ISBN=978-0-97-386490-8}}{{Citazione|Il kernel è la parte più fondamentale di un programma, normalmente un sistema operativo, che risiede in memoria per tutto il tempo e che fornisce i servizi di base: è la parte del sistema operativo che è più vicina alla macchina e che può attivare l'hardware direttamente oppure interfacciarsi con un altro livello software che gestisce l'hardware.||The kernel is the most fundamental part of a program, typically an operating system, that resides in memory at all times and provides the basic services. It is the part of the operating system that is closest to the machine and may activate the hardware directly or interface to another software layer that drives the hardware.|lingua=en}}</ref> Dato che possono eventualmente esserne eseguiti simultaneamente più di uno, il kernel può avere anche la responsabilità di assegnare una porzione di tempo-macchina (''[[scheduling]]'') e di accesso all'hardware a ciascun programma (''[[multitasking]]'')<ref>{{cita web|lingua=en|url=http://kukuruku.co/hub/opensource/multitasking-management-in-the-operating-system-kernel|titolo=Multitasking Management in the Operating System Kernel|autore=LifeV|data=13 maggio 2014|editore=Kukuruku.co|accesso=1º novembre 2016}}{{Citazione|Siccome in un dato momento ogni processore gestito dal kernel può eseguire solo una istruzione per volta, ci può essere solo un thread attivo. Il processo mediante il quale si sceglie il thread di calcolo attivo è chiamato scheduling. A sua volta, il modulo incaricato di fare questa scelta è detto scheduler.||Since only one instruction can be executed at one processor kernel at one moment, only one thread can be active. The process of chosing the active computing thread is called scheduling. In its turn, the module which is in charge of the choice is called the scheduler. |lingua=en}}</ref>.
 
== Descrizione ==
Riga 9:
Questa era la modalità di funzionamento tipica dei primi computer, che venivano resettati prima di eseguire un nuovo programma. In un secondo tempo, alcuni programmi accessori come i program loader e i [[debugger]] venivano lanciati da una [[Read Only Memory|memoria a sola lettura]], o fatti risiedere in [[memoria (informatica)|memoria]] durante le transizioni del computer da un'[[Applicazione (informatica)|applicazione]] all'altra: essi formarono la base di fatto per la creazione dei primi sistemi operativi.
 
Un'altra situazione in cui l'assenza di sistema operativo è auspicabile è l'esempio dei [[Microcontrollore|microcontrollori]] minimalistimonolitici.
 
L'accesso diretto al kernel da parte di un utente/[[sistemista|amministratore]] può avvenire in modalità [[user mode]] o [[kernel mode]].
 
== Classificazione ==
[[File:OS-structure2.svg|miniaturathumb|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.
Riga 25:
 
=== Kernel monolitici ===
[[File:Kernel-monolithic.svg|miniaturathumb|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''.
Riga 40:
=== Microkernel ===
{{vedi anche|microkernel}}
[[File:Kernel-microkernel.svg|miniaturathumb|Rappresentazione grafica di un microkernel]]
[[File:IBM AIX logo (2021).svg|thumb|Logo [[AIX (sistema operativo)|AIX]], sistema operativo, basato su microkernel]]
[[File:BeOS_screenshot.png|thumb|[[BeOS]], altro sistema operativo basato su microkernel]]
 
Riga 82:
In realtà vi sono ragioni da entrambe le parti.
 
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 [[Sistema critico|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 [[Mach (kernel)|kernel Mach]], che è il più noto microkernel di uso generico, molti altri microkernel sono stati sviluppati con scopi specifici. [[Kernel 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 (informatica)|Fiasco]] in grado di eseguire il [[Linux (kernel)|kernel Linux]] accanto agli altri processi di L4 in spazi di indirizzamento separati.
Riga 89:
 
=== Kernel ibridi ===
[[File:Kernel-hybrid.svg|miniaturathumb|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.
Riga 103:
 
=== Esokernel ===
[[File:Kernel-exo.pngsvg|frame|rightthumb|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".
Riga 115:
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 reboot, debug su console e in piena [[protezione della memoria]].
 
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 reale di tecnologia|Istituto Svedese di Informatica]]. Anche il [[Massachusetts Institute of Technology|MIT]] ha sviluppato diversi sistemi basati su esokernel.
 
=== No Kernel ===
Riga 124:
 
== Bibliografia ==
* {{cita libro |cognome=Deitel |nome=Harvey M. |titolo=An introduction to operating systems |annooriginale=1982 |url=https://portal.acm.org/citation.cfm?id=79046&dl=GUIDE&coll=GUIDE |edizione=revisited first edition |anno=1984 |editore=Addison-Wesley |ppp=673|isbn=0-201-14502-2 }}
* {{cita pubblicazione|cognome=Denning |nome=Peter J. |linkautore=Peter J. Denning |anno=1980 |mese=aprile|titolo=Why not innovations in computer architecture? |rivista=ACM SIGARCH Computer Architecture News |volume=8 |numero=2 |pp=4-7 |issn=0163-5964 |url=https://portal.acm.org/citation.cfm?id=859506&coll=&dl=ACM&CFID=15151515&CFTOKEN=6184618 }}
* {{cita pubblicazione|cognome=Brinch Hansen |nome=Per |anno=1970 |mese=aprile|titolo=The nucleus of a Multiprogramming System |rivista=Communications of the ACM |volume=13 |numero=4 |pp=238-241 |issn=0001-0782 |url=https://portal.acm.org/citation.cfm?id=362278&dl=ACM&coll=GUIDE&CFID=11111111&CFTOKEN=2222222 }}
* {{cita libro |cognome=Brinch Hansen |nome=Per |wkautore=Per Brinch Hansen |titolo=Operating System Principles |annooriginale=1973 |url=https://portal.acm.org/citation.cfm?id=540365 |editore=Prentice Hall |città=Englewood Cliffs |ppp=496|isbn=0-13-637843-9 }}
* {{Cita pubblicazione|autore =[[Per Brinch Hansen]]|titolo = The evolution of operating systems|data = 2001|url= http://brinch-hansen.net/papers/2001b.pdf|formato = pdf|accesso = 24 ottobre 2006}} nel libro{{Cita libro | curatore-nome=Per | curatore-cognome=Brinch Hansen | titolo=Classic operating systems: from batch processing to distributed systems | anno=2001 | url=https://portal.acm.org/citation.cfm?id=360596&dl=ACM&coll=&CFID=15151515&CFTOKEN=6184618 | editore=Springer-Verlag | città= New York |pp=1-36 | capitolo=1 | urlcapitolo=http://brinch-hansen.net/papers/2001b.pdf | formato=pdf | isbn=0-387-95113-X }}
* {{cita pubblicazione|cognome=Levin |nome=R. |coautori=E. Cohen, W. Corwin, F. Pollack, W. Wulf |anno=1975 |titolo=Policy/mechanism separation in Hydra |rivista=ACM Symposium on Operating Systems Principles / Proceedings of the fifth ACM symposium on Operating systems principles |pp=132-140 |url=https://portal.acm.org/citation.cfm?id=806531&dl=ACM&coll=&CFID=15151515&CFTOKEN=6184618 }}
Riga 133:
* {{Cita libro |cognome=Lorin |nome=Harold |titolo=Operating systems |url=https://portal.acm.org/citation.cfm?id=578308&coll=GUIDE&dl=GUIDE&CFID=2651732&CFTOKEN=19681373 |anno=1981 |editore=Addison-Wesley |pp=161-186 |città=Boston, Massachusetts|isbn=0-201-14464-6 }}
* {{cita pubblicazione|cognome=Schroeder |nome=Michael D.|coautori=Jerome H. Saltzer |anno=1972 |mese=marzo|titolo=A hardware architecture for implementing protection rings |rivista=Communications of the ACM |volume=15 |numero=3 |pp=157-170 |issn=0001-0782 |url=https://portal.acm.org/citation.cfm?id=361275&dl=ACM&coll=&CFID=15151515&CFTOKEN=6184618 }}
* {{Cita libro |cognome=Shaw |nome=Alan C. |titolo=The logical design of Operating systems |url=https://portal.acm.org/citation.cfm?id=540329 |anno=1974 |editore=Prentice-Hall |ppp=304|isbn=0-13-540112-7 }}
* {{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ì }}
Riga 146:
 
== Altri progetti ==
{{Interprogetto|wikt=kernel|preposizione=suisul}}
 
== Collegamenti esterni ==