Cómo crear un sistema operativo

Опубликовал Admin
Los sistemas operativos permiten al usuario interactuar con el hardware de su computadora, los cuales se elaboran con cientos de miles de líneas de código, por lo general con los lenguajes C, C++ y ensambladores.

Pasos

  1. Tendrás que tener conocimientos de programación antes de empezar. El lenguaje ensamblador es esencial; otro lenguaje adicional de bajo nivel como C será muy recomendable.
  2. Decide en qué medio deseas cargar el sistema operativo. Podría ser una unidad de CD, DVD, de flash, un disco duro o en otra PC.
  3. Decide qué quieres que haga tu sistema operativo. Si se trata de un sistema operativo completamente capaz que tiene una interfaz gráfica de usuario (GUI, Graphical User Interface) o algo un poco más minimalista, tendrás que saber qué dirección vas a tomar antes de comenzar.
  4. Especifica qué plataforma de procesador será compatible con tu sistema operativo. Te recomendamos las dos más comunes para las computadoras personales: AI-32 y x86_64.
  5. Decide si prefieres hacerlo todo tú mismo desde cero o si hay un núcleo existente que te gustaría usar como base para construir. Por ejemplo, programar Linux desde cero será un proyecto para aquellos que le gustaría crear su propia distribución de Linux.
  6. Decide si vas a utilizar tu propio gestor de arranque o uno pre-creado como el cargador de arranque unificado global (GRUB, Grand Unified Bootloader). Debido a que para programar el código de tu propio gestor de arranque necesitarás poseer un conocimiento amplio del hardware y del BIOS, podría retrasarte para programar el núcleo en sí.
  7. Decide qué lenguaje de programación vas a utilizar. Si bien es posible crear un sistema operativo con un lenguaje como Pascal o BASIC, será mejor si usas C o el ensamblador. El ensamblador es absolutamente necesario, ya que algunas partes vitales de un sistema operativo lo necesitan. Por su parte, C++ contiene palabras clave que necesitan otro sistema operativo totalmente integrado para poder funcionar.
    • Para poder compilar un sistema operativo con el código C o C++, por supuesto tendrás que utilizar cualquier compilador. Por lo tanto deberás leer la guía o los manuales o la documentación de usuario del compilador C o C++ que vayas a elegir, ya sea si se incluye con el software o esté disponible en la página web del distribuidor. Tendrás que saber muchas cosas complejas acerca del compilador y para desarrollar con C++ deberás tener conocimientos de decoración de nombre (mangling scheme) del compilador y de su ABI. Se supone que tendrás que conocer los diversos formatos ejecutables (ELF, PE, COFF, binarios sin formato, etc.) y entender que el formato patentado de Windows, PE (.exe), está protegido por los derechos de autor.
  8. Decide cuál será la interfaz de programación de aplicaciones (API, Application Programming Interface). Te recomendamos POSIX, ya que está bien documentada. Todos los sistemas Unix tienen al menos el soporte parcial para POSIX, por lo que sería trivial conectar programas Unix con tu sistema operativo.
  9. Decide el diseño. Existen núcleos monolíticos y micronúcleos. Los monolíticos implementan todos los servicios en el núcleo, mientras que los micronúcleos tienen un núcleo pequeño combinado con servicios de implementación de demonios de usuario. En general, los núcleos monolíticos son más rápidos, pero los micronúcleos tienen un mejor aislamiento de fallos y fiabilidad.
  10. Considera desarrollar y trabajar en equipo. De esta manera, se resolverán más problemas en menos tiempo, lo cual podría generar un mejor sistema operativo más rápidamente.
  11. No borres tu disco duro por completo. Recuerda, ¡al borrar el disco podrías borrar todos tus datos irreversiblemente! Utiliza el GRUB u otro gestor de arranque para que tu computadora tenga otro sistema operativo con el cual arrancar hasta que el tuyo funcione por completo.
  12. Empieza con algo pequeño. Empieza con cosas pequeñas como mostrar texto e interrupciones antes de proseguir a desarrollar cosas como gestión de memoria y multitarea.
  13. Guarda una copia de seguridad de la última fuente de trabajo. Ello será una medida de protección en caso de que surja algún problema grave con la versión actual de tu sistema operativo o tu desarrollo. Si la PC se bloquea y no puede arrancar, será excelente tener una segunda copia con la que puedas trabajar para solucionar el problema.
  14. Considera probar tu nuevo sistema operativo en una computadora virtual. En lugar de reiniciar el equipo cada vez que realices cambios o tengas que transferir ciertos archivos desde el equipo de desarrollo al equipo de prueba, podrás utilizar la aplicación de una computadora virtual para ejecutar tu sistema operativo, mientras el tuyo se mantiene en funcionamiento. Algunas aplicaciones de computadora virtual son VMWare (que también tiene un producto de servidor gratuito), la alternativa de código abierto, Bochs, Microsoft Virtual PC (no compatible con Linux) y xVM VirtualBox.
  15. Saca un “candidato de lanzamiento”. Esto permitirá a los usuarios informarte sobre posibles problemas con el sistema operativo.
  16. Un sistema operativo también podría ser fácil de usar, así que asegúrate de incluir características fáciles para el usuario, de modo que sean parte integral de tu diseño.

