2010-12-03 24 views
18

Lo que me gustaría saber es comenzar a programar desde cero sin ningún sistema operativo ni nada parecido.Programación desde cero

Como sé Windows y Mac y casi cualquier cosa, incluso el DOS está escrito en C, C++ Pascal, etc., así que creo que debería conocer uno de estos idiomas, pero para esto necesitaría un programa donde pueda escribir el código, y también para compilarlo pero sin un sistema operativo y programas ¿cómo se puede hacer esto? ¿Cómo podrían hacerlo?

Pero esto no es suficiente, ¿cómo se escribió C? ¿en que? Entonces cuando quiero decir cero, quiero decir, construir todo desde lo básico. Tal vez desde 0,1,0,1 en este momento, creo que este es el punto de partida exacto. Pero, ¿cómo puedo hacerlo, qué debería tener y dónde debería comenzar?

¡Gracias por cada respuesta!

+24

Todo lo que necesita es una aguja imantada y una mano firme: http://xkcd.com/378/ – neo2862

+2

lol @ neo2862 :)) – Adam

+0

Un sistema operativo fue escrito en Pascal? –

Respuesta

8

lo que está hablando solía llamarse un programa 'monitor'. puede obtener información interesante en osdev.org y echar un vistazo a colorforth.

[afterthought] google Rick Hohensee divagaciones en comp.lang.forth también.

[mucho más tarde] para llegar a lo básico, obtener una placa de circuito de plug-in, algunas EPROM antiguas, una fuente de alimentación de 5VDC y una fuente de alimentación de 25VDC (24 debería funcionar, es más común). Use resistencias pullup o pulldown en las líneas de dirección y datos, y cambie para suministrar tierra o alimentación a la dirección y las líneas de datos. Paso a través de las direcciones usando los interruptores, e ingrese los datos como unos y ceros en el bus de datos, programando cada uno con un pulso de 25V. Nunca he hecho esto manualmente, pero una vez escribí un programa (http://jc.unternet.net/hacks/?1994-01-01-01) para hacer esto desde un puerto Centronics, y grabé varios programas que camino. Esto fue en el día en que Intel le enviará libros gratis para todos sus procesadores y chips auxiliares, con conjuntos de instrucciones detallados y tiempos.

Cuando haya terminado, conecte su procesador a la EPROM, dele un poco de jugo y observe lo que sucede. Quizás haga que estropee algunos LED o algo así antes de que intente integrar teclados y monitores.

+0

Muchas gracias @jcomeau_ictx osdev.org se ve muy interesante! y también cuidaré este lenguaje. – Adam

+0

¡Me encantaría ver ese monitor autol soldeo basado en LED! De hecho, vi algo así hace mucho tiempo ... – jwueller

4

El problema que está describiendo se conoce comúnmente como bootstrapping (y su 'relación con chicken and egg problem). Ese enlace específico es para compiladores, pero tiene el mismo problema en muchas áreas: hardware, sistemas operativos, etc., con soluciones similares.

+0

Sí, esto es algo así, pollo y huevo: D, muchas gracias por la palabra y el enlace de arranque, porque ni siquiera sabía que esta palabra existe – Adam

3

La mayoría de los compiladores C pueden emitir código que no está diseñado para ejecutarse en el contexto de un sistema operativo (ver el código base memtest86+ por ejemplo), pero eso limitará severamente el conjunto de características proporcionado por cualquiera de esos compiladores. (En particular, no obtendrá nada como malloc).

+0

gracias Voy a cuidar de estos! – Adam

4

Comenzando por los conceptos básicos es 1 y 0. Necesita saber qué instrucciones admite su procesador y qué registros y caché, etc. existen. Entonces sería útil escribir un pequeño compilador ensamblador en código máquina (para leer 1 y 0). Si tiene eso, puede escribir el primer compilador real para un lenguaje superior simple, y así sucesivamente (cada uno construido con un "lenguaje" de nivel inferior). Sin embargo, debe saber que la creación de un sistema operativo simple puede llevar años de planificación e incluso más tiempo para desarrollar, depurar, etc. (y todo esto antes de que pueda siquiera pensar en ver algo útil en la pantalla). Y ese sistema operativo no podrá ejecutarse en ningún otro procesador que no sea el suyo. Entonces necesitas controladores, etc. para cada bit de hardware. Y hay muchos pasos a seguir desde aquí. Comenzar en el nivel de 1 y 0 no es muy gratificante, ya que no verá nada durante mucho tiempo. Simplemente no.

+0

No diría que no lo hagas; Solo recomendaría no esperar ningún resultado espectacular :) –

+1

@SimpleCoder: Sigo pensando que no deberías hacer eso hasta que no sepas exactamente lo que estás haciendo. Agregué ese consejo, sin embargo;) – jwueller

