Adaptive Domain Environment Operating Systems (ADEOS) proporciona un entorno flexible para compartir los recursos hardware para múltiples sistemas operativos o múltiples instancias de un mismo sistema operativo. ADEOS activa múltiples núcleos, llamados dominios, que existen simultáneamente sobre el mismo hardware. Ninguno de éstos dominios necesariamente conoce la existencia del resto, pero todos ellos si conocen de la existencia de ADEOS. Un dominio puede ser un Sistema Operativo completo, pero no necesariamente.
La arquitectura de ADEOS es la de núcleo dual y más específicamente la llamada nanonúcleo.
Para permitir que las interrupciones y los eventos del sistema sean repartidos para compartir por los múltiples núcleos (normalmente sistemas operativos completos), ADEOS define lo que ha llamado abstractamente "dominio".
Un dominio es un componente software del núcleo base al cual ADEOS puede notificar:
Un dominio puede ser accesible como un módulo dinámico del núcleo, o como uno estático formando parte de una imagen del núcleo, no produciendo ningún tipo de incidencia en el comportamiento de ADEOS. ADEOS también puede asegurar que los eventos sean disparados en el orden correcto para los distintos dominios definidos, gracias a ello, es posible proporcionar determinismo.
Esto nos permite asignar a cada dominio una prioridad estática. El valor de esta prioridad determina el orden en que los eventos son tratados por los dominios. Todos los dominios son encolados de acuerdo a sus respectivas prioridades, formando un pipeline de forma abstracta, que es el que usa ADEOS para manejar el flujo de eventos desde el más prioritario hacia el menos prioritario. Los eventos de entrada son encauzados a la cabecera del pipeline (dominio más prioritario) y progresan hacia la cola (dominio menos prioritario).
El código del núcleo Linux es enteramente él sólo un dominio especial predefinido, que es creado por ADEOS en las primeras etapas de carga de Linux. Este dominio inicial normalmente hace referencia al root domain hasta que la infraestructura proporciona lo suficiente para cargar el resto de dominios dinámicamente (por ejemplo el módulo cargador del núcleo).
ADEOS controla todas las interrupciones, los traps de la CPU y las excepciones del nivel hardware, ya que reprograma el software del manejador. De hecho, ADEOS actualmente reemplaza los manejadores instalados anteriormente por Linux durante el arranque por los suyos propios para las correspondientes interrupciones y eventos. En la plataforma x86, se hace simplemente cambiando el descriptor de interrupción de la tabla. En cualquier momento dada una CPU con ADEOS activado, un dominio puede estar:
Cuando un dominio ha finalizado de procesar una interrupción/evento que ha recibido, llama a un servicio especial de ADEOS (adeos_suspend_domain()) el cual provoca que se pase la interrupción/evento al siguiente dominio del pipeline y así sucesivamente, realizándose un ciclo del más prioritario al menos prioritario.
Hay que destacar que ADEOS reanuda un dominio sólo si tiene que procesar una interrupción/evento o si ocurre que ha sido interrumpido por un dominio más prioritario que ha recibido alguna interrupción/evento para procesar, en otras palabras, no se produce intercambio entre dos dominios a menos que haya trabajo pendiente para alguno de ellos.
Cuando una interrupción ocurre en un sistema ocioso, ADEOS despierta al dominio más prioritario interesado en ella y el ciclo de proceso del pipeline comienza de nuevo.
Dados los dominios A,B,C donde la prioridad es A>B>C, se puede decir que:
La interfaz entre un dominio y ADEOS está compuesta de: