I sistemi operativi gestiti sono probabilmente in qualche modo simili ai microkernels: sacrifichi le prestazioni in nome della sicurezza.
Potrebbero esserci problemi simili in quanto richiede la suddivisione del codice in 2 parti:
- Kernel di basso livello scritto in C / assemblatore
- Kernel di livello superiore scritto in linguaggio gestito
A seconda del costo per entrare / uscire dal linguaggio HL in modo sicuro, ciò potrebbe comportare problemi simili ai microkernels - forse un po 'più veloce (lasciare HL è più veloce del cambio di contesto completo, ma IIRC per esempio JNI è piuttosto costoso).
Anche l'applicazione utente avrebbe probabilmente bisogno di contesti separati poiché molte app sono scritte su altre piattaforme (ad esempio C, Java o .Net). Negli stessi casi, le applicazioni possono essere associate alla CPU (compilatori, convertitori di musica, ecc.) E richiedono anche l'ottimizzazione dell'assemblatore per funzionare con una velocità sufficiente. Inoltre - la protezione MMU implementata in linguaggio HL probabilmente non sarà veloce come quella hardware anche se potrebbe essere molto più perfezionata.
Anche il linguaggio HL non è competente nelle operazioni di basso livello. Mentre il software di solito è progettato con "buone" pratiche di codifica, i driver non sono necessari. Non credo che proteggeranno almeno da alcuni errori, poiché i kernel richiedono a volte memoria per la gestione manuale.
Infine, non penso che un tale sistema operativo richiederebbe una VM completa. Poiché il sistema operativo non può essere costruito con i linguaggi HL di compilazione una volta eseguiti ovunque ovunque (anche con GC & co.) Sarebbe il candidato migliore.
Ad esempio, improvvisamente si rendono obsoleti i puntatori arbitrari.
Il sistema operativo è intrinsecamente di basso livello. Si passa all'hardware non solo un "puntatore arbitrario" ma probabilmente un indirizzo fisico piuttosto che uno virtuale. Alcuni DMA possono gestire solo i primi 16 MiB di memoria. Sebbene tale sistema operativo possa semplificare molto, non eliminerà gli indirizzi.
E se ben scritto, ti sbarazzi di un sacco di roba legacy che la maggior parte dei sistemi operativi moderni ha attualmente.
- Ci sono molti hardware legacy. Molto di più quindi nel software. Innanzitutto si avvia in modalità reale, quindi si abilita il gate A20 (non chiedere) per passare alla modalità protetta, quindi alla modalità lunga.
- La compatibilità API / ABI è buona. Supponiamo che abbiano scritto un tale sistema operativo: cosa faresti con esso? Firefox - no (C e C ++ usando WinAPI). Java - probabilmente doveva essere trasferito o presentava alcuni problemi minori tramite ikvm - a meno che non fosse felice di usare JNI. Immagino che MSSQL (e sicuramente Oracle, MySQL, Postgresql ...) non sia scritto in un linguaggio gestito, quindi non sarebbe adatto al server.
- Anche la compatibilità dei bug è "buona". AFAIK MS impiega molto tempo a testare e verificare se alcuni software non utilizzano l'API in modo intelligente (lettura errata). Come il problema dell'utilizzo del puntatore dopo
free
che Windows ha effettivamente iniziato a liberare memoria.
Immagino che guadagnerà popolarità nello stesso periodo dei microkernels.