2009-02-24 11 views
9

¿Qué tipo de C++ (Volver a programar) tendría que aprender a hacer mi propio núcleo del sistema operativo? (Sé que también tendría que aprender a ensamblar). EDITAR *** Al igual que las interrupciones, controlador de teclado, obteniendo entrada. ***¿Qué tipo de C++ tendría que aprender para hacer mi propio núcleo del sistema operativo?

Ok todos, hice un SO * realmente básico y me gustaría compartirlo.

Aquí tienes. http://bcsy.hostzi.com/BytOS.zip

compilar en Linux

+2

Respuesta corta: Todo. – Crashworks

+11

LOL, se supone que debemos confiar en un tipo llamado "hacklord" suficiente para descargar su código? –

+1

Por supuesto que confías en él. Porque su Q más votada es "¿Cómo causo un desbordamiento del búfer"? Así que debe ser bastante inofensivo :-) – hirschhornsalz

Respuesta

0

Todos. Esta no es una tarea trivial, necesitas aprender la mayoría de las facetas del lenguaje, recomendaría buscar la programación del kernel. Desde su aspecto, buscaría teorías lógicas y paradigmas para lenguajes de programación antes de incrustarme en la sintaxis. Hay capas de hardware y tanto que necesitará aprender mucho más que de una respuesta que va a obtener en este sitio o haciendo una búsqueda en Google.

¡Buena suerte!

6

Teniendo en cuenta sus opciones hoy en día no hay absolutamente ninguna razón para "hacer" un sistema operativo. Aprende un idioma realmente bien y ponte realmente cómodo con Windows o con una variante de Linux. C o C++ es genial para aprender.

Edite para aclarar - mi punto es que es locura tanto irreal como lejana tratar de aprender un idioma por primera vez haciendo un sistema operativo. Como mínimo, es muy necesario tener un buen historial en C; de lo contrario, comience a hacer aplicaciones y aproveche la potencia de los sistemas operativos existentes antes de intentar hacer la suya propia.

+4

No puedo estar de acuerdo con eso, escribí un pequeño sistema operativo y es una forma fantástica de aprender cosas como sistemas de archivos, concurrencia, primitivas de sincronización, programación de hilos, E/S e interrupciones, etc. etc. –

+1

@David Estoy de acuerdo, pero apuesto a que tienes que aprender un idioma muy bien antes de abordar eso. Es una locura intentar y aprender un idioma escribiendo tu propio sistema operativo. – Brandon

+0

Claro, tenía un conocimiento decente de C (y ligero de ensamblaje), pero eso no significa que no haya ninguna razón para programar un sistema operativo. –

5

Sólo hay un tipo, que debería ayudar a reducirla. Comience estudiando los manuales de arquitectura de la CPU, los de Intel están disponibles en for free. Obtener la documentación del BIOS va a ser la parte difícil.

+0

¡Solo hay un tipo, gracias! ¡Estaba pensando lo mismo! – NTDLS

0

yo no recomendaría el uso de C++ al hacer un núcleo monolítico, y punto. Sin embargo, si está contemplando un diseño de microkernel, podría escribir los servidores (redes, consolas, fs, vfs, etc.) en C++, mientras mantiene el kernel mismo ajustado con C/inline asm.

Por otra parte, si vas a ir para x86, no importa tanto.

¿Cuáles son los objetivos de diseño de su sistema operativo?

7

Tengo un amigo que escribió un núcleo del sistema operativo en C++:

http://sourceforge.net/projects/ekp/

lo que es definitivamente posible. (Algunos de los comentarios anteriores dicen que es imposible. Mal.)

Puede que incluso quieren robar su arranque y construir código, por lo que sólo puede bucear en derecho y empezar a aplicar la "materia de la diversión".

5

la salida nanoos, su sistema operativo un proyecto en C++!

En respuesta a su pregunta:

Un sistema operativo (comúnmente abreviado a la SG o la O/S) es una interfaz entre el hardware y aplicaciones; es responsable de la gestión y coordinación de las actividades y el intercambio de los recursos limitados de la computadora. El sistema operativo actúa como host para las aplicaciones que se ejecutan en la máquina . Por lo tanto, debe aprender los bits en C++ que permiten que su programa (OS) interactúe con el hardware en el que se ejecutará.

Luego debe ir más allá de interactuar con el hardware y proporcionar uso al usuario.

Por eso, volver una vez más y ver lo que se intentó en los nanoos como punto de partida (para C++ necesidades de lo que la construcción de un sistema operativo en C++ que conllevaría el aprendizaje)

características que se encuentran en nanoos:

  • C++ tiempo de ejecución

  • 32-bits administrador de memoria en modo protegido

  • detección de la CPU, la detección de la memoria y el IDE detección de disco duro

  • disco duro IDE leer

