sistemas sistema significa que operativos operativo entre diferencia cual arquitectura operating-system x86 osdev

operating system - significa - Desarrollar un sistema operativo para la arquitectura x86



que significa 64 bits (13)

Estoy planeando desarrollar 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?


Sin duda, usaría 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 este no es el 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 acerca de 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.


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


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

Hay materiales sobre los fundamentos del sistema operativo. MIT tiene OpenCourseware sobre el tema . Lea la serie de sistemas operativos de Andrew Tannenbaum y vea cosas como Minix .

Obtener 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.


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.


Lo hice una vez para un 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.


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.


Si quieres escribir un sistema operativo, entonces necesitas un par de personas. Un sistema operativo no puede escribir a una sola persona. Creo que es mejor trabajar en proyectos de SO existentes

Esta es solo una breve lista de proyectos de SO. Cómo puede ver que hay un proyecto para cada idioma posible.


Use 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.


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 usa en un curso, consulte una oferta anterior del curso en la página web de la clase. Allí encontrará asignaciones en las que deberá agregar funcionalidades diferentes a GeekOS.

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


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. Podrías hacer eso en C, también, pero probablemente sería tan difícil que ni siquiera lo pensarías. JavaScript o Ruby OTOH probablemente serían una buena opción.

La Singularidad de Microsoft Research es otro ejemplo. Simplemente no podría implementarse en otra cosa que no sea Sing #, Spec # y C # (o idiomas similares), ya que 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 sistemas operativos implementado en C está prácticamente explorado. Hay literalmente miles de ellos. ¡En otros idiomas, sin embargo, podrías descubrir algo que nadie ha descubierto antes! Hay aproximadamente una docena de sistemas operativos 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.


C muy probablemente ... todos los principales OS-es han sido escritos en C / C ++ o Objective-C (Apple)


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 convertí en código abierto y el código fue muy comentado, consulte su página de forge de origen en:

https://github.com/stephenfewer/NoNameOS

Desde mi experiencia, puedo recomendar lo siguiente:

Necesitará el lenguaje de ensamblaje 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 comprobada 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).

No importa qué idioma elijas, necesitarás ensamblar & C para traer 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 fue el puerto de Windows de las herramientas de desarrollo GNU DJGPP junto con el ensamblador NASM . Para mi IDE utilicé Eclipse de IBM con el complemento CDT, que proporciona un entorno de desarrollo C / C ++ dentro de Eclipse.

Para las pruebas, 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 utilizar VMWare y una PC física de vez en cuando, ya que puede detectar algunos errores sutiles de esa manera.

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