2008-10-10 7 views
13

Esta es una cuestión teórica bastante-mucho, pero ..¿Cuánto de un sistema operativo podría estar escrito en, por ejemplo, Python?

¿Qué parte de un sistema operativo podría ser escrito en un lenguaje como Python, Ruby, Perl, o Lisp, Haskell, etc?

Parece que muchas cosas como init.d podrían hacerse trivialmente en un lenguaje de scripting. Uno de los firewall-device-OS (m0n0wall) usa PHP para su configuración del sistema (incluso en el arranque). Y uno podría argumentar que "emacs es un sistema operativo, escrito principalmente en Lisp" ..

Por supuesto, hay bits que deberían ser ensamblados/C, pero ¿cuánto podría ser regular ?py/rb/.pl/.el/.hk archivos ...? Puede que no tenga el mejor rendimiento, pero sería, de lejos, el sistema operativo más fácil de modificar ...

+1

El SO del dispositivo de firewall que menciona es monowall (http://m0n0.ch/wall/) del cual pfSense es un descendiente. – SingleNegationElimination

+4

¿Por qué no constructivo? La pregunta está bien definida y puede ser respondida definitivamente. –

+0

@Mechanicalsnail Levanté un indicador de moderador personalizado para que se vuelva a abrir. – cybermonkey

Respuesta

21

Técnicamente, cualquiera de ellos podría ser, si escribe un compilador para hacerlo. Los sistemas operativos se han hecho en Java (JNode), .NET (MOSA, Singularity, SharpOS, Cosmos), Haskell (HOUSE), Python (Unununium), etc.

Editar: Veo a mucha gente hablando sobre el mismo el nivel más bajo es un área donde esto no podría hacerse; esto no es verdad

No hay ninguna razón para que el compilador del lenguaje X no se pueda extender para manejar cualquier operación de bajo nivel y exponerlo al idioma. Toda la funcionalidad se puede lograr desde cualquier idioma, es simplemente una cuestión de elegir la herramienta adecuada para el trabajo. A veces esto es Python, a veces esto es C, a veces esto es ensamblaje.

mirada a proyectos como Cosmos y sharpos para ver un sistema operativo de alto nivel pura Done Right (TM).

+0

Hahah, gracias por la captura. Es mucho más allá de mi hora de acostarse;) –

+0

El microkernel de JNode está escrito en ensamblador, creo, ¿no sería necesario para un lenguaje que requiere una VM? En el nivel más bajo, cualquier sistema operativo utilizable contiene al menos un pequeño ensamblador. C minimiza el ensamblador ya que permite operaciones de bajo nivel de forma nativa. – tloach

+0

Gracias por la corrección en JNode, pero no, no hay un requisito fundamental para que su sistema operativo tenga cualquier ensamblaje. Extiende el compilador para que emita el código de máquina correcto para realizar el trabajo. Puede construir un subconjunto de la funcionalidad de su plataforma en el idioma de su plataforma y luego iniciar el proceso. –

2

Python no proporciona construcciones para hablar directamente con el hardware, como punteros crudos para E/S mapeadas en memoria y muchas otras construcciones proporcionadas por C/ASM. Sin embargo, hay pruebas de que la mayoría de todo en un SO se puede escribir en un lenguaje más abstracto; el Singularity OS de Microsoft está escrito casi exclusivamente en variantes de C#. Hay una cantidad extremadamente pequeña de C/ASM para hacer interruptores y demás, pero todo lo demás, incluido lo que la mayoría de nosotros consideramos "kernel", se puede hacer en prácticamente cualquier lenguaje de Turing completo.

Cabe señalar que la elección de singularidad para poner en práctica estas construcciones de bajo nivel en C/ASM no debe interpretarse como una limitación fundamental de la sintaxis u otros aspectos de lenguajes de alto nivel. Uno ciertamente podría hacer una variante de Python que emitiera y tratara apropiadamente con el código ensamblador necesario.

+0

No hay ninguna razón para que incluso los controladores de interrupción y tales tengan que ser C/ASM. Por ejemplo, Cosmos y SharpOS manejan cada bit de esto a través de C# (y su forma personalizada de emitir asm en línea, X # (Cosmos)). Solo necesito hacer que el compilador emita este código. –

+1

