pounce ejercito demanda consulting cfe cdmx calzada apestan assembly operating-system x86 x86-64 osdev

assembly - ejercito - Cómo crear su propio sistema operativo x86 para computadoras PC modernas



pounce consulting calzada del ejercito (9)

Me gustaría crear un nuevo sistema operativo para computadoras PC x86. Me gustaría que fuera de 64 bits, pero posiblemente también de 32 bits.

Tengo este tipo de preguntas:

¿En qué tipo de cosas empiezas a trabajar primero? Saber por dónde empezar a escribir tu propio sistema operativo me parece un tema complicado, por lo que estoy interesado en tu opinión.

En general, cómo hacer tu propio sistema operativo de 32 bits / 64 bits, o buenos recursos que mencionan información útil sobre cómo escribir tu propio sistema operativo para computadoras x86. No me importa cómo son las fuentes antiguas, siempre y cuando sigan siendo relevantes y útiles para lo que estoy haciendo.

Sé que querré que tenga controladores kernel que accedan directamente al hardware periférico. ¿Dónde debo buscar consejos y documentación para programar y comprender la interfaz del hardware periférico con el que se comunicará el sistema operativo? Tendré que entender cómo el sistema operativo recibirá información e interactuará con teclados, ratones, monitores de computadora, discos duros, USB, etc. Esta es probablemente la zona que menos conozco.

Tengo los manuales del conjunto de instrucciones de Intel y cada vez estoy más familiarizado con la programación de ensamblaje, así que el lado de la CPU es lo que más sé.

En este punto, creo que me gustaría implementar las llamadas al sistema Linux dentro de mi sistema operativo para que los programas que se ejecutan en Linux puedan ejecutarse en mi sistema operativo. Quiero que mi sistema operativo use el formato binario ELF. Me pregunto qué obstáculos tengo que superar para lograr esta compatibilidad con Linux. ¿Son las principales cosas que implementan las llamadas al sistema que proporciona Linux, y usan el formato ELF? ¿Qué más?

También me interesan los pensamientos de las personas acerca de por qué podría no ser una buena idea crear su propio sistema operativo, y por qué es una buena idea crear su propio sistema operativo.

Gracias por cualquier entrada.


Comience con un gestor de arranque, obtenga información sobre cómo obtener un mapa de memoria, escanear el bus PCI, inicializar varios chips, como el APIC, y cómo pasar al modo protegido.

Una vez que tenga los inicios de un kernel cargado, intente escribir rutinas a las cuales saldrá a la pantalla, lea desde el teclado, obtenga un depurador simple en marcha, seguido por un administrador de memoria física y luego un administrador de memoria virtual. Los últimos dos no pueden posponerse por mucho tiempo, porque cada programa, incluido el sistema operativo, necesita una manera de asignar y liberar memoria de una manera ordenada.


Es mejor que eche un vistazo al código fuente Linux 0.01 . es la primera versión del sistema operativo. es muy simple e informativo. es un buen lugar para empezar


Probablemente solo quieras ejecutarlo dentro de una máquina virtual para empezar. Es un PITA que intenta desarrollar un sistema operativo en el hardware real (con el reinicio constante y la depuración por cable en serie).

Dentro de una máquina virtual, generalmente tiene un conjunto de hardware simplificado (y relativamente estandarizado) que también puede facilitar el desarrollo inicial. En particular, si desea mostrarle a otra persona su sistema operativo, simplemente debe proporcionarle un archivo .vhd y estar razonablemente seguro de que si funciona para usted, también funcionará para ellos.

También es posible que desee comenzar con algo que ya está funcionando inicialmente (por ejemplo, Singularity de Microsoft es bastante limpio). Eso te permitirá sacar todo el cargador de arranque aburrido y los controladores básicos del dispositivo, y podrás acceder a las cosas más "carnosas" más rápidamente.



Recomiendo primero estudiar un sistema operativo pequeño como Minix1 que fue construido para fines educativos o Minix3 que cumple con POSIX.


Si desea desarrollar su propio sistema operativo, su mejor primer movimiento es perder el tiempo en el foro de osdev ( http://forum.osdev.org/ ), y tener una buena lectura de su wiki: http://wiki.osdev.org/Main_Page .

Descubrí que las personas allí no solo son expertas sino también increíblemente útiles, ¡incluso señalarán errores en los fragmentos de código!

Empecé con el tutorial x86 de James Molloy (google it no puedo publicar este enlace). Puedes comenzar con su código y luego hack, hack, hack :-).


Solo para ofrecer un enfoque de sugerencia novedoso ... uno podría crear una imagen del cargador de arranque en un CD USB o RW y luego dirigir su computadora para usarlo como dispositivo principal. Tengo Vista instalado y simplemente conecto un USB con el gestor de arranque y el archivo kernel.bin para probar mi sistema operativo Toy. Asegúrese de utilizar ese mismo dispositivo para guardar archivos adicionales o extras para no dañar su disco duro. Cuando su sistema operativo tenga todos los elementos básicos en su lugar compre una computadora basura, instale su sistema operativo y amplíe desde allí.


Tendrá que implementar varios tipos de tablas de descriptores para habilitar el modo de 32 bits. Permitir multi-threading no es una tarea fácil y seguramente será un requisito previo. Probablemente también desee desarrollar soporte de sistema de archivos desde el principio para salir de una imagen de disquete o lo que sea que esté usando actualmente.

Estoy seguro de que habrás encontrado este sitio web en el pasado http://wiki.osdev.org/Main_Page pero tiene muchos artículos geniales.

También puede encontrar útil este libro para la etapa de desarrollo en la que se encuentra: El libro de hardware de PC indispensable lo detalla y tiene muchos diagramas, así como algunos fragmentos de código.