Otra vez al ruedo: ¿hacer un SO?

Iniciado por SERBice, 17 Febrero 2011, 10:56 AM

0 Miembros y 1 Visitante están viendo este tema.

SERBice

Habia hecho un hermoso post, pero de idiota aprete backspace fuera del area de texto y el navegador perdio todo (cargó la págian anterior) jaja.... que paja pocas ganas de escribir todo de nuevo....


Bueno, la idea es esa, hacer un SO. Esto ya se ha intentado varias veces antes y muchas más se ha hablado.

Antes de que alguien venga a decir "es dificil", "mejor hagan una distro de linux", "estudien minix" o cosas similares aviso que la idea es, desde un comienzo, partir de "la nada", aprender, desarrollar y construir algo par air viendo su avance.

Es MUY buena idea ver, analizar y usar fragmentos del codigo de Linux, Minix o sistemas GNU / GPL, pero solo como referencia, no es la idea hacer otra distro de un sistema existente, sino construir uno.

¿con que finalidad?: Aprender, divertirse, basicamente esas dos finalidades. Posiblemente sea un sistema Horrible, inestable, reducido,... mal hecho en muchos aspectos, pero no es la idea superar o igualar a ninguno de los sistemas existentes (ni siquiera al MS DOS :P)


Me gustaria saber quien esta dispuesto a intentarlo, con entusiasmo y perseverancia, sabiendo que no sera tarea facil y que llevara mucho tiempo, si sabiendo esto aun te gusta la idea, pues bienvenido al tren.


Basado en experiencias anteriores, seria bueno evitar tratar cuestiones como "¿que nombre le vamos a poner?" o "¿y el logo?"... o discutir sobre si sera grafico, consola, si tendra soporte para video en 3d y esas cosas qeu estan a AÑOS LUZ del punto actual.

En este punto inicial lo que hay que lograr es:

Boot desde FAT 12, 16 y 32 (floppy y pendrive/HDD), tampoco seria mala idea EXT2 o similares dada su amplia especificacion disponible.

Secuencia de inicio: Boot Sector > Loader > Kernel

El loader deberia, en teoria entrar al modo protegido (32bits. Aca hay que hacer una breve comprobacion de hardware), mapear la memoria, controlar interrupciones y luego cargar el kernel desde el sistema de archivos (el cual habra que detectar oportunamente si se usadan varios sistemas de archivos).

El kernel se deberia de encargar de gestionar la memoria mapeada con el loader (¿convendra mapear la memoria con el kernel?... buena pregunta), proporcionar funciones apis (en lo posible compatibles con POSIX) para manejo de sistema de archivos, keyboard, puerto serial, paralelo, video (text mode inicialmente).



Creo que eso es mas que suficiente para un comienzo, de hecho es mucho (BOOT SECTOR en varios sistemas de arhcivos, un loader y la carga de un kernel)


El lenguaje a usar cual será?

Para el boot sector, creo que no queda otra alternativa que usar ASM, la buena noticia es que tenemos buenos codigos disponibles en Linux, ReactOS, FreeDOS, MenuetOS, etc.

FASM es una buena alternativa dado que permite compilar para muchas arquitecturas (x86, x64 seran los preferidos) y plataformas (windows, linux... que no usaremos, y la compilacion binaria "bruta", que si usaremos)

para el Loader, el Kernel y el resto, C / C++, segun sea aplicable.

Para C/C++ una buena alternativa es CodeBlocks que usa el compilador GCC y esta disponible (IDE y Compilador) para Windows y Linux, eso facilitaria las tareas de depuracion y programacion entre los interesados que tengan o queiran probar compilar/desarrollar desde diferentes sistemas.


Sin mas que decir espero que alguien se sume a la idea y que podamos llegar a hacer algo presentable y no muera en el intento como ha ocurrido antes en muchos proyectos.

EDIT:

Aca dejo un par de links utiles, ire agregando mas con el paso del tiempo.

Los pongo en el primer post por organizacion.

Especificaciones de los sistemas de arhcivos FAT:
Citarhttp://dspace.epn.edu.ec/bitstream/123456789/979/2/T10745CAP3.pdf
http://www.ucontrol.com.ar/wiki/index.php?title=FAT_al_desnudo#Estructura_de_datos_de_la_FAT

Khronos14

Yo me apunto de buena gana, pero a ver en que queda la cosa  ;D

Yo creo que lo mejor es que el Kernel sea puramente x64, seguir usando x86... Hasta los netbooks de hoy en día traen procesador x64.

Nasm también sería una buena opción.

Saludos.

Anay

Perfecto¡¡ maravilloso has puesto en un post mis ideas, todo lo que llevaba un tiempo pensando hacer.
Contad conmigo, yo me apunto, aunque estoy acabando la carrera y mi tiempo sera limitado contadconmigo.
Una pregunta ¿monolitico o micronucleo?  Yo tenia pensado hacer un micronucleo modificado, por lomenos para que se diferencie de algo a Linux, tener software libre donde elegir.
Un saludo.

