Un kernel monolitico è un kernel in cui tutti i servizi (file system, VFS, driver di dispositivo, ecc.), Nonché le funzionalità di base (pianificazione, allocazione della memoria, ecc.) Sono un gruppo affiatato che condivide lo stesso spazio. Questo si oppone direttamente a un microkernel .
Un microkernel preferisce un approccio in cui la funzionalità principale è isolata dai servizi di sistema e dai driver di dispositivo (che sono fondamentalmente solo servizi di sistema). Ad esempio, VFS (file system virtuale) e file system dispositivo a blocchi (ad es. Minixfs) sono processi separati che vengono eseguiti al di fuori dello spazio del kernel, utilizzando IPC per comunicare con il kernel, altri servizi e processi utente. In breve, se è un modulo in Linux, è un servizio in un microkernel, che indica un processo isolato.
Non confondere il termine kernel modulare come tutt'altro che monolitico. Alcuni kernel monolitici possono essere compilati per essere modulari (ad es. Linux), ciò che conta è che il modulo sia inserito e gira dallo stesso spazio che gestisce le funzionalità di base (spazio del kernel).
Il vantaggio di un microkernel è che qualsiasi servizio fallito può essere facilmente riavviato, ad esempio, non vi è alcuna interruzione del kernel se il file system radice genera un interruzione. Questo può anche essere visto come uno svantaggio, perché può nascondere bug piuttosto critici (o farli sembrare non così critici, perché il problema sembra risolversi continuamente). È visto come un grande vantaggio in scenari in cui semplicemente non è possibile riparare comodamente qualcosa una volta che è stato distribuito.
Lo svantaggio di un microkernel è che la messaggistica IPC asincrona può diventare molto difficile da eseguire il debug, specialmente se le fibrille sono implementate. Inoltre, semplicemente rintracciare un problema di FS / scrittura significa esaminare il processo dello spazio utente, il servizio del dispositivo a blocchi, il servizio VFS, il servizio del file system e (possibilmente) il servizio PCI. Se si ottiene uno spazio vuoto su questo, è tempo di guardare il servizio IPC. Questo è spesso più facile in un kernel monolitico. GNU Hurd soffre di questi problemi di debug ( riferimento ). Non ho nemmeno intenzione di andare al checkpoint quando ho a che fare con code di messaggi complessi. I microgranelli non sono adatti ai deboli di cuore.
Il percorso più breve verso un kernel stabile e funzionante è l'approccio monolitico. Entrambi gli approcci possono offrire un'interfaccia POSIX, in cui la progettazione del kernel diventa di scarso interesse per qualcuno che vuole semplicemente scrivere codice da eseguire su qualsiasi progetto.
Uso Linux (monolitico) in produzione. Tuttavia, la maggior parte del mio apprendimento, hacking o armeggiare con lo sviluppo del kernel va in un microkernel, in particolare HelenOS .
modificare
Se sei arrivato così lontano dalla mia lunghissima risposta, probabilmente ti divertirai un po 'a leggere il " Grande dibattito Torvalds-Tanenbaum sul design del kernel ". È ancora più divertente da leggere nel 2013, oltre 20 anni dopo che è trapelato. La parte più divertente è stata la firma di Linus in uno degli ultimi messaggi:
Linus "my first, and hopefully last flamefest" Torvalds
Ovviamente, ciò non si è avverato non più della previsione di Tanenbaum secondo cui x86 sarebbe presto obsoleto.
NB:
Quando dico "Minix", non intendo Minix 3. Inoltre, quando menziono The HURD, mi riferisco (principalmente) al microkernel Mach. Non è mia intenzione denigrare il recente lavoro di altri.