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.