Básicamente, para escribir un Operating System, sólo echa un vistazo a lo que un sistema operativo tiene que hacer (o lo es)

Si tuviera que escribir un sistema operativo, incluso antes de considerar el idioma, trataría de entender qué es un SO, this is a great book: Diseño e Implementación de Sistemas Operativos.

alt text http://ecx.images-amazon.com/images/I/3125C47MR4L._SL500_AA180_.jpg

tener una lectura. Buena suerte

0

Echa un vistazo a la lista de correo del kernel de Linux FAQ de las preguntas más comunes (que se aplicaría a cualquier desarrollo núcleo), y no se desaliente por el this punto.

1

Por una serie de razones técnicas, Linux no está programado en ningún idioma además de C. Por diversas razones políticas, algunos otros sistemas están programados en C++.

Si desea aprender acerca de kernels de programación, el sistema operativo Minix/microkernel está expresamente diseñado para aprender el diseño del sistema operativo. Es pequeño y mínimo. También está programado en C.

+1

Solo por curiosidad, ¿cuáles son esas razones políticas? – Angela

+0

Google para la queja de C++ de Linus Torvalds y creo que lo comprenderá. –

+2

linus 'rant es simplemente estúpido fud:/ –

0

El único SO de cualquier tamaño significativo que conozco ha sido programado en C++ hasta "bare metal" es el sistema operativo AS/400 OS/400 (después de v3r6).

No hay mucho que le impida hacer cualquier sistema operativo en C++, especialmente cuando recuerda que vainilla C es "casi" C++ válido de todos modos. Lo que se vuelve interesante es hacer new/delete en los niveles más bajos, porque debe garantizar que no haya fugas y tal. Esto lleva a una necesidad de volver a implementar las funciones new.

Ayudé a hacer v3r6, pero han pasado unos 13 años y no recuerdo los detalles peludos. No conozco ninguna publicación, pero si está realmente interesado, intente escribirle a Marshall Cline al http://www.parashift.com.

(Augh. "Suprimir" vicio "libre".)

+0

La implementación de new/delete es trivial y a menudo puede ser solo envoltorios cortos en malloc/free. La compilación emitirá el código constructor/destructor por ti. Tengo un sistema operativo C++, la única parte realmente difícil es si quieres excepciones. /rtti.Si puede prescindir de ellos, no hay mucho trabajo para poner en marcha. –

+0

Supongo que otra cosa que vale la pena destacar es contructores/destructores globales, ya que estos deben llamarse antes de "principal", pero una vez más, es una función de 5 líneas para manejar eso, nada épico. –

+0

Evan, en realidad implementando new/delete para las clases de bajo nivel "bare metal" es * not * trivial; esto va doblemente para las clases que necesitan, por ejemplo, mapear direcciones físicas específicas. –

1

Sugiero echar un vistazo a nachos (No Otro sistema operativo completamente heurístico). Es el sistema operativo de enseñanza que utilizamos para mi curso de sistemas operativos en la universidad.

6

Te recomiendo que mires el OSDev wiki. Es una fantástica fuente de información sobre la programación de un sistema operativo en muchos idiomas, incluido C++.

Específicamente, see this sección que le informa acerca de todo lo necesario para comenzar con un kernel de C++ usando gcc.

Finalmente, mira OSDev forums, hay muchos usuarios que van desde principiantes hasta altamente experimentados. Por lo general, están más que felices de ayudar a las personas (siempre y cuando demuestren que intentaron antes de preguntar :-P)

+0

+1 por mencionar OSDev. –

1

Newos es un buen kernel de C++. También lo son eCos y L4. Newos es un microkernel de un antiguo desarrollador de BeOS. L4 también es un microkernel, famoso por su paso de mensajes increíblemente rápido. Y eCos es un kernel monolítico.

0

En cuanto a L4Ka :: Pistacho, el kernel de Haiku, o EKA2 de Symbian podría ser una buena idea, si está interesado en ejemplos de kernels "reales" basados ​​en C++ que se han utilizado como los fundamentos de complejos, característica -Los sistemas operativos

He encontrado que este último está bien estructurado y consiste en un código muy conciso y legible, pero otros pueden estar en desacuerdo. Sin embargo, es difícil de obtener y construir en este momento (ya que los sitios web de la Fundación Symbian están actualmente fuera de línea), aunque una copia es mirrored en Google Code.

Dejando eso aparte, he descubierto que L4Ka :: Pistachio es uno de los kernels más fáciles de construir hasta el momento, pero la personalización e implementación de componentes de alto nivel es otra manera - aunque Genode parecía una ruta prometedora para rápidamente construyendo componentes de mayor nivel cuando lo probé, hace años.

Cuestiones relacionadas