Visita la versión flash
Propuestas
Visita el perfil del autor
Hablan del blog

SOM30


"Cómo hacer un Sistema Operativo en 30 días"
2/07/2010 17:04

Creándolo desde cero... o menos uno

Comunicaciones de Red
El primer paso para la creación de un Sistema Operativo, desde hace bastante tiempo, consiste, en los mejores casos, en buscar una implementación (kernel) de Linux o similares. En muchas ocasiones, simplemente se modifican distribuciones (como Ubuntu) modificando los paquetes que incluyen. Aun con este panorama tan desalentador, quedan por la red muchos artículos sobre Cómo hacer un Sistema Operativo desde cero (en inglés) usando lenguaje ensamblador y diversas convenciones.

Si bien esa última opción es la de más bajo nivel, consiste en asumir muchas cosas que van a pasar factura tarde o temprano en el Sistema Operativo: instrucciones no disponibles en algunos microprocesadores, mapeos en diferentes direcciones de memoria, o incluso, diferentes salidas dependiendo del fabricante del dispositivo, y sin duda un largo etcétera.

Por eso, mi idea es utilizar una arquitectura sencilla, abierta, y estándar. La que mejor se ajusta a estas condiciones es, sin duda, la Arquitectura eWa, que permite ejecutarse en dispositivos nativos o virtuales como Sistemas Operativos o páginas web.

Se trata de un diseño minimalista de un Sistema Informático. En su núcleo hay tan solo tres unidades: una CPU, una ABU, una MMU y una bujía. Aunque estos nombres recuerdan a unidades existentes en otras arquitecturas, en el caso de la Arquitectura eWa son unas unidades, a su vez, muy sencillas. El núcleo está conectado a un Espacio de Direcciones donde se encuentran los distintos dispositivos y controladores. Los dispositivos son componentes que proveen de memoria (de escritura y/o lectura constante) el Espacio de Direcciones; mientras que los controladores son componentes que conectan con el Sistema al través del Espacio de Direcciones.

La CPU (Unidad de Procesamiento Central) tiene un cometido muy reducido en comparación con la complejidad habitual de otros microprocesadores. En ésta se encuentran sólo cuatro grupos de registros: el K (1bit), el GHIJ (4bits), el ZUVW (4bits) y el 0123456789ABCDEF (16bits). Implementa dos funciones internas, la de lectura y la de escritura; la primera realiza la escritura del valor de 1 bit correspondiente al registro seleccionado del grupo 0123456789ABCDEF en el registro K, mientras que la segunda lo hace de K a 0123456789ABCDEF.
Las funciones externas que realiza están relacionadas con la obtención de las instrucciones (escribiendo cada instrucción, de 4 bits cada una -tiene por tanto 16 instrucciones-, en el grupo GHIJ) por medio de la MMU, y de comunicación con la ABU.

La ABU (Unidad Básica de Aritmética) tiene el cometido más sencillo de las tres unidades junto a la bujía. Básicamente lo que hace es realizar operaciones lógicas básicas (unarias y binarias): or, nor; nxor, nand; not; y xor, and. Tiene tres grupos de registros (MN, OP y XY) de 2 bits cada uno. Los primeros corresponden a los valores de entrada, los siguientes indican la operación a ejecutar, y en los dos últimos se pondrán los valores de salida. Por lo tanto, es capaz de hacer hasta 16 (2*8) operaciones diferentes, aunque ciertamente sólo distingue las siete anteriores.
Esta unidad conecta exclusivamente con la CPU.

La MMU (Unidad de Mapeo de Memoria) es quizás la más complicada de las unidades del núcleo del Sistema Informático. Es la puerta de acceso al Espacio de Direcciones. Los registros de la MMU se llaman punteros, y hay tres tipos. El puntero PC (o PCero, ya que es el puntero 0, aunque éste no está visible para el programador) es el encargado de apuntar al comienzo de la siguiente instrucción a ejecutar por la CPU. Por otra parte están cuatro punteros básicos llamados witQ, witR, witS y witT que permiten al programador tener apuntadas diferentes direcciones del Espacio de Direcciones. Y por último, están los punteros L, que son un número pseudo-determinado (generalmente tres u ocho) de punteros iguales que sirven para apuntar distintas direcciones, así como para también guardar datos.
Esta unidad también tiene dos tipos de funciones. El primer tipo sirve para acceder al Espacio de Direcciones, copiando al registro K de la CPU al registro del Espacio de Direcciones que apunte el puntero actual, o viceversa. El segundo tipo sirve para administrar los punteros y páginas de la propia MMU dependiendo del grupo de registros ZUVW de la CPU.

