Límite de memoria direccionable según los bits del microprocesador


Los bits de un microprocesador y el bus de datos limitan la cantidad de RAM utilizable por el sistema, en este artículo explicaré los diferentes límites de un microprocesador x86 en 16, 32 y 64 bits.

 


Autor: kr0m -- 02/07/2020 03:18:27

StellatorOS: Video driver básico


En este artículo aprenderemos como programar un driver de video básico en C, sabiendo que los carácteres a mostrar por pantalla se mapean a una zona de memoria compartida entre la tarjeta gráfica y el SO seremos capaces de imprimir toda clase de carácteres en las coordenadas deseadas. Nuestro driver soportará impresión de carácteres, impresión de strings, impresión multi línea y scrolling. 


Autor: kr0m -- 28/06/2020 05:45:42

StellatorOS: Cross-compiler y BinUtils


Compilar código fuente de 32bits en un sistema de 64bits accarea muchos problemas, hasta ahora nos ha sido indiferente ya que casi todo el código era ASM, pero seguir desarrollando así es una fuente de problemas en el futuro. Si utilizamos el compilador de nuestro sistema, este hará muchas suposiciones específicas a nuestro SO/Arquitectura, además utilizará las librerias y cabeceras propias. Para evitar todo esto vamos a instalar un cross-compiler de 32bits nativo, se acabaron las opciones como -m32 en nuestro gcc, además compilaremos también unas binutils de 32bits.

 


Autor: kr0m -- 25/06/2020 02:41:37

StellatorOS: Hardware I/O


Históricamente la CPU se comunicaba directamente con los controladores de dispositivos, pero esto implicaba que la CPU tuviese que bajar su velocidad a la del dispositivo mas lento del sistema. Para evitar este problema actualmente la CPU se comunica con el bus controller, este a su vez se comunicará con el bus controller de esa tecnología conformando de esta manera una jerarquía de buses, esta jerarquía es necesaria para no forzar al bus controller superior a trabajar a la velocidad del dispositivo mas lento. En este artículo aprenderemos como comunicarnos con los dispositivos mediante I/O ports.


Autor: kr0m -- 21/06/2020 05:39:06

StellatorOS: Wildcards gmake


Conforme vaya creciendo nuestro SO cada vez resultará mas inmanegable tener todos los ficheros en un único directorio, debemos definir una estructura, una froma sencilla de organizar el código sería esta:

  • boot: Cualquier código relacionado con el bootloader o subrutinas utilizadas por este
  • kernel: Cualquier código relacionado con el kernel
  • drivers: Código de drivers específicos

 


Autor: kr0m -- 20/06/2020 02:20:51

StellatorOS: Construcción de la imagen del SO mediante gmake


Hasta ahora cada vez que realizabamos alguna modificación en el bootloader o en nuestro SO teníamos que recompilar y linkar los ficheros a mano, a lo largo de la historia programadores anteriores ya se vieron en tal tesitura así que crearon una herramienta llamada make, mediante make podremos indicar dependencias entre ficheros y comandos a ejecutar en caso de que alguno de ellos haya sido modificado.

 


Autor: kr0m -- 19/06/2020 01:43:31

StellatorOS: EntryPoint


Cuando compilamos código en C el compilador decide en que posición del binario debe insertar cada parte de código y datos, hasta ahora eso no ha sido un problema ya que el kernel solo tenía una función, pero conforme vaya creciendo puede que las primeras instrucciones no correspondan con la función main().

 


Autor: kr0m -- 18/06/2020 02:23:19

StellatorOS: Cargando nuestro kernel en C


Ahora que ya tenemos unos vastos conocimientos sobre ASM y C podemos proceder a arrancar nuestro kernel, los pasos a seguir serán:

  • Escribir y compilar el código del kernel
  • Escribir y ensamblar el código del bootloader
  • Crear una imagen de disco que incluya nuestro bootloader y el kernel
  • Cargar el kernel en RAM
  • Cambiar a modo protegido de 32 bits
  • Ejecutar nuestro kernel

 


Autor: kr0m -- 17/06/2020 01:24:04

StellatorOS: Punteros en C


C nos permite utilizar punteros, mediante estas variables podremos almacenar direcciones de memoria en vez de datos directamente, posteriormente se puede hacer referencia a estas direcciones de memoria para escribir o leer en ellas.

 


Autor: kr0m -- 16/06/2020 03:01:07

StellatorOS: Compilación, linkado, gestión de la pila y variables en C


La programación en ensamblador nos permite un control absoluto sobre el hardware, pero avanzar en este lenguaje es un proceso muy lento además nuestro código es tan específico para la CPU que estemos utilizando que lo hace poco portable a otras arquitecturas. Por ese motivo utilizaremos C para la mayoría de código de nuestro SO, en este artículo veremos como C gestiona la pila y la definición de variables.

 


Autor: kr0m -- 15/06/2020 02:09:39