Consejos

  • Después de que hayas hecho todo el desarrollo, decide si quieres que el código sea abierto o patentado.
  • No comiences un proyecto para crear un sistema operativo con el fin de empezar a aprender programación. Si no tienes conocimientos avanzados de C, C++, Pascal u otro lenguaje adecuado, incluida la manipulación del puntero, manipulación de bits de bajo nivel, desplazamiento de bits, lenguaje ensamblador en línea, etc., entonces no estarás listo para desarrollar un sistema operativo.
  • Si quieres que tu sistema sea viable, tu mayor prioridad tendrá que ser implementar características de seguridad.
  • Usa los sitios web como OSDev y OSDever para que te ayuden a desarrollar tu propio sistema operativo. Ten en cuenta que para la mayoría de los propósitos, la comunidad OSDev.org prefiere que te limites a hacer uso de su wiki y no participar en el foro. Si decides participar en el foro, existen requisitos para hacerlo: deberás tener conocimientos profundos de C o C++ y el lenguaje ensamblador x86. También deberás comprender conceptos de programación complejos y generales como listas enlazadas, colas, etc. El reglamento de la comunidad OSDev establece explícitamente que el objetivo de la comunidad no consiste en cuidar a los programadores novatos. Si vas a tratar de desarrollar un sistema operativo, no hace falta decir que se supone que tienes que ser un “dios” de la programación. También será necesario que leas los manuales del procesador para la arquitectura que vayas a elegir; ya sea x86 (Intel), ARM, MIPS, PPC, etc. Podrás encontrar fácilmente estos manuales con una búsqueda de Google (“manuales Intel”, “manuales de ARM”, etc.). No te unas a los foros OSDev.org para empezar a hacer preguntas obvias sino simplemente te dirán que leas el manual de respuestas. Deberás tratar de leer Wikipedia y los manuales de las diversas herramientas que desees utilizar.
  • Comprueba si hay posibles bloqueos y otros errores. Los errores, bloqueos y demás problemas afectarán tu proyecto del sistema operativo
  • Si quieres que sea fácil, ten en cuenta algunas distribuciones de Linux, tales como Fedora Revisor, Custom Nimble X, Puppy Remaster, PCLinuxOS mklivecd, SUSE Studio y SUSE KIWI. Sin embargo, el sistema operativo que crees le pertenecerá a la empresa que haya lanzado primero el servicio (aunque tendrás los derechos de distribuirlo gratuitamente, cambiarlo y ejecutarlo como quieras bajo el GPL).
  • Te recomendamos hacer una partición completamente nueva para desarrollar el sistema operativo.

Advertencias

  • Escribir descuidadamente tu sistema operativo sobre el disco duro podría dañarlo por completo, así que ten cuidado.
  • No podrás crear un sistema completo en dos semanas. Primero haz uno que arranque, luego prosigue con las características interesantes.
  • No esperes que sea fácil construir un sistema operativo bien hecho. Habrá muchas interdependencias complejas, por ejemplo, para que el sistema pueda manejar varios procesadores, el administrador de memoria deberá tener mecanismos de “bloqueo” para evitar que varios procesadores accedan al mismo recurso al mismo tiempo. Los “bloqueos” para ello necesitarán la presencia de un planificador para asegurarse de que solo un procesador tenga acceso a un recurso crítico en algún momento dado mientras todos los demás esperan. Sin embargo, el planificador dependerá de la presencia de un administrador de memoria. Este es el caso de una dependencia en punto muerto. No existe ninguna solución estándar para este tipo de problemas, por lo que se supone que cada programador de un sistema operativo tendrá que tener la destreza necesaria para lidiar con él.
  • Si haces algo contraproducente, por ejemplo, escribir bytes aleatorios a puertos I/O aleatorios, bloquearás el sistema operativo y podrías quemar el hardware (en teoría).

Cosas que necesitarás

  • Una computadora
  • Un CPU para la arquitectura que vayas a desarrollar
  • Memoria (RAM) suficiente para una computadora virtual
  • Un sistema operativo anfitrión (para desarrollar el ensamblador, otros código fuente, para construirlo y empaquetarlo mientras estés en tus primeras etapas, con el tiempo tu propio sistema operativo podría ser tu anfitrión)
  • Editor de coloreado de sintaxis (si no tienes “Entorno de desarrollo integrado”)
  • Un compilador
  • Una unidad CD/DVD
Теги: