Home > GNU/Linux, newbie > Guida per principianti a GNU/Linux: kernel monolitici e microkernel

Guida per principianti a GNU/Linux: kernel monolitici e microkernel

)

Esempio di un kernel monolitico, anzi, granitico :)

Abbiamo visto che i processori moderni operano in due modi distinti: il modo kernel e il modo utente. Nel modo utente il processore crea una “realtà virtuale” in cui i programmi hanno l’illusione di essere gli unici a venire eseguiti (mentre invece sono in esecuzione insieme a decine di altri programmi) e hanno a disposizione uno spazio di memoria molto grande, più grande della memoria RAM realmente disponibile. Viceversa nel modo kernel (usato, appunto, dal kernel del sistema operativo in uso) queste “bugie” non ci sono perché chiaramente il kernel del sistema operativo deve conoscere la “verità”.
Ora, gli sviluppatori di sistemi operativi hanno due strade: usare massicciamente il modo kernel, oppure no. In altre parole, creare dei kernel che contengano molte funzioni, oppure dei kernel molto semplici che ne contengano poche: le funzioni in più verranno realizzate da programmi esterni al kernel.

Il primo approccio è quello dei kernel monolitici (ovvero: composti da un unico “pezzo”) il secondo è quello dei microkernel.

Vediamo di entrare più nel dettaglio, in modo da essere meno vaghi.
Prendiamo una funzione specifica tipica del kernel del sistema operativo, ovvero la gestione del filesystem. Di norma questa gestione è divisa in tre parti: una prima parte legata più strettamente all’hardware (scrivere e leggere sul disco), una seconda parte invece più astratta, ovvero l’organizzazione dei dati sul disco, una terza parte ancora più astratta che riguarda la rappresentazione dei file e delle directory, rappresentazione che è poi ciò che i programmi e gli utenti “vedono”.
Quello che distingue un formato di filesystem da un altro (ad esempio ntfs da etx3) è la seconda parte.
Prendiamo l’approccio del kernel Linux: il kernel gestisce sia la lettura/scrittura sul disco, attraverso il driver per l’hard disk, sia l’organizzazione dei dati sul disco stesso, sia l’organizzazione in file e directory. Nel kernel queste funzioni sono ben individuabili:

1. driver del dispositivo fisico
2. driver (modulo) del formato del filesystem (ext2, ext3, fat, ecc.)
3. livello astratto del filesystem, uguale per ogni formato

Ora, potremmo invece decidere che il kernel gestisca solo l’hardware (livello 1) e non gli altri due livelli. In questo caso il nostro kernel sarà più piccolo, ma avremo bisogno di programmi in modo utente che svolgano il ruolo del secondo e terzo livello. O potremmo decidere che solo il terzo vada tolto dal kernel, o solo il secondo. O persino tutti e tre.
Quale che sia la nostra scelta, più funzioni togliamo dal kernel, più ci avvicineremo all’architettura a microkernel, in cui appunto esiste un kernel minimale (micro) che svolge poche funzioni e poi tanti programmi in modo utente che implementano le funzioni di tipo più astratto.

Ora la domanda nasce spontanea:

Che me ne frega?

Giusto ;)
E’ solo per cultura personale, visto che tante volte si legge che Linux è un kernel monolitico e non si sa bene che vuol dire. Adesso lo sapete.

Concludendo il discorso, ci sono buone ragioni per l’uno o l’altro modello. Nei fatti, i kernel monolitici hanno avuto maggiore successo, perché più semplici da realizzare e mantenere. Viceversa le architetture a microkernel permettono una gestione più flessibile: ad esempio potremmo decidere di montare un certo hard disk solo per un utente invece che per tutti, visto che il “montaggio” diventa un’operazione a livello utente e non più a livello di kernel.
Di contro però i microkernel hanno spesso grossi problemi di sincronizzazione tra le varie componenti, che ne rallentano sviluppo e mantenimento. Questo è uno dei motivi che ha rallentato lo sviluppo del kernel HURD, il kernel creato dal progetto GNU e che ormai langue da anni tra i progetti bellissimi mai finiti.