SERBice

La idea de x64 es tentadora, pero me parece algo demasiado alto para comenzar. Todos los procesadores de 64bits son compatibles con x86, y pueden ejecutar 16, 32 y 64bits (el tio bill no hizo compatible windows x64 con aplicaciones de 16bits simplemente por capricho, podia haberlo hecho).

De todas formas, queda a criterio de la mayoria del grupo si será x86 o x64, lo decidiremos en grupo, como una democracia.


Nasm también sería una buena opción claro, para el boot sector, no para el SO :D


Por otro lado, ¿monolitico o micronucleo?...


Linux es monolitico con la posibilidad de cargar modulos, Windows es monolitico hibrido. Minix es micronucleo y Mac OS X tambien es micro nucleo.

A mi, personalmente me gusta mas monolitico... no me gusta mucho la idea de dejar las aplicaciones tan "libres", prefiero que el SO se encargue de todo el hardware, como linux. Corrijanme si me equivoco.

micronucleo modificado, ¿a que te refieres? ¿hibrido?

Bueno pues, ya somos 3, espero que mas gente se apunte, cuantos mas seamos, mejor será, de todos modos debemos organizarnos bien para que no se fragmente el grupo por diferencias de ideas.... pero eso se verá cuando seamos un grupo de mayor tamaño, hasta ahora solo somos 3, lo cual no está mal ^^

Leber

Hola, que tal.

Decirte que a mi también me interesa bastante la idea, y creo que puede estar muy bien para aprender.
Respecto a monolitico o micronucleo, en mi opinion creo que es mejor que sea el so quien gestione el hardware.

La verdad es que me gustaría bastante participar.

Saludos

"Solo los tontos carecen de preucupaciones." Johann Wolfgang Goethe

SERBice

Perfecto Leber, bienvenido :D

He agregado unos links utiles al final del primer post. Ire agregando mas (en el primer post por cuestiones de organizacion) con el paso del tiempo y segun sea la necesidad.

Littlehorse

Mucha suerte con el proyecto, para cualquier duda aquí estamos.

Les agrego un link donde podrán encontrar bastante información sobre el tema.

http://wiki.osdev.org/Main_Page

Saludos
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

Anay

#7
Windows es micronucleo modificado (lo he estado analizando hace unos dias en sistemas por eso lo se ;) )
A mi me gusta mas micronucleo por el tema de que nohabra que eestar compilando todo el santo dia, pero vamos,  me da igual yo lo hago por aprender, nada mas.

Bueno para quien quiera irse dando ya una idea dejo el link de los manuales de los procesadores Intel: http://www.intel.com/products/processor/manuals/index.htm

Estaría bien estandarizar los programas que vamos a usar, yo trabajare sobre Windows asi que que haya para ambos SO please :P

SERBice

Cita de: Anay en 18 Febrero 2011, 09:21 AM
Windows es micronucleo modificado (lo he estado analizando hace unos dias en sistemas por eso lo se ;) )
A mi me gusta mas micronucleo por el tema de que nohabra que eestar compilando todo el santo dia, pero vamos,  me da igual yo lo hago por aprender, nada mas.

Bueno, por lo de compilar todo el dia, no creo que sea problema... no sera (al menos no en sus inicios) como el kernel linux que necesita de mucho tiempo para compilar.

Por otra parte, Windows NT es un monolitico modificado, y no al reves. De todas formas, no deja de ser un nucleo hibrido.

Cita de: http://es.wikipedia.org/wiki/Arquitectura_de_Windows_NTModo núcleo: Tiene acceso total a la memoria del sistema y los dispositivos externos. Los núcleos de los sistemas operativos de esta línea son todos conocidos como núcleos híbridos, aunque hay que aclarar que este término está en discusión ya que este núcleo es esencialmente un núcleo monolítico que está estructurado al estilo de un micronúcleo. La arquitectura dentro del modo núcleo se compone de lo siguiente:[1]
1.Un núcleo híbrido.
2.Una Capa de Abstracción de Hardware (HAL).
3.Controladores o drivers.
4.Executive: Sobre el cual son implementados todos los servicios de alto nivel.



Cita de: Anay en 18 Febrero 2011, 09:21 AMEstaría bien estandarizar los programas que vamos a usar, yo trabajare sobre Windows asi que que haya para ambos SO please :P


Como dije en el primer post, FASM o NASM para el boot sector (Disponible para Windows y Linux) y CodeBlocks (IDE para C/C++ con el compilador GCC, disponible para Windows y Linux).

Luego pondre unos links de interes en el primer post, mas los que han aportado. :D

ace332

Buenas, me gustaria formar parte del proyecto  ;D

PD: No se mucho (casi nada  :xD) sobre como hacer un SO pero me gustaría aprender..