+0

Bueno, creo que nada es imposible. Y aprendiendo nunca corazones;) sin embargo, me empujaste hacia adelante con tus palabras ¡así que gracias! – Adam

1

AFAIK, nada de lo que está describiendo existe en las computadoras modernas. En la actualidad, siempre encontrará capas de sistemas operativos, bootstrapping y posiblemente incluso virtualización entre usted y el hardware.

Si realmente desea comprender los profundos secretos de la programación y cómo se ejecutan las aplicaciones en el hardware, le sugiero que tome un curso de sistemas operativos o lea sobre cómo funcionan. Por ejemplo, el diseño e implementación de los sistemas operativos de libros de Andy Tanenbaum puede ser el boleto.

+0

en la actualidad todo está basado en los viejos tiempos, y en los viejos tiempos los viejos lo hacían si desde cero;) Ahora el tiempo ha llegado a comprender lo que hicieron y por qué el mundo está trabajando de esta manera;) ¡gracias por su respuesta! – Adam

0

Puede programar sin un sistema operativo (SO), pero el sistema operativo hace el trabajo pesado por usted. Por ejemplo, con C (que desea saber), la magia no es el lenguaje en sí, sino el compilador. Lo que básicamente lo que hace es algo como esto:

código fuente

C -> La no optimizado código intermedio -> Optimizar código intermedio -> código máquina

Ahora, el código de la máquina va a el sistema operativo, que a su vez usa su propio Kernel para traducir ese código de máquina, en formato binario para que el hardware mismo pueda entender lo que quiere hacer.

Básicamente, antes de escribir un programa que se ejecuta sin sistema operativo, necesita crear su propio compilador y un kernel para que su máquina lo ejecute.

+0

bien dijiste en la primera línea que no puedo programar sin un sistema operativo, pero en las últimas líneas dijiste que necesitaba crear un compilador y un kernel, y ¿cómo debería hacerlos sin programarlos?: O;) – Adam

+1

¿Y qué tipo de sistema operativo encontrarías, por ejemplo, en juguetes, calculadoras, cafeteras, etc.? Definitivamente no necesita un sistema operativo ni escribe su propio compilador y núcleo para ejecutarlo. Puede escribir su programa en un editor hexadecimal y ponerlo en la memoria donde señala el vector de reinicio y luego tirar del pin de reinicio para ejecutar su programa. – Robert

+0

Lo siento, pero lo que dices con el punto de reinicio del vector si no me equivoco es con las fotos, que es una arquitectura completamente diferente. Es por eso que los juguetes, los calcs, etc. usan PIC que no están realmente bajo la arquitectura de vohn neumann [email protected] Lo siento, no estaba pensando claramente, PUEDE programar sin un SO, lo que quiero decir es que el sistema operativo hace que todo sea más fácil para usted. – Osukaa

1

Si desea acceder al hardware, intente comprobar microcontroladores como PIC y AVR. Recientemente tuve la oportunidad de trabajar con algunas de esas plataformas, donde el código que se escribe (en C o ensamblador) se ejecuta en metal desnudo.

Por supuesto, eso solo significa que tiene que implementar algunos servicios del sistema operativo central, como las rutinas de interrupción para manejar la entrada. Gran parte está disponible como código de ejemplo, pero aún lo suficientemente pequeño como para leer y comprender todo el sistema.

En lo que respecta a la arqueología informática, intente tomar los cursos básicos en circuitos digitales, arquitectura informática y tecnología del compilador en la universidad más cercana. Eso satisfizo mi curiosidad, así como también mi necesidad de escribir programas con códigos de operación binarios sin formato :-)

+0

gracias por su respuesta @Christoffer Voy a cuidar de estos microcontroladores;) – Adam

3

No puede hacer lo que busca terriblemente cómodamente en la mayoría de las computadoras de PC modernas, pero hay muchas de bajo costo (sub- $ 100, o incluso menos de $ 50) kits disponibles para programar micros de un solo chip más pequeños. Un micro típico tendrá unas pocas docenas de pines que pueden manejarse alto y bajo bajo el control del programa, junto con un procesador, algo de RAM (típicamente 256 bytes-8K más o menos) y algo de memoria flash para código (típicamente 8K-128K más o menos) Los kits de desarrollo suelen tener un procesador con algunos pines conectados a LED o una pantalla LCD, y con otros cables conectados a unos pocos botones. Las placas también incluirán circuitos para que pueda desarrollar su software en una PC, conectar un cable USB y transferir su código al chip.

La programación integrada es divertida. Da un poco de la sensación de la programación de la "vieja escuela", con algunas comodidades modernas más nuevas.

+0