Esiste infine un terzo approccio, quello usato da Windows, da NT in poi: il kernel ibrido. In sostanza è come l’architettura a microkernel (cioè con un nucleo centrale e tanti “pezzettini” che girano sopra questo nucleo) solo che questi “pezzettini” funzionano anch’essi in modalità kernel e non in modalità utente, nei fatti annullando i vantaggi che una “vera” architettura a microkernel potrebbe portare. Da anni ci si interroga sul perché e finora la risposta più plausibile mi pare l’abbia data Linus Torvalds: la Microsoft doveva pagare il pedaggio alla teoria dominante all’inizio degli anni ’90, ovvero che i kernel monolitici fossero obsoleti. Solo che non erano tanto stupidi da impantanarsi in un vero e complicatissimo microkernel.

Il risultato è che, paradossalmente, il kernel di Windows contiene molte funzioni che invece in GNU/Linux sono esterne, come ad esempio la gestione della grafica (che su GNU/Linux è affidata a Xorg, un programma che gira in modo utente). In altre parole, il “finto” microkernel di Windows è in un certo senso più “monolitico” del kernel Linux.

Ecco qualche disegno che mette i due modelli a confronto (monolitico e microkernel):

Kernel monolitico e microkernel a confronto

Kernel monolitico e microkernel a confronto

Kernel ibrido (modello del kernel di Windows NT e successivi)

Nella prossima puntata parliamo di qualcosa di molto più pratico: la gestione dei permessi, croce e delizia dei sistemi Unix.

About these ads
  1. Matteo
    15 agosto 2008 alle 23:25 | #1

    complimenti… mi piace molto questo approccio molto user friendly da informatico non avrei saputo spiegarmi meglio… ottimi anche gli esempi… bravo!

  2. 16 agosto 2008 alle 9:34 | #2

    Aggiungo link al famoso (e gustoso) flame Torvalds – Tanenbaum fra micro kernel e kernel monolitico

    http://groups.google.com/group/comp.os.minix/browse_thread/thread/c25870d7a41696d2/f447530d082cd95d?tvc=2

    uno dei più bei flammoni in rete

  3. federico
    16 agosto 2008 alle 11:25 | #3

    ottimo articolo…e ottimo blog, continua così.

  4. 16 agosto 2008 alle 20:51 | #4

    Bell’articolo!

    A proposito di GNU/HURD… i comuni mortali come me avranno mai il piacere di utilizzarlo? Io tempo fa mi ro incuriosito e avevo cercato il modo di utilizzarlo… ma era fermo a qualche anno fa e non riconosceva nulla. C’era anche un live cd debian, ma non ci ho “cavato un ragno dal buco” :)

    Ciao!

  5. 17 agosto 2008 alle 2:48 | #5

    penso di no… ormai HURD è quasi un abandonware, ogni tanto gli danno uno sguardo (in fondo un giorno potrebbe anche capitare che il kernle Linux cada sotto i colpi di qualche causa sui brevetti, come il famoso caso SCO, non si sa mai).
    Cmq io ogni tanto uso debian gnu/hurd con qemu, lì va bene.

  6. anonimo
    14 settembre 2008 alle 19:32 | #6

    Complimenti, anche se ne so qualcosa a riguardo il tuo stile è così rilassante che mi hai fatto perdere nella lettura. Complimenti, davvero.

  7. 6 luglio 2013 alle 12:18 | #7

    Hey would you mind stating which blog platform you’re working with? I’m going to
    start my own blog soon but I’m having a tough time selecting between BlogEngine/Wordpress/B2evolution and Drupal. The reason I ask is because your design and style seems different then most blogs and I’m looking for something unique.
    P.S My apologies for being off-topic but I had to ask!

  8. 26 settembre 2013 alle 12:28 | #8

    Very good article! We are linking to this particularly
    great article on our website. Keep up the great writing.

  1. 1 ottobre 2008 alle 17:08 | #1
  2. 22 agosto 2010 alle 12:51 | #2
  3. 29 agosto 2010 alle 0:24 | #3

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 724 follower

%d blogger cliccano Mi Piace per questo: