Una cosa que siempre quise hacer es desarrollar mi propio sistema operativo (no necesariamente sofisticado como Linux o Windows, pero mejor que un simple gestor de arranque que ya he hecho).
Me cuesta encontrar recursos / guías que lo lleven a escribir un simple sistema operativo "Hello World".
Sé que mucha gente probablemente recomendará que mire Linux o BSD; pero la base de código para sistemas como ese es (presumiblemente) tan grande que no sabría por dónde empezar.
¿Alguna sugerencia?
Actualización: para que sea más fácil para las personas que llegan a esta publicación a través de Google, aquí hay algunos recursos de desarrollo del sistema operativo:
Escribir su propio sistema operativo (gracias Adam)
Linux From Scratch (Gracias John)
SharpOS (Sistema operativo C #) (Gracias lomaxx)
OS Dev Wiki y Foros (Gracias Steve)
BonaFide (Gracias Steve)
Bran (gracias Steve)
Haga rodar su propio sistema operativo UNIX-clone (gracias Steve)
Otros recursos:
Encontré un buen recurso llamado MikeOS , "MikeOS es una herramienta de aprendizaje para demostrar cómo funcionan los sistemas operativos simples. Utiliza el modo real de 16 bits para el acceso al BIOS, por lo que no necesita controladores complejos"
Actualizado 14/11/08
Encontré algunos recursos en la Guía de Freebyte para ... Sistemas operativos gratuitos y no libres que enlazan con kits como OSKit y la biblioteca ExOS. Estos parecen súper útiles para comenzar a desarrollar el sistema operativo.
Actualizado 23/02/09
Ric Tokyo recomendó nanoos en esta pregunta . Nanoos es un sistema operativo escrito en C ++.
Actualizado 9/9/09
Dinah proporcionó una discusión útil sobre el desbordamiento de pila de los aspirantes a desarrolladores de sistemas operativos: los obstáculos en la creación de un sistema operativo personalizado discuten las dificultades que pueden surgir al desarrollar un sistema operativo y el desarrollo del sistema operativo es una discusión más general.
Actualizado 7/9/09
LB proporcionó un enlace al Proyecto Pintos , un sistema operativo educativo diseñado para estudiantes que aprenden el desarrollo del sistema operativo.
Actualizado el 27/07/09 (¡Sigue siendo fuerte!)
Me topé con un curso de sistema operativo en línea de Berkley con 23 conferencias.
TomOS es una bifurcación de MikeOS que incluye un pequeño administrador de memoria y soporte para mouse. Como MikeOS, está diseñado para ser un proyecto educativo. Está escrito en el ensamblador NASM.
Actualizado 8/4/09
Encontré las diapositivas y otros materiales para acompañar las conferencias en línea de Berkeley enumeradas anteriormente.
Actualizado 23/08/09
Todas las preguntas etiquetadas osdev en stackoverflow
OS / 161 es un sistema operativo académico escrito en c que se ejecuta en un hardware simulado. Este sistema operativo es similar en Nachos. Gracias Novelocrat!
tangurena recomienda http://en.wikipedia.org/wiki/MicroC/OS-II , un sistema operativo diseñado para sistemas integrados. También hay un libro complementario .
El desarrollo del kernel de Linux por Robert Love es sugerido por Anders. Es una "mirada privilegiada ampliamente aclamada en el kernel de Linux".
Actualizado el 18/09/2009
Gracias Tim S. Van Haren por contarnos sobre Cosmos , un sistema operativo escrito completamente en C #.
tgiphil nos cuenta sobre el marco de la Alianza de Sistemas Operativos Administrados (MOSA) , "un conjunto de herramientas, especificaciones y código fuente para fomentar el desarrollo de sistemas operativos administrados basados en el Lenguaje Intermedio Común".
Actualización 24/09/2009
Steve encontró un par de recursos para el desarrollo en Windows usando Visual Studio, consulte la configuración de la guía BrokenThorn con VS 2005 o la Sección VS de OSDev .
Actualizado 9/5/2012
kerneltrap.org ya no está disponible. Linux kernel v0.01 está disponible en kernel.org
Actualizado el 21/12/2012 Un tutorial básico de desarrollo de SO diseñado para ser un proyecto de semestre. Le guía a través de la construcción de un sistema operativo con componentes básicos. Muy buen comienzo para principiantes. Papel relacionado . Gracias Srujan!
Actualizado 15/11/2013
Escribir un sistema operativo simple desde cero . Gracias James Moore!
Actualizado 8/12/2013
Cómo hacer un sistema operativo de computadora Gracias ddtoni!
Actualizado 18/03/2014
ToAruOS un sistema operativo creado principalmente desde cero, incluida la GUI
Actualizado el 12 de septiembre de 2016
Escribir su propio sistema operativo de juguete
Actualizado 10 de diciembre de 2016
Escribir un sistema operativo simple: desde cero (gracias @Tyler C)
fuente
Respuestas:
Hay muchos enlaces después de esta breve descripción de lo que implica escribir un SO para la plataforma X86.
El enlace que parece ser más prometedor (www.nondot.org/sabre/os/articles) ya no está disponible, por lo que deberá leer la versión de Archive.org para leerlo.
Al final del día, el gestor de arranque toma el código de máquina del núcleo, lo guarda en la memoria y salta a él. Puede poner cualquier código de máquina en el kernel que desee, pero la mayoría de los programas de C esperan un sistema operativo, por lo que deberá decirle a su compilador que no tendrá todo eso, o el gestor de arranque tiene que crear algunos.
El kernel hace todo el trabajo pesado, y sospecho que es el kernel de ejemplo que desea. Pero hay un largo camino por recorrer entre tener un kernel que diga "Hola mundo" a tener un kernel que cargue un intérprete de comandos, proporcione servicios de disco y cargue y administre programas.
Es posible que desee considerar suscribirse a ACM para obtener acceso a su literatura anterior: hay muchos artículos a finales de los 80 y principios de los 90 en revistas de informática temprana sobre cómo crear sistemas operativos alternativos . Es probable que también haya libros agotados de esta época. Es posible que pueda obtener la misma información de forma gratuita al buscar los índices de esas revistas (que están disponibles en ese sitio; haga clic en "índice" cerca del nombre de la revista) y luego busque personas con una copia.
Por último, sé que Usenet está muerto (por lo que dicen los profetas de la fatalidad de Internet), pero encontrarás que muchos de los viejos expertos de esa época todavía viven allí. Debes buscar en los grupos de Google (tienen el antiguo repositorio de dejanews) y espero que encuentres a muchas personas haciendo las mismas preguntas hace una década o 1,5 años que las que estás haciendo ahora. Incluso puede encontrarse con las muchas consultas de ayuda de Linus Torvalds, ya que originalmente estaba desarrollando Linux. Si las búsquedas no muestran nada, pregunte en el grupo de noticias apropiado (probablemente comience con comp.arch, pero busque las que tengan el sistema operativo en el nombre).
fuente
Minix es mucho más pequeño y está diseñado con fines de aprendizaje, y el libro que lo acompaña también es bueno.
Actualización: supongo que Minix 3 es un objetivo un poco diferente, pero Minix 2 (y, por supuesto, la primera versión) fueron para fines de enseñanza.
fuente
Tanenbaum book and minix3
Seguir lo suficiente para hacer cambios en minix3 eventualmente me ayudará a contribuir al kernel de Linux?Como alguien que ha escrito un sistema operativo multitarea en tiempo real desde cero ...
rutina de eliminación de teclado, controlador de teclado, controlador de disco, controlador de video, sistema de archivos y finalmente un cargador de arranque, ¡y eso es solo para lanzarlo por primera vez sin nada que hacer!
... No puedo enfatizar lo suficiente lo importante que es familiarizarse con el hardware. Esto es especialmente así si realmente desea hacerlo todo usted mismo en lugar de simplemente elegir un sistema primitivo que otra persona ya le ha presentado. Por ejemplo, póngase en contacto con Intel y solicite una tarjeta de CPU para su tipo de CPU. Esto lo presentará para usted: los "pin-outs", interrupciones, códigos de operación, ¡lo que sea!
Recuerde que el hardware lo hace todo posible. Estudia el hardware. No te arrepentirás.
.
fuente
Escribe un sistema operativo de microcontrolador. Recomiendo un microcontrolador basado en x86. Un sistema operativo moderno es simplemente enorme . Aprende lo básico primero.
fuente
Desearía que hubiera un lugar para obtener toda la información sobre el desarrollo de su propio sistema operativo. Lo más cercano a eso es OS Dev Wiki y Forums . Ofrecen una tonelada de buena información sobre la configuración, el desarrollo y la información del hardware del dispositivo.
También hay algunos tutoriales geniales en BoneFide , he usado el tutorial de introducción de Bran , y ahora estoy viendo uno más reciente basado en su sistema operativo llamado UNIX-clone de Roll your own toy .
En segundo lugar, comprobé: "Sistemas operativos: diseño e implementación"
Y si desea desarrollar en Windows, consulte la publicación de blog de jolson.Editar: para el desarrollo en Windows con Visual Studio, consulte la guía de BrokenThorn o la wiki de OSDev .
fuente
Un excelente recurso es el material del curso MIT 6.828: Ingeniería del sistema operativo.
XV6: sistema operativo de enseñanza simple similar a Unix escrito en ANSI C para x86 http://pdos.csail.mit.edu/6.828/2012/xv6.html
Fuente XV6 - como un folleto impreso con números de línea http://pdos.csail.mit.edu/6.828/2012/xv6/xv6-rev7.pdf
Libro XV6: explica las ideas principales del diseño del sistema operativo http://pdos.csail.mit.edu/6.828/2012/xv6/book-rev7.pdf
El material es compacto: fuente de 92 páginas y comentario de 96 páginas.
¡Me gusta más que el libro Minix! Es una verdadera joya!
fuente
También es posible que desee echar un vistazo a SharpOS, que es un sistema operativo que están escribiendo en C #.
fuente
Hay buenos recursos para los fundamentos del sistema operativo en los libros. Como no hay mucha necesidad de crear nuevos sistemas operativos desde cero, no encontrará mucha información de tipo aficionado en Internet.
Recomiendo el libro de texto estándar, "Sistemas operativos modernos" de Tanenbaum. También puede encontrar útiles los "Elementos del sistema operativo" de Calingaert: se trata de una breve descripción de un libro que ofrece un esbozo de lo que es un sistema operativo desde el punto de vista del diseñador.
Si tiene algún interés en los sistemas en tiempo real (y al menos debería comprender las diferencias y los motivos de los sistemas operativos en tiempo real), también recomendaría "MicroC / OS-II" de Labrosse.
Editar:
¿Puedes especificar qué quieres decir con "más técnico"? Estos libros dan detalles de implementación de pseudocódigo, pero ¿está buscando un sistema operativo de ejemplo o fragmentos de código para una máquina / lenguaje en particular?
-Adán
fuente
Solo viene de otra pregunta. Me gustaría mencionar a Pintos ... Me acordé de mi curso de sistema operativo con Nachos y Pintos parece ser el mismo tipo de cosas que se pueden ejecutar en x86.
fuente
Encontré el desarrollo del kernel de Linux de Robert Love bastante interesante. Le informa sobre cómo los diferentes subsistemas en el kernel de Linux funcionan de una manera muy práctica. Dado que la fuente está disponible, Linux es un candidato ideal para algo que piratear.
fuente
Aquí hay otras páginas de Stack Overflow que vale la pena incorporar en esta discusión:
Obstáculos en la creación de un sistema operativo personalizado
Desarrollo de un sistema operativo para la arquitectura x86
fuente
Mi curso de sistemas operativos en pregrado nos hizo construir una serie de subsistemas para OS / 161 , un kernel simple similar a BSD que proporciona algunos de los conceptos básicos mientras deja la libertad de explorar varias decisiones de espacio de diseño en la implementación de servicios de nivel superior.
fuente
Comienza a hackear en Minix. Es mucho más pequeño que Linux (obviamente) y está diseñado con propósitos de enseñanza en mente (algunos, al menos). Sin embargo, no Minix 3, esa es una historia completamente diferente.
fuente
Ya respondí, pero cuando tomé los sistemas operativos en la universidad comenzamos con un kernel de Linux temprano y agregamos características modernas simplistas (sistemas de archivos básicos, memoria virtual, multitarea, mutexes). Buena diversión. Puede omitir algunas de las cosas de ensamblaje REALMENTE locas de bajo nivel solo para muck w / modo protegido y tablas de páginas mientras aún aprende algunas de las agallas.
http://kerneltrap.org/node/14002 http://kerneltrap.org/files/linux-0.01.tar.bz2
fuente
Es posible que desee mirar linuxfromscratch .
fuente
Un desarrollo de SO simple y básico tutorial de diseñado para ser un proyecto de semestre. Le guía a través de la construcción de un sistema operativo con componentes básicos. Muy buen comienzo para principiantes. El artículo relacionado está aquí .
fuente
Me gustaría incluir este repositorio How-to-Make-a-Computer-Operating-System de Samy Pesse. Es un trabajo en progreso. Muy interesante.
fuente
Un sistema operativo razonablemente simple para estudiar sería µC / OS. El libro tiene un disquete con la fuente.
http://en.wikipedia.org/wiki/MicroC/OS-II
fuente
Consulte el Proyecto de Alianza del Sistema Operativo Administrado (MOSA) en www.mosa-project.org . Están diseñando un compilador AOT / JIT y un sistema operativo totalmente administrado en C #. Algunos de los desarrolladores son del proyecto inactivo de SharpOS.
fuente
He jugado con Cosmos , que es "un proyecto de sistema operativo implementado completamente en lenguajes compatibles con CIL". Está escrito en C #, así que eso estaba en mi callejón. Para alguien como yo que nunca ha intentado construir un sistema operativo, fue realmente genial poder ejecutar un sistema operativo "Hello World" en muy poco tiempo.
fuente
Echa un vistazo a este sitio: http://osix.net/modules/article/?id=359
fuente
Como se mencionó anteriormente, el Wiki de OSDev es (de lejos) la mejor fuente para el desarrollo del sistema operativo. Para aquellos de ustedes que hablan alemán, el Wiki lowlevel.eu también es excelente. Algo relativamente desconocido de Incitatus OS , un kernel simple con un pequeño conjunto de aplicaciones de espacio de usuario. Es ideal para entrar en el complicado tema del desarrollo del sistema operativo.
fuente
Movitz es un entorno Lisp escrito en Common Lisp y que se ejecuta "en el metal". Desafortunadamente, algunos enlaces en la página principal de Movitz le niegan el acceso, pero puede encontrar instrucciones sobre cómo descargar y compilar el código fuente desde la página de seguimiento . Además, se puede encontrar una imagen lista en el archivo de esta página .
En mi humilde opinión, esto es sumamente interesante, ya que trae de vuelta la máquina Lisp concepto de en el hardware actualmente disponible. Fracasó comercialmente, pero esto no me prueba que la idea fuera mala.
El manual de odiadores de Unix es un libro divertido que regaña en serio el concepto de Unix y sus derivados. Muchas secciones discuten sobre cuán mejor era el concepto de máquina Lisp.
fuente
Aquí hay un documento llamado " Escribir un sistema operativo simple desde cero ". Cubre escribir un gestor de arranque, ingresar al modo protegido x86-32 y escribir un núcleo básico en C. Parece que hace un buen trabajo al explicar todo en detalle.
fuente
El simulador x86 JS y el simulador ARM también pueden ser muy útiles para comprender cómo funcionan las diferentes piezas de hardware y realizar pruebas sin salir de su navegador favorito.
fuente
Pregunta interesante para los programadores. Verás que llevará mucho, mucho tiempo construir un sistema operativo como Windows o Mac, pero si quieres construir uno simple, entonces puedes intentarlo lo mejor posible
Ahora ha obtenido el grado de maestría (no solo un poco más por delante) en la creación de SO, ahora distribuya este conocimiento a sus amigos y con su ayuda intente crear un SO tan poderoso como Mac, Linux o Windows
fuente
Cuando ha creado un sistema operativo básico, en realidad es difícil continuar porque no hay muchos recursos para hacer GUI o portar bibliotecas. ¡Pero creo que echar un vistazo a ToAruOS ayudaría mucho!
¡El código bajo la superficie de ese sistema operativo es tan simple! pero al mismo tiempo ha portado cosas como cairo, python, (aún no pero pronto) sdl, hizo compartir memoria y también ha creado su propio kit de herramientas de widgets. Todo está escrito en C.
Otro sistema operativo interesante sería pedigreeOS . Está hecho por JamesM (el hombre detrás del tutorial del kernel de jamesM . Si bien tiene más funciones que ToaruOS, también es más grande y más confuso.
Pero de todos modos, estos 2 SO te ayudarán mucho, especialmente ToAruOS.
fuente
Cuando comencé a trabajar en mis sistemas operativos básicos, necesitaba una guía básica como Stepping stones para un sistema operativo básico . Me ayudó a no perder la cabeza.
Eso si quieres hacerlo de la nada (código de ensamblaje puro)
fuente