login LOGIN
CHIUDI chiudi
Il mio profilo

mostra
Hai dimenticato la password?
Inserisci l'indirizzo email di registrazione per reimpostare la password.
Segui le istruzioni che ti abbiamo inviato per posta elettronica.

Cos'è il kernel

Ecco come funziona il componente che si occupa della gestione e dell'allocazione delle risorse del computer

Sviluppatori al lavoro su un kernel

Pur nelle loro differenze, estetiche e concettuali, c'è un elemento strutturale che accomuna ogni sistema operativo – sia mobile sia desktop – oggi in uso: il kernel (“nocciolo” o “fulcro in inglese). Naturalmente, ognuno dei sistemi operativi (Windows, Android, iOS, Mac OS, …) ha un proprio kernel, realizzato in base alle necessità del sistema operativo stesso. Per funzionare, però, tutti hanno bisogno di questo componente.

Cos'è il kernel

Il kernel è il componente centrale di ogni sistema operativo. Utilizzando varie modalità di gestione – tra le quali la comunicazione tra processi e le chiamate di sistema – fa da ponte tra le componenti hardware di un computer – come processore, RAM e hard disk – e i programmi in esecuzione sul computer stesso. Data la sua rilevanza, è il primo programma ad essere caricato in memoria quando si accende un computer e l'ultimo ad essere chiuso in fase di spegnimento.

 

Schema di funzionamento generale di un kernel

 

Il kernel è responsabile della gestione e dell'allocazione delle risorse del computer, permettendo ad altri applicazioni e programmi di utilizzare queste risorse. Definisce, inoltre, lo spazio degli indirizzi di memoria per i vari programmi in esecuzione, carica in memoria i file con il codice dell'applicazione e imposta l'ordine di esecuzione delle varie applicazioni e dei programmi attivi. I compiti principali di un kernel, quindi, possono essere raggruppati in quattro categorie principali: gestione dei processi per l'esecuzione dei programmi, gestione e allocazione della memoria e gestione della comunicazione input e output del computer, gestioni delle componenti hardware e delle periferiche per mezzo dei driver e controllo delle chiamate di sistema.

Tipologie di kernel

Ad oggi si contano 5 tipi di kernel a seconda di come viene gestito l'accesso diretto alle risorse hardware: monolitico, microkernel, kernel ibrido, nanokernel ed esokernel. Tra questi, i più conosciuti e utilizzati sono il kernel monolitico e il kernel ibrido.

Kernel monolitico

Un kernel monolitico, come il kernel Linux o il kernel FreeBSD, contiene in un unico file tutte le funzioni primarie di un sistema operativo e i driver delle varie periferiche collegate al computer. Questa tipologia di kernel è composta da vari moduli, uno per ciascuna delle funzioni da svolgere o per ciascuna delle periferiche da gestire. Maggiore sarà il numero di moduli che lo compongono, maggiore sarà la grandezza del file risultante e maggiore il tempo richiesto al sistema per caricarlo in memoria.

 

Schema di funzionamento di un kernel monolitico

 

Essendo totalmente personalizzabile è possibile eliminare senza problemi tutti i moduli non necessari o relativi a periferiche (hard disk, webcam, ecc.) non installate. Se ben configurato, un kernel monolitico può occupare pochissimo spazio sul disco rigido (alcuni kernel di sistemi operativi UNIX possono essere salvati all'interno di un floppy disk) garantendo tempi di caricamento esigui. Gran parte del lavoro nei kernel monolitici è fatto attraverso le chiamate di sistema: i programmi in esecuzione inviano al kernel delle richieste di accesso a determinate risorse hardware (spazio sull'hard disk, allocazione in memoria, ecc.) e sarà poi il kernel a decidere quali risorse concedere e in che ordine.

Questo approccio “minimalista” porta però con sé diversi svantaggi. Primo fra tutti la difficoltà che si incontra ogni qual volta si deve aggiungere una nuova periferica al sistema. Se si volesse utilizzare, ad esempio, uno scanner e nella prima “stesura” del kernel non fosse stato inserito il modulo adatto, questa periferica non riuscirebbe ad interfacciarsi con le componenti fondamentali del computer e con il sistema operativo. L'utente, quindi, sarebbe costretto a ricompilare, ovvero a modificare e ricaricare sul sistema, il kernel ogni volta che viene aggiunta una nuova periferica, con tutti i rischi che ne conseguono. Infatti, essendo esso realizzato come una struttura “integrata” (i vari moduli sono strettamente collegati l'uno all'altro), un bug in una qualsiasi delle parti, o moduli, che lo compongono potrebbe portare ad un malfunzionamento generale, mettendo a rischio la stabilità del sistema stesso. Nel caso in cui il nuovo modulo non dovesse essere compatibile con uno dei moduli già esistenti, si verrebbe a creare un conflitto tra le varie parti. Tale conflitto potrebbe portare anche ad un “errore fatale”, come un errore di kernel panic.