gracias por su respuesta @supercat, sí, la sensación de la vieja escuela es lo que siento ahora y realmente me atrae, el hardware es una gran pregunta para mí, porque tengo un MAC aquí, y como he escuchado y leído aquí también, si realmente lo quiero desde el principio, necesito trabajar con el procesador y demás, y realmente no quiero colgar mi computadora ni nada, muchas gracias. para tus consejos! – Adam

+0

@CIRK: Por cierto, si quieres ir a la vieja escuela, ve a AtariAge.com y busca información sobre el cartucho Harmony. Compre un cartucho Harmony junto con un Atari 2600 y (con la ayuda de otra información en el sitio) puede escribir sus propios juegos que se ejecutarán en una consola de juegos construida en 1977. Si desea mostrar mucho de todo en ese sistema , necesita alimentar los datos al chip de video en tiempo real. El procesador es incluso responsable de generar la sincronización vertical (afortunadamente, el hardware se ocupa de la sincronización horizontal). Tal vez soy raro, pero me encanta el 2600 como una plataforma de programación. – supercat

+0

@CIRK: en la mayoría de los sistemas de videojuegos, el diseño del chip de video controla lo que puedes poner en la pantalla, excepto en los sistemas donde todo es un mapa de bits y puedes mostrar lo que quieras. El Atari 2600 es bastante limitado, pero el único límite estricto es que cada línea de escaneo tiene solo 160 píxeles. El sistema fue diseñado para mostrar dos formas movibles de un color por pantalla más un par de bloques móviles, pero uno de mis juegos presenta 16 formas móviles (uno se mueve a cualquier lugar, y cinco grupos de tres se mueven horizontalmente en posiciones verticales fijas), con cada forma coloreado independientemente en una base por línea. – supercat

2

Le sugiero que se compre un pequeño sistema de microcontrolador para jugar con él. TI tiene un pequeño sistema basado en MSP430 por $ 20. No necesita un compilador o un sistema operativo para ejecutar código en este sistema. De hecho, con solo 128 bytes de RAM sería un desafío tener un sistema operativo.

Si realmente desea comenzar desde cero, escriba su programa en código ensamblador en un pedazo de papel y tradúzcalo manualmente al código de máquina.Luego, escribe el código de la máquina en un editor hexadecimal para obtener los tuyos y los ceros. Esto realmente lo lleva al extremo y no aprenderá nada haciendo el código de la máquina a mano. Sin embargo, escribir un programa en código ensamblador te enseñará mucho.

Necesita una herramienta para obtener su programa en la memoria flash para que la CPU pueda ejecutarlo, pero una vez que se ha programado el flash, no hay herramientas, sistemas operativos ni nada de eso involucrado.

+0

¡Gracias por tus palabras! – Adam

16

Hay un libro de texto de gran llamada The Elements of Computing Systems: Building a Modern Computer from First Principles por Noam Nisan y Shimon Schocken, que sirve como base para un curso universitario impartido por los autores llama Taller En Construcción Informática - De NAND al Tetris en 12 pasos. Este curso también se enseña en otras universidades bajo diferentes nombres.

Hay un 10 minute introduction en YouTube y un 1 hour Google TechTalk en Google Video, ambos del autor mismo.

El sitio web oficial es el compañero http://nand2tetris.org/

No deje que el título "Construcción del ordenador" te engañe. Por "computadora", el autor no solo se refiere a la caja de plástico rectangular en su escritorio, sino a todo el sistema de computación , desde las compuertas lógicas individuales hasta la programación de aplicaciones de más alto nivel.

El libro/curso te enseña

  • cómo crear sus propias puertas lógicas individuales
  • cómo construir sus propios circuitos lógicos
  • cómo construir su propia CPU
  • cómo programar en código de máquina directamente
  • cómo programar en su propio ensamblador (que escribió en el código de máquina)
  • cómo escribir su propio v máquina irtual
  • cómo diseñar, implementar y el programa en su propio lenguaje de alto nivel (que usted escribió en lenguaje ensamblador)
  • cómo escribir un gestor de arranque
  • cómo escribir un sistema operativo
  • y, finalmente, cómo escribir un simple juego
+0

muchas gracias por su respuesta @ Jörg W Mittag este libro parece muy interesante, su lista acerca de lo que puedo aprender del libro se ve muy bien, esto es exactamente lo que estoy buscando, espero que si consigo este libro ¡el día me ayudará! – Adam

+0

Google Video murió hace mucho tiempo. Esto parece ser un reemplazo que funciona: https://www.youtube.com/watch?v=IlPj5Rg1y2w –

10

puede adquirir una placa de desarrollo de prototipos como Arduino, Beagleboard o MPLAB PIC board, y luego crear un machine monitor program que puede cargar y ejecutar sus programas en otros user space.

