Qualcuno potrebbe spiegare con esempi la differenza tra monolitico e micro kernel? Anche altre classificazioni del kernel?
Qualcuno potrebbe spiegare con esempi la differenza tra monolitico e micro kernel? Anche altre classificazioni del kernel?
Risposte:
Il kernel monolitico è un singolo processo di grandi dimensioni eseguito interamente in un unico spazio di indirizzi. È un singolo file binario statico. Tutti i servizi del kernel esistono ed vengono eseguiti nello spazio degli indirizzi del kernel. Il kernel può richiamare le funzioni direttamente. Esempi di sistemi operativi basati su kernel monolitici: Unix, Linux.
Nei microkernel, il kernel è suddiviso in processi separati, noti come server. Alcuni dei server vengono eseguiti nello spazio del kernel e alcuni vengono eseguiti nello spazio utente. Tutti i server sono tenuti separati ed eseguiti in diversi spazi di indirizzi. I server invocano "servizi" gli uni dagli altri inviando messaggi tramite IPC (Interprocess Communication). Questa separazione ha il vantaggio che se un server si guasta, altri server possono ancora funzionare in modo efficiente. Esempi di sistemi operativi basati su microkernel: Mac OS X e Windows NT.
Il design del kernel monolitico è molto più antico dell'idea del microkernel, apparsa alla fine degli anni '80.
I kernel Unix e Linux sono monolitici, mentre QNX, L4 e Hurd sono microkernel. Mach era inizialmente un microkernel (non Mac OS X), ma successivamente convertito in un kernel ibrido. Minix (prima della versione 3) non era un microkernel puro perché i driver di dispositivo erano compilati come parte del kernel.
I kernel monolitici sono generalmente più veloci dei microkernel. Il primo microkernel Mach era del 50% più lento della maggior parte dei kernel monolitici, mentre quelli successivi come L4 erano solo il 2% o il 4% più lenti dei modelli monolitici.
I kernel monolitici sono di grandi dimensioni, mentre i microkernel sono di piccole dimensioni: di solito si adattano alla cache L1 del processore (microkernel di prima generazione).
Nei kernel monolitici, i driver di dispositivo risiedono nello spazio del kernel mentre nei microkernel i driver di dispositivo sono spazio utente.
Poiché i driver di dispositivo dei kernel monolitici risiedono nello spazio del kernel, i kernel monolitici sono meno sicuri dei microkernel e gli errori (eccezioni) nei driver possono causare arresti anomali (visualizzati come BSOD in Windows). I microkernel sono più sicuri dei kernel monolitici, quindi più spesso utilizzati nei dispositivi militari.
I kernel monolitici utilizzano segnali e socket per implementare la comunicazione tra processi (IPC), i microkernel utilizzano code di messaggi. I microkernel di prima generazione non implementavano bene l'IPC ed erano lenti nei cambi di contesto: questo è ciò che ha causato le loro scarse prestazioni.
Aggiungere una nuova funzionalità a un sistema monolitico significa ricompilare l'intero kernel o il modulo del kernel corrispondente (per i kernel monolitici modulari), mentre con i microkernel è possibile aggiungere nuove funzionalità o patch senza ricompilare.
Kernel monolitico
Tutte le parti di un kernel come Scheduler, File System, Memory Management, Networking Stacks, Device Drivers, ecc. Sono mantenute in una unità all'interno del kernel in Monolithic Kernel
vantaggi
• Elaborazione più rapida
svantaggi
• Crash insicuro • Porting inflessibilità • Esplosione delle dimensioni del kernel
Esempi • MS-DOS, Unix, Linux
Micro kernel
Solo le parti molto importanti come IPC (Inter process Communication), scheduler di base, gestione della memoria di base, primitive di I / O di base, ecc., Vengono inserite nel kernel. La comunicazione avviene tramite passaggio di messaggi. Altri vengono mantenuti come processi server nello spazio utente
vantaggi
• Resistente agli urti, portatile, di dimensioni ridotte
svantaggi
• Elaborazione più lenta a causa del passaggio di messaggi aggiuntivo
Esempi • Windows NT
1.Kernel monolitico (monolitico puro):all
Tutti i servizi del kernel dal singolo componente
(-) aggiunta / rimozione non è possibile, meno / Zero flessibile
(+) La comunicazione tra componenti è migliore
ad esempio: - Unix tradizionale
2.Micro Kernel:few
pochi servizi (gestione della memoria, gestione della CPU, IPC ecc.) dal kernel principale, altri servizi (gestione dei file, gestione I / O, ecc.) da diversi livelli / componenti
Approccio suddiviso [Alcuni servizi sono in modalità privilegiata (kernel) e alcuni sono in modalità Normale (utente)]
(+) flessibile per modifiche / aumenti
(-) spese di comunicazione
ad esempio: - QNX ecc.
3. kernel modulare (monolitico modulare):most
Combinazione di kernel micro e monolitico
Raccolta di moduli - i moduli possono essere -> Statico + Dinamico
I driver si presentano sotto forma di moduli
ad esempio: - Linux Modern OS
Nello spettro dei modelli di kernel i due punti estremi sono i kernel monolitici e i microkernel.
Il kernel Linux (classico), ad esempio, è un kernel monolitico (e così anche tutti i sistemi operativi commerciali fino ad oggi - sebbene potrebbero affermare il contrario);
In quanto il suo codice è un singolo file C che dà origine a un unico processo che implementa tutti i servizi di cui sopra.
Per esemplificare l'incapsulamento del kernel Linux, osserviamo che il kernel Linux non ha nemmeno accesso a nessuna delle librerie C standard. Infatti il kernel Linux non può usare rudimentali funzioni di libreria C come printf. Invece implementa la propria funzione di stampa (chiamata stampe).
Questa isolamento del kernel Linux e l'auto-contenimento forniscono al kernel Linux il suo principale vantaggio: il kernel risiede in un unico spazio di indirizzi1 che consente a tutte le funzionalità di comunicare nel modo più veloce possibile senza ricorrere a nessun tipo di passaggio di messaggi. In particolare, un kernel monolitico implementa tutti i driver di dispositivo del sistema.
Questo però è il principale svantaggio di un kernel monolitico: l'introduzione di qualsiasi nuovo hardware non supportato richiede una riscrittura del kernel (nelle parti pertinenti), la sua ricompilazione e la reinstallazione dell'intero sistema operativo.
Ancora più importante, se un driver di dispositivo va in crash, l'intero kernel ne risente. Questo approccio non modulare alle aggiunte hardware e ai crash hardware è l'argomento principale per supportare l'altro approccio di progettazione estremo per i kernel. Un microkernel è in un certo senso un kernel minimalista che ospita solo i servizi di base del sistema operativo (come la gestione dei processi e la gestione del file system). In un microkernel i driver di dispositivo si trovano al di fuori del kernel, consentendo l'aggiunta e la rimozione di driver di dispositivo mentre il sistema operativo è in esecuzione e non richiedono alternanze del kernel.
Il kernel monolitico ha tutti i servizi del kernel insieme alla parte centrale del kernel, quindi sono pesanti e hanno un impatto negativo sulla velocità e sulle prestazioni. D'altra parte il micro kernel è leggero e causa un aumento delle prestazioni e della velocità.
Ho risposto alla stessa domanda sul sito wordpress. Per la differenza tra monolitico, microkernel ed exokernel in forma tabulare, puoi visitare qui