back

Altro aspetto di grande importanza è rappresentato dalla stretta condivisione delle risorse: qualora sia presente codice viziato da errori di programmazione, essendo utilizzato e utilizzando lui stesso risorse condivise, sarà in grado di propagare errori all'interno dell'architettura, portando con elevata probabilità al blocco dell'intero sistema. È importante che il codice rilasciato sia altamente stabile e privo di errori, poichè è sufficiente un piccolo difetto all'interno di un modulo per generare un Kernel panic compromettendo il funzionamento del calcolatore.

In ultima istanza occorre osservare come un Sistema Operativo con una simile tecnologia passi molto tempo in modalità Kernel; ogni aspetto della macchina viene gestito all'interno dello spazio privilegiato (con il Bit di modo della CPU a "0"), durante queste routine il sistema non è in grado di ricevere e gestire le interrupt. Si ottiene perciò un elevata latenza nella risposta agli stimoli esterni rendendo il Kernel Monolitico poco indicato per le soluzioni Real Time.

Microkernels

Jochen Liedtke nel principio di minimalità asserisce che un concetto è tollerabile all'interno di un Microkernel, solamente se la sua esclusione dallo stesso, impedisce l'implementazione delle funzionalità di sistema richieste.
Altro importante principio alla base del design di un Microkernel consiste nella separazione delle politiche dai meccanismi. Nelle Scienze Informatiche le politiche (o criteri) rappresentano le scelte che un programmatore intraprende, mentre i meccanismi specificano come tali scelte vanno realizzate; la separarazione dei due aspetti permette di ottenere un sistema maggiormente flessibile.
Per fare un esempio si immagini una ipotetica gestione della temporizzazione dei processi all'interno di una CPU, ovvero la quantità della risorsa "tempo processore" che viene assegnata a ciascuna unità di lavoro; il meccanismo è la realizzazione dello strumento vero e proprio (lo scheduler), mentre il criterio è la quantità di tempo da assegnare; l'obiettivo è quello di permettere la scelta della risorsa (spesso definita time slice, porzione di tempo) arbitrariamente, indipendentemente dal meccanismo di assegnazione implementato.

Un Microkernel si limita a fornire un'infrastruttura minimale con un'astrazione dell'hardware piuttosto semplice.
Generalmente i servizi offerti sono la gestione della memoria, il supporto alla multiprogrammazione e la comunicazione interprocesso (IPC). L'insieme di servizi più avanzati viene suddiviso in unità distinte e autonome definite server.

I server sono progettati per essere eseguiti all'interno dello userspace, lo spazio riservato al codice non privilegiato, possiedono aree di memoria strettamente dedicate e non possono intervenire al di fuori di esse.
Solitamente, a differenza dei programmi applicativi, hanno la possibilità di accedere ad alcuni spazi di indirizzamento fisico della memoria, questo per permettere ad alcuni tipi di server (ad esempio i device driver) di poter scrivere all'interno di eventuali buffer e registri specifici. Al di fuori di questa peculiarità (sempre concessa dal Kernel) ciascun server viene eseguito esattamente come un'applicazione a livello utente.

back