In informatica, il kernel è un componente fondamentale di un sistema operativo (OS). Funge da ponte tra l’hardware e il software del computer, consentendo alle applicazioni di comunicare con l’hardware senza accedervi direttamente. In sostanza, il kernel è responsabile della gestione delle risorse di sistema, come processori, memoria e dispositivi di input/output.
Esistono diversi tipi di kernel, ma i due più utilizzati sono il kernel monolitico e il microkernel. Il kernel monolitico è un progetto più tradizionale che incorpora nel kernel la maggior parte delle funzioni del sistema operativo, compresi i driver di dispositivo, i file system e le chiamate di sistema. Al contrario, il microkernel include solo le funzioni più essenziali, come la gestione della memoria e la pianificazione dei processi, e delega altri compiti a moduli o server separati.
iOS di Apple, come tutti i sistemi operativi Apple, è basato su un microkernel chiamato XNU (X is Not Unix). XNU combina un kernel Mach, che fornisce le funzionalità di base, e un kernel BSD (Berkeley Software Distribution), che include il file system e i componenti di rete. Questo design consente una maggiore sicurezza, stabilità e flessibilità, ma al costo di una maggiore complessità e di potenziali problemi di prestazioni.
Il concetto di kernel risale agli albori dell’informatica, con i primi sistemi operativi come Unix e Multics che utilizzavano un kernel monolitico. Il primo microkernel è stato sviluppato negli anni ’80 dai ricercatori della Carnegie Mellon University, ma è stato solo alla fine degli anni ’90 che i microkernel sono diventati più diffusi.
Una delle caratteristiche principali dei moderni sistemi operativi è la memoria virtuale, che consente al sistema operativo di allocare la memoria alle applicazioni in modo da far sembrare che abbiano accesso a più memoria fisica di quella effettivamente disponibile. Il kernel gestisce la memoria virtuale creando una tabella di pagine che mappa gli indirizzi virtuali in quelli fisici e scambiando i dati tra la memoria fisica e il disco secondo le necessità. Questo aiuta a evitare che le applicazioni si blocchino a causa della memoria insufficiente e migliora le prestazioni complessive del sistema.
Oggi sono in uso diversi sistemi operativi, ognuno con un proprio kernel e una propria filosofia. Windows e Linux utilizzano entrambi kernel monolitici, mentre macOS e iOS utilizzano un design ibrido di microkernel. Android utilizza un kernel Linux modificato e Chrome OS utilizza il kernel Linux con un ambiente user-space personalizzato. Indipendentemente dal design, il kernel rimane un componente critico di tutti i sistemi operativi moderni, fornendo le basi per l’esecuzione di tutto il software su un computer o un dispositivo mobile.
Il nome del kernel di Windows è kernel Windows NT.
Il kernel esegue una serie di operazioni, tra cui la gestione delle risorse di sistema, come la memoria e il tempo di CPU, la gestione delle richieste di input/output da parte delle applicazioni, la gestione dei driver dei dispositivi, l’applicazione dei criteri di sicurezza e la facilitazione della comunicazione tra le diverse parti del sistema operativo e tra il sistema operativo e le applicazioni. In sostanza, il kernel è responsabile di fornire un ponte tra i componenti hardware e software di un sistema informatico.
Il file system è un componente separato di un sistema operativo e di solito si trova sopra il kernel.