it-swarm-es.com

¿Crees que los sistemas operativos administrados son una buena idea?

Los sistemas operativos administrados como Microsoft Singularity y JNode son un concepto bastante interesante. Esencialmente, el sistema operativo se inicia con código escrito en un lenguaje de bajo nivel (C/C++/Assembly), que esencialmente implementa una máquina virtual. El resto del sistema operativo (y todas las aplicaciones del área de usuario) se ejecutan en la máquina virtual. Hay algunas cosas buenas sobre esto. Por ejemplo, de repente hace obsoletos los punteros arbitrarios. Y si está bien escrito, se deshace de una tonelada de basura heredada que tienen actualmente la mayoría de los sistemas operativos modernos.

Sin embargo, como desventaja, estás mucho más lejos del hardware y, como desarrollador, pierdes la capacidad de bajar a un nivel más bajo de abstracción y ensuciarte las manos.

Cual es tu opinión sobre esto?

15
Chinmay Kanchi

Creo que este es otro caso en el que "depende".

Si está escribiendo aplicaciones como navegadores web, procesadores de texto, etc., donde el rendimiento ultrarrápido no es necesariamente un problema, entonces este enfoque tiene sus ventajas. Al utilizar este enfoque, puede ofrecer a sus clientes una experiencia más segura y controlada. No solo está limitando el daño que puede causar el malware, sino que también está ejecutando en un entorno más consistente.

Es como la diferencia entre los juegos de consola y los de PC. Los primeros saben exactamente con qué hardware necesitan trabajar, por lo que pueden hacer uso de ese conocimiento, mientras que los segundos deben poder hacer frente a una variedad más amplia de tarjetas gráficas, tarjetas de sonido, velocidades de disco duro, etc.

Sin embargo, habrá aplicaciones (¡como juegos!) Que requieran un acceso de bajo nivel y aún deberán ejecutarse "de forma nativa".

Al igual que los idiomas administrados, deberá utilizar la herramienta adecuada para el trabajo.

8
ChrisF

Creo que los beneficios de un sistema operativo completamente administrado son enormes y eso realmente podría ser el futuro, pero requerirá muchos años.

Un buen sistema operativo administrado le proporcionará todo el punto de entrada administrado que necesita para hacer todo lo que necesite de bajo nivel, independientemente de que esté administrado: detectar interrupciones y realizar E/S con dispositivos. C # también permite código inseguro (que trata con punteros) pero se permitirá sólo en los "controladores de dispositivo" (que será sólo otro tipo de proceso aislado por software).

Los beneficios en seguridad, uniformidad, portabilidad y especialmente confiabilidad superarán sin duda cualquier inconveniente de rendimiento. Entonces, un sistema completamente administrado es sorprendentemente rápido, ya que ya no es necesario realizar un cambio de contexto.

3
Wizard79

En general, creo que son una buena idea, pero dado que no hay muchos de ellos o casi completamente horneados, es muy difícil decir cómo se desempeñarían en el mundo real. Ojalá MS hubiera actualizado el proyecto Singularity para que pudiéramos ver a dónde iba, pero supongo que parte de eso se está trabajando en alguna versión de Windows.

3
Walter

Los sistemas operativos administrados son probablemente de alguna manera como micronúcleos: 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 nivel superior escrito en lenguaje administrado

Dependiendo del costo de entrar/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. .) y necesita incluso una optimización del ensamblador para funcionar con la velocidad suficiente. Además, la protección MMU implementada en lenguaje HL probablemente no será tan rápida como la del hardware, incluso si puede estar mucho más ajustada .

Además, el lenguaje HL no domina 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 administració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 el principio de compilar una vez ejecutado en todas partes, los lenguajes HL (incluso con GC & co.) Sería un mejor candidato.

Por ejemplo, de repente hace obsoletos los punteros arbitrarios.

El sistema operativo es inherentemente de bajo nivel. Pasas al hardware no solo 'puntero arbitrario' sino probablemente una dirección física en lugar de una virtual. Algunos DMA solo pueden manejar los primeros 16MiB de memoria. Si bien este sistema operativo puede simplificarse mucho, no eliminará las direcciones).

