¿Cuáles son algunos recursos para comenzar a desarrollar sistemas operativos? [cerrado]

589

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:

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)

Giovanni Galbo
fuente
55
No olvides foros.osdever.net
Brenden
15
¿Por qué este tipo de buenas preguntas de propósito general siempre están cerradas en SO?
Pratik Singhal
30
Esta pregunta tiene 370 votos a favor, ha sido votada 422 veces y ha estado presente desde que se lanzó StackOverflow por primera vez. Parece que a la comunidad le ha gustado, pero por alguna razón un puñado de personas tiene que arruinarlo para todos. ESTO es el motivo por el que estoy empezando a desagradarme SO
Giovanni Galbo
1
Hay una tendencia muy interesante con Unikernels (haz una sola cosa y hazlo bien) donde estos esfuerzos son muy relevantes. Por lo general, puede iniciar en frío un unikernel en una máquina virtual y ejecutar el código de usuario en menos de un segundo. He visto una solución en la que solo la búsqueda de DNS para dicho servicio hace que el servidor DNS active una "máquina virtual de arranque" para que esté lista cuando llegue la solicitud real del servicio.
Thorbjørn Ravn Andersen

Respuestas:

95

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

Adam Davis
fuente
Hola señor, ¿COSMOS es una buena herramienta para desarrollar el sistema operativo?
Vikas Verma
@VikasVerma No lo he usado, así que no lo sé.
Adam Davis
@AdamDavis El primer enlace está roto (y los otros también parecen estarlo). ¡Por favor, arréglenlos!
nbro
35

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.

Mike Stone
fuente
¡Tengo el último libro de Tanenbaum, pero el código fuente de minix3 parece bastante enorme! Tengo un objetivo similar como el OP, aunque no quiero construir un kernel desde cero, realmente quiero entender cómo funciona un kernel y qué hace. ¿ Tanenbaum book and minix3Seguir lo suficiente para hacer cambios en minix3 eventualmente me ayudará a contribuir al kernel de Linux?
Gideon
32

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.

.

Richard T
fuente
18

Escribe un sistema operativo de microcontrolador. Recomiendo un microcontrolador basado en x86. Un sistema operativo moderno es simplemente enorme . Aprende lo básico primero.

Paul Nathan
fuente
2
alguna idea de por dónde empezar con este? ¿Estoy muy interesado? qué kit comprar ... libros para comenzar, etc.
Julio
@Uncle: no he encontrado un libro de sistemas integrados de primer nivel hasta la fecha. O tienen un nivel demasiado alto y asumen un sistema operativo, o están orientados a un ingeniero eléctrico e ignoran el código. En cuanto a los kits, un google encuentra un " bifferos.bizhat.com ". También hay kits ARM por ahí. No me gustan las arquitecturas de Harvard personalmente, así que no me interesa el arduino, pero es el más popular. Para un trabajo más exótico, el XC-1A también es bueno.
Paul Nathan
@Paul apreciaría si pudieras ampliar tu respuesta. Miré en AVR y Arduino, pero recientemente vi .NET micro. Soy un tipo LOB de abstracción demasiado alto, pero quiero comenzar a caminar por la pila. ¿Dónde me recomiendan comenzar?
Gedeón
@giddy: Los AVR son la moda actual. Son pequeños y baratos, pero no me gusta mucho la arquitectura. Recomendaría obtener un kit de desarrollo ARM (tiene un costo de ~ 100). Son populares en aplicaciones comerciales.
Paul Nathan
@Paul gracias! No escuché mucho sobre ARM. ¿Qué hay de .net micro? Estoy un poco preocupado por quemar algo. La mayoría de los kits vendrán con algún tipo de instrucciones, ¿verdad? gracias de nuevo.
Gedeón
16

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 .

Steve Tranby
fuente
1
Relacionado: el wiki de etiqueta x86 de SO tiene enlaces a manuales de Intel / AMD y muchas cosas buenas.
Peter Cordes
15

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!

Jens A. Koch
fuente
11

También es posible que desee echar un vistazo a SharpOS, que es un sistema operativo que están escribiendo en C #.

lomaxx
fuente
9

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

Adam Davis
fuente
7

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.

LB40
fuente
7

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.

Anders Rune Jensen
fuente
6

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.

Phil Miller
fuente
6

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.

Michael Foukarakis
fuente
5

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

basszero
fuente
4

Es posible que desee mirar linuxfromscratch .

Linux From Scratch (LFS) es un proyecto que le proporciona instrucciones paso a paso para construir su propio sistema Linux personalizado, completamente a partir del código fuente.

jfs
fuente
32
Compilar un sistema operativo está muy lejos de escribir uno.
duskwuff -inactive-
77
@duskwuff Tienes razón, pero aprenderás mucho de ello. Entonces puedes seguir adelante y escribir el tuyo.
jfs el
4

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

revs Srujan
fuente
Grandes recursos El documento se refiere a Nachos (2500 líneas de código), OS / 161 (11000), MINIX (30000), GeekOS. Vaya a la página oficial de cada universidad y encontrará el código fuente, simulador y herramientas, así como las tareas por año.
limitcracker
4

Me gustaría incluir este repositorio How-to-Make-a-Computer-Operating-System de Samy Pesse. Es un trabajo en progreso. Muy interesante.

ddetoni
fuente
Gracias, tenía la intención de agregar esto a la lista después de encontrarlo en Reddit, pero lo olvidé por completo.
Giovanni Galbo
3

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.

tgiphil
fuente
3

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.

Tim S. Van Haren
fuente
3

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.

no92
fuente
2

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.

Alabardero
fuente
2

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.

James Moore
fuente
Seguí este libro y lo desarrollé en base a su código. Es increíble comenzar con un libro así.
user3405291
2

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.

Earizon
fuente
1

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

  1. Debe centrarse en lenguaje ensamblador, C y C ++. Debes ser experto en estos idiomas.
  2. Primero lea un buen libro sobre cómo funciona el sistema operativo [Google it], luego lea toda la información de sistema operativo Wiki
  3. Busque en YouTube "Cómo crear su propio sistema operativo en lenguaje ensamblador", vea el video, ej. Vídeo
  4. Descargue el código fuente del sistema operativo Linux y compílelo usted mismo e intente modificar el código usted mismo
  5. Ahora eres un experimentado editor de sistemas operativos, ahora descarga Minix y QNX y comienza a desarrollar con ellos y obtén sus documentos desde aquí Minix Doc y QNX Doc

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

BharatKhanna
fuente
Editores, editen mi respuesta y eliminen el espacio entre http: y www, ya que soy un recién llegado, así que no tengo tanta reputación, por favor hagan eso por mí
BharatKhanna
1

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.

user69969
fuente