La battaglia dei kernel

di |
logomacitynet696wide

Meglio un kernel monolitico o un microkernel? Il dibattito si accende nella comunità  Linux ma il dibattito tocca molto da vicino anche il mondo Mac e potrebbe spiegare qualche cosa sulle prestazioni di Mac OS X

Le discussioni sulla bonta’ dei sistemi operativi a microkernel Vs quelli a kernel monolitico ricorrono spesso nelle chiacchiere “da bar” degli addetti ai lavori, e sono uno degli argomenti motori di dispute infinite, del tipo Apple e’ meglio di Microsoft o e’ piu’ forte la Juve o l’Inter.

Sull’argomento, i piu’ curiosi possono consultare lo scambio di battute tra Linus Torvalds (sostenitore del kernel monolitico), all’epoca studente e fresco creatore di un piccolo clone di unix capace di girare su un modesto 386 e Andriew Tanenbaum, esimio luminare dei sistemi operativi e papa’ di Minix, un microkernel nato a scopo didattico, che sosteneva che linux era “nato obsoleto”, proprio a causa del suo essere monolitico.

Linuxjournal ospita un interessante articolo sul kernel di MacOs X messo a confronto con quello di Linux; la tesi é che la architettura a microkernel del SO di Apple lo condanna a prestazioni inferiori.

Il dibattito e complesso: i microkernel danno l’impressione di una migliore architettura, ma sono spesso accusati di lentezza é di presentare benefici solo sulla carta; la teoria (in termini molto semplicistici) é che nei microkernel una serie di processi, ognuno isolato dall’altro e operante in memoria protetta, dovrebbe farsi carico della grande maggioranza dei compiti svolti dal sistema operativo. In questo modo la modifica o il crash di uno di questi processi non dovrebbe causare problemi al resto del sistema.

Miles Nordin, il redattore dell’articolo, parteggia per i monolitici, e sostiene che i fans dei microkernel siano vittima di una generalizzazione errata, e cioè che la protezione della memoria sia un dogma assoluto, forse a causa della loro provenienza da sistemi con poco protetti come Windows 3.1 e Mac OS 6.

Nella realtà  i soli due sistemi microkernel diffusi sono due: QNX e Mach, e le loro implementazioni sono diverse; in particolare Mach, quello scelto da Apple, inserisce ogni cosa che accede all’hardware nel microkernel, e questo garantisce ad esempio che i drivers per l’hardware possano essere coperti da una licenza più favorevole ad Apple.
Il problema e’ che inserire i drivers dentro il microkernel di fatto cancella una delle motivazioni chiave per la scelta del microkernel, quella relativa alla semplicità  e rapidità  di sviluppo dei drivers e alla semplificazione del debug.

L’altro grosso problema, assai dibattuto, é quello della performance. Nordin sostiene che le moderne CPU sono ottimizzate per i kernel monolitici (e questo é già  un passo in avanti, si incappa spesso in chi sostiene che la lentezza sia intrinseca al design del microkernel), e che questo causi, per i microkernel, overhead nel passaggio dei messaggi da un processo all’altro.
Le performances dei microkernel sarebbero minate anche dal fatto che la protezione della memoria complica la attuale tendenza al copiare meno blocchi possibile di memoria (Zero copy aesthetic).

La conclusione é che il microkernel avrebbe fallito: per molti anni i sistemi a microkernel sono stati solo teorizzati sulla carta, e certi problemi, pur evidenti già  in fase di design, si sarebbero rivelati nella loro completezza solo durante la implementazione.

La argomentazione é tecnicamente chiara e convincente, ma occorrono alcuni distinguo: intanto chi ha provato QNX (un sistema operativo real-time usato in moltissimi macchinari mission-critical, e di cui é disponibile per il download un demo) non lo ha trovato affatto lento, inoltre occorre capire fino a che punto MacOS é davvero un microkernel, ad esempio perfino il design di Windows NT é microkernel, ma la sua realizzazione pratica non lo é.

Alcune informazioni raccolte sul sito degli sviluppatori Apple ad esempio, confermano che Mach non è un “vero” microkernel

Ancora: le comodati’ del microkernel sono reali, tanto che lo stesso Linux da tempo usa inserire e togliere “al volo” dal kernel i cosiddetti kernel-modules.

Infine, occorre dire che i microkernel sono un territorio relativamente poco esplorato, soprattutto nell’ambito desktop, é quindi possibile che i margini di miglioramento siano più ampi del previsto, tanto é vero che le prestazioni di Mac Os X (che e’ anche difficile capire quanto siano influenzate negativamente da Mach e quanto da Aqua), dopo un debutto francamente imbarazzante, sono migliorate enormemente e altrettanto dovrebbero fare con Jaguar, la prossima release, e pur non essendo fenomenali non sono lontanissime da quelle di Mac OS 9.x.

[A cura di Marco Centofanti]