Y si está bien escrito, se deshace de una tonelada de basura heredada que tienen actualmente la mayoría de los sistemas operativos modernos.

  1. Hay una gran cantidad de hardware heredado. Mucho más que en software. Primero comienza en modo real, luego habilita la puerta A20 (no pregunte) salte al modo protegido y luego al modo largo.
  2. La compatibilidad API/ABI es buena. Digamos que han escrito tal sistema operativo, ¿qué ejecutarías en él? Firefox - no (C y C++ usando WinAPI). Java - probablemente necesitaba ser portado o tuvo algunos problemas menores a través de ikvm - a menos que sucediera usar JNI. Supongo que MSSQL (y seguramente Oracle, MySQL, Postgresql ...) no es escrito en lenguaje administrado por lo que no sería adecuado para el servidor.
  3. Incluso la compatibilidad de errores es "buena". AFAIK MS pasa mucho tiempo simplemente probando y verificando si algún software no está usando API de manera inteligente (lectura incorrecta). Como el problema de usar un puntero después de free cuando Windows realmente comenzó a liberar memoria.

Supongo que ganará popularidad casi al mismo tiempo que los microkernels.

2
Maciej Piechotka

Personalmente, creo que la idea de un sistema operativo administrado es un poco como el comunismo: bueno en teoría, pero poco práctico de implementar.

El problema es que no veo ninguna forma de hacer funcionar el sistema operativo administrado sin reescribir completamente el sistema operativo desde cero (y espero que alguien pueda demostrar que estoy equivocado en esta parte). Además, ¿cómo hace que décadas de código no administrado encajen en un sistema operativo administrado?

Los kernels de los sistemas operativos más populares se han probado en batalla y han madurado en el transcurso de un par de décadas. No los reescribe simplemente por capricho. Sin mencionar que la historia está llena de ejemplos de diseños de procesadores y arquitecturas de kernel que fueron innegablemente mejores pero que nunca pudieron convencer a nadie de que valía la pena el costo de cambiarlos.

Por último, ¿cómo es que una empresa como Microsoft o Apple venderá un sistema operativo administrado a los clientes? ¿Le importará al usuario medio si su sistema operativo está administrado o no?

Lo anterior, espero estar equivocado y que los sistemas operativos administrados sean una realidad. Pero soy escéptico. Si alguna vez lo vemos, probablemente no será hasta dentro de una o dos décadas.

2
Jason Baker

El código administrado es solo una extrapolación de lo que la protección de memoria virtual le compra hoy, es decir, la capacidad de la computadora para negar el acceso a los recursos.

IBM ya hace esto en sus sistemas mainframe (simplemente lo llaman de otra manera), por lo que, en mi opinión, es solo una cuestión de tiempo antes de que esto suceda en los sistemas disponibles para el público en general.

¿Le importaría si una computadora portátil de Google (que ejecuta Chrome y básicamente nada más) se ejecuta en código administrado o no?

2
user1249

Sin embargo, como desventaja, estás mucho más lejos del hardware y, como desarrollador, pierdes la capacidad de bajar a un nivel más bajo de abstracción y ensuciarte las manos.

Esto no es realmente cierto. En JNode, por ejemplo, hay una clase Unsafe (y otras) que le permiten acceder a ubicaciones de memoria y así sucesivamente. También hay algunas clases/métodos "mágicos" que el compilador JIT traduce en instrucciones privilegiadas. El acceso a estas clases/métodos está (o estará) restringido por el administrador de seguridad, el compilador JIT, etc. Pero si está escribiendo código que se ejecuta en el nivel del sistema operativo, estas funciones están disponibles para usted.

La advertencia es (por supuesto) que el uso incorrecto de Unsafe y las clases relacionadas puede llevar a que el sistema operativo se bloquee inmediatamente o en el futuro.

1
Stephen C

Dudo de su utilidad para las computadoras de escritorio. Pero el tiempo puede probar que estoy equivocado en este punto.

Pero un potencial interesante en mi opinión es como sistema operativo de servidor, más específicamente como sistema operativo invitado en un entorno virtualizado. Nunca me sentó bien instalar una instalación completa de servidor de Windows en un entorno de servidor virtual, sabiendo cuántos servicios innecesarios ejecuta, incluida la GUI completa.

Ahora instalar algo como Singularity en un servidor virtual para alojar aplicaciones ASP.NET, tiene más sentido. Suponiendo que puedan mantenerlo como un sistema operativo ligero.

0
Pete