La bujía es una unidad "de arranque y recuperación" y es la encargada de arrancar el sistema, al igual que una bujía arranca el motor de un coche.

Os recomiendo seguir los links de las tres unidades, ya que en la documentación se pueden encontrar tablas y más información sobre cada una de ellas que comento en la entrada de hoy de forma breve.

Comentarios

10/12/2016 08:54
k

25/11/2015 04:48
el kernel arcos serve

28/10/2015 23:49
jajaja fue tan facil y divertido 189.165.161.220 ya se de donde es esta ip y la voy a hackear

24/07/2015 21:35
Hola Guillermo, no he visto el material completo pero lo que he leído me parece excelente. Trabajo para el área de informática médica y llegué aquí ya que tengo un interés de desarrollar un servidor prototipo interoperable, primeramente entre equipos médicos (algo que ya he venido haciendo pero con software). El prototipo sería para una implementación de bajo coste. Seguiré leyendo y ahí estaré comentando. Saludos

10/06/2015 19:29
En la columna de la derecha del portal #SOM30.

9/06/2015 20:51
donde puedo encontrar el seudocodigo?ayuda.

20/05/2015 22:42
A lo de "pasar factura" comenzando "desde cero" me refiero a que si vais a asumir las características hardware (juego de instrucciones diferente para cada arquitectura, incluso para cada microprocesador, modelo de memoria RAM, interrupciones hardware, etc.) podéis encontraros con problemas (los mismos que tienen -y solucionan a su manera- los actuales S.O.) que, con la visión de "desde menos uno" que aquí se plantea se evitan de raíz.
En cualquier caso, os animo a que penséis sobre cómo desarrollar el kernel. Al fin y al cabo, una vez superado el nivel (el 0 o el -1 y el 0), las cosas suelen ser equivalentes y los problemas que os encontraréis serán los mismos (nunca menos) que los que se describen a lo largo del blog.

20/05/2015 20:49
Buenas Guillermo, he comenzado a leer y me ha surgido una duda:
Durante esta explicación, dices que hacer nosotros mismos el kernel desde cero nos va a pasar factura, ¿a que te refieres con esto?
Me explico mejor y te pongo en contexto, ahora mismo estoy en un proyecto con dos personas más para crear un sistema operativo. Nuestra idea es hacerlo desde cero y por eso queremos aprender C y ensamblador. Si adquirimos unos conocimientos avanzados de ensamblador, ¿tu crees que nos sería posible hacer el kernel nosotros mismos sin que tuviese muchos fallos?

30/04/2015 20:05
La idea original es que no necesites un nivel experto, pero sí conocimientos de programación básicos para poder implementar los conceptos que aquí se detallan. De todas formas, lo mejor para desarrollarlos es formar un equipo multidisciplinar con amigos o conocidos y que cada persona sea el responsable de implementar cada parte.

26/04/2015 03:18
Oye
¿Necesito ser un experto para desarrollarlo?
O con que comprenda los conceptos que no entienda, porque me interesa realizar un SO pero entiendo muy poco lo que quieres decir.

31/12/2013 15:47
¿A qué códigos te refieres?
Este blog es una presentación teórica en 30 días de cómo se debería plantear la creación de un Sistema Operativo Multiplataforma. De todas formas, en la columna de la derecha de este portal podrás ver una sección de "Código".

28/12/2013 18:25
por que no sale los codigos que hay que poner

27/12/2013 17:20
Me gusta

22/09/2013 14:25
La Arquitectura eWa viene dada por la implementación que aquí se explica. En principio se pueden encontrar estas unidades emuladas en el S.I.M., aunque se podría realizar una implantación en dispositivos físicos con cierta facilidad.

20/09/2013 14:21
y como se hace todo eso?

10/08/2013 18:05
Muy bueno !!!

2/08/2013 00:02
Generalmente si tienes un PC más o menos moderno, solo puedes tener dos arquitecturas: o IA32 (x86, x86-32 o i386) si eres de 32 bits, o x86-64 (x64, x86_64) si eres de 64 bits. Hasta ahí es lo más genérico que se puede decir sobre tu Arquitectura Real.
Ahora bien, dentro de esos entornos, se puede virtualizar una Arquitectura. Eso es lo que se hace actualmente con los S.I.M., los cuales se ejecutan sobre múltiples Arquitecturas, incluidas las anteriormente mencionadas.
Por último, contestando a lo de trabajar directamente sobre una arquitectura, lo más directo es programar usando un lenguaje de "ensamblador", ya que es la abstracción más cercana al código máquina que entienden los componentes que forman la arquitectura, generalmente, incluso independientemente de qué arquitectura sea.