Argumentaría que Cosmos y SharpOS no hacen nada más que envolver ASM en una sintaxis más portátil y prolija (pero segura en cuanto a tipos). El código aquí (http://www.gocosmos.org/Blog/20080428.en.aspx) se parece mucho al ensamblaje. Incluso si pudieras escribir esto en Python, no sería * en absoluto pitónico en ese punto. –

+0

Creo que Cosmos no ha ido lo suficientemente lejos con la abstracción. El compilador realmente debería manejar estos detalles de bajo nivel y exponerlo de una manera lógica al alto nivel. Dicho esto, hay un largo camino por recorrer para los kernels gestionados. –

2

Más allá del núcleo (y con esto, quiero decir kernel, estilo microkernel), y algo para compilar los tiempos de ejecución de cada uno de dichos lenguajes dinámicos, casi cualquier cosa y todo lo PODRÍAN ser si estuviera construyendo su propio sistema operativo . Simplemente no es práctico. Diablos, init.d está escrito principalmente en sh por lo que yo sé. Pero sh, aunque no es potente, es MUY ligero y, hasta donde yo sé, eficiente en lo que hace. lenguajes de alto nivel como Python, Perl, etc, podría manejarlo bien, pero sería mucho más lento, y tomarían mucho más memoria para casos de intérpretes.

Es posible, simplemente no es práctico.

1

Es difícil imaginar núcleos/controladores de dispositivo, etc. escritos en (por ejemplo, Python) - la gestión de la memoria sería un poco un dolor de cabeza.

Por otro lado, casi todo el código de espacio de usuario podría ser. En Linux, no hay ningún requisito de que "init" sea un código binario de máquina-código nativo, puede ser un script de Python o algo así, no hay problema.

3

El único resultado interesante de Singularity es que ya no necesita una MMU (unidad de gestión de memoria) en la CPU, ya que todos los códigos de usuario se "administran". Pude ver esto beneficioso en escenarios integrados, usando Linux no MMU y además de las aplicaciones con guiones.

1

Siempre que el lenguaje de programación tenga la capacidad de manipular archivos binarios, puede escribir un sistema operativo completo en el idioma en particular. Esto no quiere decir que sea fácil o práctico. Simplemente tiene sentido que, si su idioma elegido puede manipular binarios, puede ir tan bajo como lo necesite.

1

Yo diría que esto no es posible. Las respuestas a esta pregunta siguen refiriéndose a los cambios en el idioma o al uso del lenguaje para generar código de bajo nivel (kernel). Esto es solo usar un idioma para escribir otro idioma. Si bien estoy de acuerdo en que ambos le permitirán escribir un sistema operativo, entonces argumentaría que ahora no es el mismo idioma. Por lo tanto, un sistema operativo podría estar escrito en muchos idiomas diferentes, pero no todos los idiomas (sin cambio o idioma por pase) se pueden usar para escribir un sistema operativo.

La respuesta final a la pregunta original es casi todo, pero no todos. La única aceptación son los idiomas que pueden acceder a las instrucciones de nivel de CPU.

+1

Te das cuenta de que cada idioma se traduce a otro, ¿verdad? C se compila para ensamblar, que luego se ensambla en código de máquina. Esto es como decir que escribir un kernel en C realmente lo está escribiendo en ensamblador ... –

+0

sí, pero C# está compilado en IL, no en código nativo (a menos que use la función de compilación estática de Mono). En rigor, usar C# para crear un sistema operativo no es posible. Usar una versión modificada del compilador C# que genera asm es. Es discutible si eso todavía sería C#. – gbjbaanb

1

"cleese" - un sistema operativo escrito casi en su totalidad en Python

+1

Recibo un código 404 en el enlace –

+0

Vaya, fijo - ¡gracias! – dbr

7

me sorprende que nadie ha mencionado el hardware de Java. Debería ser una inspiración para nosotros fomentar la evolución del hardware mediante la creación de un procesador de nivel aún más alto.

Hay otro proyecto que acabo de encontrar llamado "Pycorn".

Si hubiera un procesador de bytecode de Python, sería factible hacer un sistema operativo rápido en 100% Python. El procesador podría implementar todo el bytecode CPython, o cualquier cosa que sea compatible con el lenguaje Python (¡pero no con los módulos C!). El procesador tendría que manejar conteo de referencias, clases y objetos. El hashing nativo para dicts sería muy útil, todas las manipulaciones complejas de estructura de datos que Python actualmente necesita en el software deberían hacerse exclusivamente en hardware. No habría ningún concepto de punteros, que veo como una motivación principal para construir tal procesador, ya que sería imposible destruir la pila.

¡Todo sería objeto! El kernel mismo llamaría métodos al objeto de memoria, aunque no necesitaría tocarlo mucho ya que el hardware manejará la asignación y la recolección de basura de todos modos. Los manejadores de interrupciones simplemente pueden establecerse en métodos de pitón. MSR, cachés, registros de depuración y puertos de E/S son objetos.

Hay una discusión interesante sobre la implementación de Python en un FPGA here.

En otra nota, (perteneciente a un Python O/S en un procesador que no es Python) a las personas que afirman que no se puede hacer ensamblado en línea Pythonic, es bastante simple simplemente emitir ensamblaje desde una abstracción, ej:

asm = MetaASM() 
asm.r1 = 1234 
asm.r2 = r1 + 5 
asm.io.out(r1) 

usted podría cambiar de reunión específica para las necesidades de rendimiento de la arquitectura o arquitectura específica operaciones/registros cuando sea necesario:

asm = ASM("IA-32") 
asm.xor(asm.eax, asm.eax) 
asm.cr0 = asm.eax 
asm.invtlb 
asm.fs.0x0= asm.eax 
asm.al = 123 
asm.dword.ptr.eax = 1234 # mov dword ptr [eax], 1234 
asm.push(asm.eax) 

CorePy llega a los intereses sobre este tema.

+1

Pensándolo bien, probablemente deberíamos apegarnos a los procesadores Java, ya que el código Java es mucho más determinista que Python, y por lo tanto siempre será mucho más barato para velocidades más rápidas. En cualquier caso, los lenguajes que hacen que las cosas no sean seguras al acceder a la memoria fuera de los límites tienen que irse. –

+0

@Quonux La pregunta simplemente pregunta si un sistema operativo podría estar escrito en un lenguaje de alto nivel, su comentario no es realmente constructivo aquí. – cybermonkey

Cuestiones relacionadas