2008-09-24 21 views
32

Estoy planeando desarrollar un sistema operativo para la arquitectura x86.Desarrollo de un sistema operativo para la arquitectura x86

  • ¿Qué opciones de lenguajes de programación tengo?
  • ¿Qué tipos de compiladores hay disponibles, preferiblemente en un entorno Windows?
  • ¿Hay alguna buena fuente que me ayude a aprender más sobre el desarrollo del sistema operativo?
  • ¿Es mejor probar mi sistema operativo en una máquina virtual o en un hardware físico?

¿Alguna sugerencia?

+1

¿Cuál sería el mejor lenguaje a utilizar? en la arquitectura X86, el lenguaje de ensamblaje x86 y C es el más elegido. – AminM

+1

Votación para cerrar como demasiado amplia. Ver también: http://stackoverflow.com/questions/254149/how-do-you-write-a-basrating-system?rq=1u –

Respuesta

1

Si está haciendo un sistema operativo completo, necesitará usar una variedad de idiomas. Esperaría Asamblea, C y C++ por lo menos.

Usaría una máquina virtual para la mayoría de las pruebas.

+0

¿Por qué necesitaría tanto C++ como C? –

+0

@Daniel: Mientras C es ideal para alto rendimiento, programación de bajo nivel cerca del nivel de hardware, recomendaría C++ para todas las otras cosas de nivel superior. No estoy seguro de por qué no necesita/necesita C y C++. – GEOCHET

+3

@Rich: no necesita más de un idioma. Es posible que desee utilizar más de uno. No confundamos la "necesidad" con "queremos mucho por buenas razones". –

3

Es posible que desee buscar XINU. es un sistema operativo pequeño para x86 que no se usa para nada más que para ser diseccionado por los estudiantes.

-5

Si desea escribir un sistema operativo, necesita un par de personas. Un sistema operativo no puede escribir a una sola persona. Creo que es mejor trabajar en proyectos OS existentes

Ésta es sólo una lista corta de proyectos del sistema operativo. Cómo puede ver que hay un proyecto para cada idioma posible.

+1

Escribir un sistema operativo es un proyecto estándar para estudiantes universitarios CS aquí. Solo les lleva un semestre. –

+0

Un sistema operativo puede definitivamente ser escrito por una sola persona. Cuantas características tiene y cuán pulida puede ser puede ser relativamente limitada, pero definitivamente es posible. –

2

He hecho eso una vez para una 386SX, que estaba en una placa PCI. Una buena fuente sobre cómo iniciar una CPU X86 en modo protegido es el código fuente de Linux. Son solo unas pocas declaraciones de la asamblea. Después de eso puedes usar gcc para compilar tu código C. El resultado es código objeto en formato ELF. Escribí mi propio enlazador, para hacer un programa fuera del código objeto. Y sí, funcionó! Buena suerte.

5

El lenguaje y el compilador dependen completamente de lo que está intentando lograr. Sugeriría, sin embargo, que podría estar abordando el problema desde un nivel demasiado bajo.

Existen materiales sobre los fundamentos del sistema operativo. MIT has OpenCourseware on the subject. Lea Andrew Tannenbaum's Operating Systems series, y mire cosas como Minix.

Obtén una idea de lo que hay por ahí. Comienza a jugar con las cosas. Pedir prestado ideas, y ver a dónde van. Puedes reinventar la rueda si realmente quieres, pero aprenderás más construyendo sobre las obras de los demás.

+0

No estoy de acuerdo hasta cierto punto.Se aprende bastante al reinventar la rueda, suponiendo que el objetivo aquí es aprender y no hacer un producto. Escribir a mano su propio analizador para un lenguaje de programación bien conocido es definitivamente reinventar la rueda, pero todavía se usa comúnmente como un ejercicio de programación porque, al indagar, se aprende mucho sobre cómo funcionan los analizadores. Lo mismo aplica con los sistemas operativos. Es genial ver cómo lo hicieron los demás, pero solo después de que lo hayas probado tú mismo. –

3

Utilice ANSI C y comience con un emulador. Cuando transfiere el puerto a una máquina real, habrá algún código ensamblador. El cambio de contexto y el manejo de interrupciones (por ejemplo) es más fácil de escribir en el ensamblador.

Andy Tannenbaum ha escrito un buen libro sobre el sistema operativo. Existen muchos otros buenos.

¡Buena suerte!No hay nada como haber escrito tu propio sistema operativo, por pequeño que sea.

+1

Andy ... ¿Es tu amigo? – stdcall

3

Consulte también OSDev.org que tienen toda la información que necesita para comenzar.

41

Para mi último año de proyecto en collage desarrollé un pequeño sistema operativo x86 con un administrador de memoria virtual, un sistema de archivos virtual y una multitarea totalmente preventiva. Lo hice de código abierto y el código es muy comentado, echa un vistazo a su página de Source Forge en:

https://github.com/stephenfewer/NoNameOS

Desde mi experiencia puedo recomendar lo siguiente:

Usted se necesidad lenguaje ensamblador x86 para varias partes, esto es inevitable, pero se puede mantener al mínimo. Muy rápidamente obtendrá código C en ejecución, que es una opción probada para el desarrollo de sistemas operativos. Una vez que tenga algún tipo de administrador de memoria disponible, puede ir a C++ si lo desea (necesita algún tipo de administrador de memoria para cosas como nuevo y eliminar).

Sin importar el idioma que elijas, necesitarás el ensamblaje & C para llevar un sistema desde el arranque donde el BIOS te deja en cualquier forma utilizable.

En última instancia, el idioma principal que elija dependerá del tipo de sistema operativo que desee desarrollar.