Microkernel

L'approccio che ha portato alla creazione dei microkernel è diametralmente opposto a quella appena descritta. Mentre il kernel monolitico contiene tutti i moduli necessari al funzionamento del computer, un microkernel implementa solamente alcune funzioni basilari – come la gestione della memoria, il multitasking e la comunicazione tra processi – demandando le altre funzionalità a programmi terzi chiamati server.

 

Schema di funzionamento di un microkernel

 

In un approccio di questo genere, i driver sono gestiti come elementi esterni al kernel, facilitando quindi l'installazione di nuove periferiche e nuovi dispositivi. I server, indipendenti e separati l'uno dall'altro, comunicano tra loro attraverso il meccanismo di scambio di messaggi: ogni server può accedere alle risorse e alle funzionalità di un altro server solo attraverso uno scambio di messaggi informativi filtrati dal kernel.

Questa struttura modulare assicura un vantaggio rispetto ai kernel monolitici: se uno dei server dovesse smettere di funzionare, il sistema può continuare ugualmente la sua esecuzione, magari ricaricando il modulo mal funzionante nel momento in cui ce ne fosse bisogno.

Kernel ibridi

I kernel ibridi nascono dalla fusione delle due tipologie di kernel appena descritti, unendo i punti di forza dell'uno e dell'altro.

 

Schema di funzionamento di un kernel ibrido

 

Utilizzati nella gran parte dei sistemi operativi commerciali – i kernel di Microsoft Windows e Mac OS sono entrambi ibridi – possono essere considerati come un'estensione dei microkernel: l'approccio strutturale è più o meno lo stesso, ma il kernel ibrido è formato da un numero maggiore di “moduli primari”.

Al suo interno vengono caricati alcuni moduli ritenuti “non essenziali” che però permettono un netto miglioramento nella gestione delle risorse e quindi nelle prestazioni generali del sistema. Sarà compito del gestore del sistema – o dello sviluppatore del sistema operativo – fare in modo che il numero di moduli sia il minore possibile.

Esokernel

L'approccio strutturale e funzionale degli esokernel è completamente differente rispetto a quello utilizzato dai kernel molitico, microkernel e kernel ibrido. Questi ultimi, infatti, operano una sorta di filtro tra parte software e parte hardware del sistema, “nascondendo” ai programmi le risorse hardware a loro disposizione o che stanno utilizzando. Ad esempio, un programma in esecuzione non potrà conoscere in quale parte di memoria è stata allocato o in quale settore del disco è stato scritto un file ad esso collegato. Questa scelta è dettata principalmente da ragioni di sicurezza: il kernel si occupa sia della gestione delle risorse sia dei rischi connessi con l'esecuzione dei programmi potenzialmente dannosi, tentando di minimizzarli il più possibile.

 

Schema di funzionamento di un Esokernel

 

L'esokernel, invece, tenta di eliminare il livello di astrazione che permette di nascondere le risorse hardware ai processi software in esecuzione. Un'applicazione può richiedere l'accesso a determinate risorse del sistema scegliendo, ad esempio, la porzione di memoria dove essere allocata o il settore del disco rigido su cui essere salvata. L'esokernel si limita ad assicurarsi che queste risorse siano disponibili e che il programma possa accedervi senza problemi.

Nanokernel

Semplificando, i nanokernel rappresentano un'estremizzazione dei microkernel. La struttura base del kernel viene ridotta all'osso, demandando virtualmente il funzionamento di tutti i servizi – anche di quelli basilari come il controllore di interruzioni programmabile – a programmi e moduli esterni al kernel stesso.

A cura di Cultur-e
Addestramento IA non consentito: É assolutamente vietato l’utilizzo del contenuto di questa pubblicazione, in qualsiasi forma o modalità, per addestrare sistemi e piattaforme di intelligenza artificiale generativa. I contenuti sono coperti da copyright.
Fda
Prompt engineering
Immagine principale del blocco
Prompt engineering
Fda gratis svg
Come interrogare le intelligenze artificiali
Iscriviti al corso gratuito

Iscriviti
all'area personale

Per ricevere Newsletter, scaricare eBook, creare playlist vocali e accedere ai corsi della Fastweb Digital Academy a te dedicati.