Puede programar esos microcontroladores en C o en sus respectivos instruction sets.

Hook up an LCD display a esa placa de MCU y usted tiene un monitor. Hook up a keyboard and mouse y tienes controles. (Incluso puede escribir su propio trap handlers para escribir en la pantalla LCD y leer las entradas del teclado y el mouse para entender cómo funcionan las interrupciones y excepciones en el nivel bajo. Si quiere ir más abajo, tendrá que mirar las conexiones de MCU para controlar las interrupciones líneas y diagramas de tiempo).

Voilà! ¡Has diseñado tu propia computadora desde cero!

Para responder a su pregunta sobre C, los compiladores para los primeros lenguajes de programación se escribieron en assembly, y los compiladores para el ensamblaje se escribieron en machine code.

+0

genial, muchas gracias por su respuesta @vls, muchos enlaces y recursos ¡muchas gracias! – Adam

2

No puedo decir acerca de hardware, pero si usted quiere construir su propio sistema operativo, se puede hacer eso. Es mucho trabajo, pero muy gratificante. jcomeau_itcx ya mencionó osdev.org. También está el grupo de noticias alt.os.development, aunque ha sido extremadamente silencioso en los últimos años, pero echa un vistazo al archivo si puedes encontrarlo.

Suena como que no estás desanime todos los "no lo hagas!" advertencias ... eso es bueno :-) Puedes aprender sobre sectores de arranque y escribir los tuyos en unos días, y luego verás algo en la pantalla y sabrás que estás en camino.

Muchas personas recomiendan que usted no escribe su propio sector de arranque, porque no es estrictamente parte del sistema operativo. Recomiendan que arranque usando GRUB o similar. No estoy de acuerdo, en parte porque quería aprender cómo arrancó la computadora, pero también en parte porque me resultó más fácil escribir mi propio sector de arranque que descubrir cómo usar GRUB.

C es el mejor lenguaje para escribir un sistema operativo, porque es lo suficientemente alto nivel para que pueda ser productivo, pero de bajo nivel suficiente para que pueda trabajar directamente en el procesador. Mucha gente usa gcc, pero también puedes usar Visual C++ o lo que sea (pero compila en C, no en C++, y necesitas un compilador que soporte el ensamblador en línea y pueda generar funciones sin prólogo/epilog). Puedes escribir tu código en su PC normal y luego ejecutarlo en una máquina virtual; prefiero bochs porque tiene un depurador integrado, pero hay otros.

Algunos consejos para iniciarse en su sistema operativo (después de haber resuelto su sector de arranque) ... Intel IA32 es el procesador más disponible (porque está en casi todas las PC) y la mayoría de los deversiones OS lo prefieren, por lo puedes obtener más consejos al respecto que sobre otras plataformas. No sé si ya lo hacen, pero Intel me envió copias impresas de su Manual de desarrollo de software IA32, sin costo, pero de valor incalculable. Podrías trabajar en modo real (segmentos de 16 bits, sin protección entre aplicaciones ... piensa en Windows 3.1) pero creo que vale la pena el esfuerzo para entrar en el modo protegido de 32 bits (algo complicado) y ser un poco más moderno. La memoria virtual (paginación) es opcional, pero lo hice porque mi motivación original para escribir un sistema operativo era aprender cómo el modo protegido de 32 bits brindaba protección entre las aplicaciones.

Será un viaje largo. Comencé mi sistema operativo en 2004, trabajando por las noches, pero luego comencé mi negocio en 2006 y no he tenido tiempo para eso desde entonces. ¡Entonces está muy lejos de haber terminado!

Si tiene curiosidad, hágalo. Realmente lo disfrutarás. Y si no lo haces, puedes parar.

+0

Muchas gracias por su respuesta, me motiva, ¡me alegra saber que también trabaja en un sistema operativo! – Adam

0

Hice los comienzos de un sistema operativo con una computadora que he diseñado y adoquinadas juntos hace años (creo que sería alrededor de 1985 más o menos). Es una diversión decente y aprendes mucho haciéndolo. ¡Buen éxito en tu proyecto!

Las respuestas de personas que han estado dando sobre una plataforma que puede utilizar para desarrollar su sistema operativo han sido de la variedad de hardware. Tendría que gastar un poco de $$. Asumiendo que tienes acceso a una computadora, podrías considerar usar una computadora virtual como QEMU, o VBS de Oracle y desarrollar un sistema operativo para eso. Si tienes un mac, realmente me gusta Q ya que la interfaz hace que la computadora virtual parezca incluso una. Creo que otras publicaciones aquí probablemente han mencionado osdev.org. Ese es un gran lugar para intercambiar ideas de otros DIYers y obtener ayuda para comenzar. Buen exito para ti

ACLAMACIONES

Cuestiones relacionadas