Mi entorno de desarrollo era el puerto de Windows de las herramientas de desarrollo GNU DJGPP junto con el ensamblador NASM. Para mi IDE utilicé el Eclipse de IBM con el complemento CDT que proporciona un entorno de desarrollo C/C++ dentro de Eclipse.

Para probar, recomiendo BOCHS, un emulador de PC de fuente abierta x86. Te permite iniciar tu sistema operativo rápidamente, lo cual es ideal para probar y se puede integrar en eclipse para que puedas construir y ejecutar tu sistema operativo con solo apretar un botón. También recomendaría usar tanto VMWare como una PC física de vez en cuando ya que puedes detectar algunos errores sutiles de esa manera.

P.S. El desarrollo de SO es muy divertido, pero es muy intenso, el mío tomó la mejor parte de los 12 meses. Mi consejo es planificar bien y su diseño es la clave! disfrutar :)

+1

Recomendaría Qemu (no sé si funciona en Windows) como la máquina virtual principal, ya que es bastante más rápido que BOCHS. Para los errores más desagradables usualmente uso BOCHS ya que tiene grandes capacidades de depuración y se integra con gdb. –

+0

@QAZ, entiendo que esta es una publicación bastante tardía, pero ¿tiene un nuevo enlace para su proyecto? Este enlace está muerto. – AedonEtLIRA

+0

@QAZ, ¿podría proporcionar un nuevo enlace a su proyecto? – vjain27

5

Realmente no importa, qué idioma eliges. Si el idioma es Turing-completo, entonces puede escribir un sistema operativo en él.

Sin embargo, la expresividad del lenguaje hará que ciertos tipos de diseños sean muy fáciles o muy difíciles de implementar. Por ejemplo, la "vitalidad" y el dinamismo de los antiguos SO de Smalltalk dependen del hecho de que se implementen en Smalltalk. Usted podría hacer eso en C, también, pero probablemente sería tan difícil que ni siquiera lo pensaría. JavaScript o Ruby OTOH probablemente serían una buena opción.

Microsoft Research's Singularity es otro ejemplo. Simplemente no podría implementarse en otra cosa que no sea Sing #, Spec# y C# (o idiomas similares), porque gran parte de la arquitectura depende de la seguridad de tipo estático y la verificabilidad estática de esos idiomas.

Una cosa a tener en cuenta: el espacio de diseño para los sistemas operativos implementados en C está bastante explorado. Hay literalmente miles de ellos. En otros idiomas, sin embargo, ¡es posible que descubras algo que nadie ha descubierto antes!Hay solo una docena de SO escritos en Java, aproximadamente media docena en C#, algo del orden de dos sistemas operativos en Haskell, solo uno en Python y ninguno en Ruby o JavaScript.

¡Intente escribir un sistema operativo en Erlang o Io, y vea cómo eso influye en su forma de pensar acerca de los sistemas operativos!

+6

"Si el idioma es Turing-completo, entonces puede escribir un sistema operativo en él". Esto no es verdad. Java es Turing-completo, pero hay partes de un sistema operativo que no se pueden hacer en Java (por ejemplo, puertos de E/S). Ser Turing-completo * no * significa que puedes hacer todo con él. – Job

+1

¿cómo se puede arrancar PC con otro lenguaje que no sea ASM? – AminM

+1

@JesonPark: tampoco puede iniciar una PC con ASM. Solo puedes iniciarlo con código de máquina nativo. Entonces, lo haces de la misma manera que lo haces con ASM: traduces el programa del lenguaje al código máquina nativo. –

4

Hay un curso de SO ofrecido en la Universidad de Maryland que utiliza GeekOS. Este es un sistema operativo pequeño, extensamente comentado, diseñado con fines educativos que puede ejecutarse utilizando los emuladores Bochs o QEMU.

Para ver un ejemplo de cómo se utiliza en un curso, consulte una oferta anterior del curso en la clase webpage. Allí encontrará asignaciones en las que deberá agregar funcionalidades diferentes a GeekOS.

Es una excelente manera de familiarizarse con un sistema operativo pequeño y simple que se ejecuta en la arquitectura x86.

1

Sin lugar a dudas, que haría uso de Ada. Es el mejor lenguaje de programación de sistemas de propósito general que he encontrado, sin excepción. Un ejemplo, Ada es mucho mejor para especificar el diseño de bits de los objetos en un registro que C. Ada también admite la superposición de registros en ubicaciones de memoria específicas. C requiere que juegues con punteros para lograr el mismo efecto. Eso funciona, pero es más propenso a errores. Ada también tiene soporte de lenguaje para interrupciones.

Otro: Seguridad. Ada establece por defecto las asignaciones de matrices de comprobación encuadernadas, pero le permite desactivarlas cuando lo necesite. C "predeterminado" para ninguna verificación encuadernada en matrices, por lo que debe hacerlo usted mismo manualmente siempre que lo desee. El tiempo ha demostrado que esto es no el valor predeterminado correcto. Te olvidarás de uno donde sea necesario. Los exploits de desbordamiento de búfer son la falla de seguridad más común utilizada por los crackers. Tienen sitios web completos que explican cómo encontrarlos y usarlos.

En cuanto a aprender sobre cómo hacer esto, los dos libros que conozco son XINU (Unix al revés, nada que ver con Scientology) y Project Oberon. El primero fue utilizado en mi curso de postgrado en Sistemas Operativos, y el segundo fue escrito por Nikalus Wirth, creador de Pascal.

1

C ... muy probablemente los principales OS-es haber sido escrito en C/C++ o Objective-C (Apple)

Cuestiones relacionadas