1/08/2013 23:57
Sigue esta guía y participa en los comentarios escribiendo todas tus dudas o propuestas. ¡Bienvenido!

23/07/2013 18:21
Buenas, acerca de la arquitectura, ¿como puedo saber de la arquitectura de mi pc o portatil por ejemplo? o cualquier otra, ya que una vez sabiendo eso ¿puedo empezar a trabajar sobre ella?

25/06/2013 18:27
ME GUSTARIA APRENDER A CREAR UN SISTEMA OPERATIVO DESDE CERO

2/04/2012 04:23
No te lvidas de la WE-RR3....????? Pues valla

23/12/2011 13:35
Busca acerca de "Temas para Windows" en google y quédate con los primeros resultados. Pero en este blog no tratamos (y sobre todo al principio como es el caso de esta segunda entrada) el diseño gráfico del Sistema Operativo Multiplataforma.
Si te interesa aportar tu granito de arena a estos temas de personalización y adaptación al usuario, te invito a escribirlos en la entrada correspondiente al "Día 29" que trata exactamente de eso.

23/12/2011 10:18
Buenas, quería preguntarte Guillermo,¿Como puedo cambiar la interfaz de mi windows?, veras estoy más que harto de la típica barra de tareas y tengo varias ideas de un escritorio totalmente diferente, no soy programador ni nada por el estilo pero tengo algunas "vagas" ideas de informática y me gustaría que me dieras un empujón para conseguir lo deseado...

17/10/2011 13:11
Creo que explicar en qué arquitectura va a funcionar este Sistema Operativo Multiplataforma es bastante más sencillo que empezar a explicarlo por el tejado.
La introducción (primeros párrafos) es absolutamente necesario de leer y comprender: ahí se establece el motivo por el que se asientan esas bases y no las 'tradicionales'.

17/10/2011 12:04
asi empieza la explicacion...me parece un poco abstracto la forma de empezar a explicar un s.o

13/01/2011 04:28
q loco

11/08/2010 17:05
Actualizo para decir que en http://www.som30.es/fuente/sistemainformatico/ ya hay varias Sistemas Informáticos implementados para distintas tecnologías.

7/07/2010 12:04
Hola.
Pues todavía no existe un prototipo real de esta arquitectura (aunque sería muy barato y sencillo), pero sí existen implementaciones en "c" y en "flash" para virtualizar en ordenadores de hoy en día.
Gracias por tu comentario.

7/07/2010 11:24
Por lo que he entendido para ejecutar el SO vas a usar un hardware totalmente innovador que no existe en el mercado, ¿has construído ya un prototipo? ¿Has pensado en crear una capa de abstracción que emule tu hardware sobre el hardware de hoy en día?
Muy buena iniciativa y seguiré prestando atención a los siguientes capítulos ;)

Deja tu comentario


Se enviará usando la Red Social @visitante
¿Quieres responder con otra cuenta de TuEntidad.es?
Usa MonoMola o LoTienes.

Búsqueda

Calendario

- Día 1
- Día 2
- Día 3
- Día 4
- Día 5
- Día 6
- Día 7
- Día 8
- Día 9
- Día 10
- Día 11
- Día 12
- Día 13
- Día 14
- Día 15
- Día 16
- Día 17
- Día 18
- Día 19
- Día 20
- Día 21
- Día 22
- Día 23
- Día 24
- Día 25
- Día 26
- Día 27
- Día 28
- Día 29

Código

- Sistemas Informáticos
- Compilador
- GAM
- GAE
- Kérnel
- LiSi
- ViSi
- SAM
Licencia LSW

Comentan

- Día 1 (16) 8/06 02:28
- Día 29 (19) 13/03 04:10
- Día 10 (18) 23/01 22:16
- Día 3 (9) 10/12 08:55
- Día 2 (19) 10/12 08:54
- Día 7 (4) 5/11 21:29
- Día 11 (44) 25/10 01:39
- Día 4 (3) 24/09 13:45
- Día 28 (2) 6/04 04:01
- Día 26 (1) 17/07 01:21
- Día 27 (4) 29/05 14:50
- Día 8 (9) 29/05 05:35
- Día 24 (2) 18/01 05:16
- Día 17 (5) 18/01 05:10
- Día 13 (7) 6/12 18:44
- Día 15 (1) 30/08 08:53
- Día 6 (2) 25/08 02:14
- Día 5 (4) 7/04 00:50
- Día 21 (6) 26/06 21:26
- Día 18 (2) 26/06 03:09
- Día 23 (2) 22/04 13:45
- Día 25 (1) 11/03 21:34
- Día 19 (3) 19/01 17:33
- Día 14 (2) 7/01 22:06

Valid HTML 4.01 Transitional