Los sistemas operativos administrados probablemente son de alguna manera como microkernels: sacrifica el rendimiento en nombre de la seguridad.
Podría haber problemas similares, ya que requiere dividir el código en 2 partes:
- Kernel de bajo nivel escrito en C / ensamblador
- Kernel de alto nivel escrito en lenguaje administrado
Dependiendo del costo de ingresar / salir de forma segura del lenguaje HL, puede imponer problemas similares a los microkernels, posiblemente un poco más rápido (dejar HL es más rápido que el cambio de contexto completo, pero IIRC, por ejemplo, JNI es bastante costoso).
La aplicación de usuario probablemente también necesitaría contextos separados, ya que muchas aplicaciones están escritas en otras plataformas (por ejemplo, C, Java o .Net). En los mismos casos, las aplicaciones pueden estar vinculadas a la CPU (compiladores, convertidores de música, etc.) e incluso necesitan una optimización del ensamblador para funcionar con suficiente velocidad. Además, la protección MMU implementada en el lenguaje HL probablemente no será tan rápida como la del hardware, incluso si se ajusta mucho más.
Además, el lenguaje HL no es competente en las operaciones de bajo nivel. Si bien el software generalmente está diseñado con "buenas" prácticas de codificación, los controladores no son necesarios. No creo que protejan contra al menos algunos errores, ya que los núcleos a veces requieren memoria de gestión manual.
Finalmente, no creo que dicho sistema operativo requiera una máquina virtual completa. Dado que el sistema operativo no se puede construir con los principales lenguajes HL de compilación una vez que se ejecutan en todas partes (incluso con GC & co.) Sería un mejor candidato.
Por ejemplo, de repente haces obsoletos los punteros arbitrarios.
El sistema operativo es inherentemente de bajo nivel. Usted pasa al hardware no solo 'puntero arbitrario' sino probablemente una dirección física en lugar de una virtual. Algunos DMA pueden manejar solo los primeros 16MiB de memoria. Si bien dicho sistema operativo puede simplificar mucho, no eliminará las direcciones.
Y si está bien escrito, se deshace de una tonelada de legado que actualmente tienen la mayoría de los sistemas operativos modernos.
- Hay mucho hardware heredado. Mucho más que en software. Primero comienza en modo real, luego habilita la puerta A20 (no preguntar) salta al modo protegido y luego al modo largo.
- La compatibilidad API / ABI es buena. Digamos que han escrito ese sistema operativo, ¿qué ejecutarías en él? Firefox - no (C y C ++ usando WinAPI). Java, probablemente necesitaba ser portado o tenía algunos problemas menores a través de ikvm, a menos que utilizara JNI. Supongo que MSSQL (y con seguridad Oracle, MySQL, Postgresql ...) no está escrito en lenguaje administrado, por lo que no sería apto para el servidor.
- Incluso la compatibilidad de errores es "buena". AFAIK MS pasa mucho tiempo simplemente probando y verificando si algún software no está utilizando API de manera inteligente (lectura incorrecta). Al igual que el problema de usar el puntero
free
cuando Windows realmente comenzó a liberar memoria.
Supongo que ganará popularidad al mismo tiempo que los microkernels.