# Exonucli

En computació, el terme exonucli (en anglès, exokernel) es refereix a un sistema creat amb fins d'investigació en l'Institut Tecnològic de Massachusetts sobre OpenBSD i un tipus de sistemes operatius similar. El seu propòsit és crear una mena de capa de programari per altres sistemes virtuals.

## Motivació

Tradicionalment els dissenyadors de nuclis intentaven fer invisibles els recursos de maquinari a les aplicacions requerint que interaccionen amb el maquinari d'alguna manera conceptual. Aquests models inclouen sistemes de fitxers per emmagatzematge en disc, espai d'adreces virtual, calendarizadores per al maneig de les tasques i sockets per a les comunicacions en xarxa. Aquestes abstraccions del maquinari feien més fàcil escriure programes en general, però limitaven el rendiment i reprimien l'experimentació de noves abstraccions. Una aplicació orientada a la seguretat podria necessitar un sistema de fitxers que no deixés dades velles al disc, mentre que una aplicació orientada a la fiabilitat necessitaria un sistema que s'emmagatzemés aquestes dades per recuperació en cas de fallades.
Un podria optar per eliminar el nucli completament i programar directament per al maquinari, però llavors la màquina sencera hauria d'estar dedicada a una sola tasca. Es pot arribar a una solució de consens: deixar al nucli destinar els recursos físics de la màquina (per exemple, blocs de disc, pàgines de memòria i el temps de CPU) a múltiples aplicacions, i deixar a cada programa decidir què fer amb aquests recursos. El programa podria enllaçar una llibreria de sistema operatiu (libOS) que implementa abstraccions comunes, o podria implementar les seves pròpies abstraccions. Teòricament un sistema basat en exonúcleo podria proveir diverses libOSes (llibreries de sistema operatiu) així com diferents tipus de sistema operatiu podrien executar sota el mateix exonúcleo. Són rellevants al seu concentració i s'utilitzen per barrr els continguts computacionals de la logística monolítica dels ordinadors usurpades

## Visió general

La idea després dels exonúcleos és obligar els desenvolupadors a utilitzar el menor nombre possible d'abstraccions, permetent fer tantes decisions com sigui possible sobre les abstraccions de maquinari. Els exonúcleos són petits, ja que la seva funcionalitat està limitada a assegurar la protecció i el multiplexat de recursos, que són moltíssim més simples que les implementacions del pas de missatges i les abstraccions de maquinari dels nuclis monolítics tradicionals.
Les aplicacions poden demanar adreces específiques de memòria, blocs de disc, etc. El nucli només assegura que el recurs està lliure i es permet a l'aplicació utilitzar-lo. Aquest accés de baix nivell al maquinari permet al programador implementar abstraccions personalitzades i ometre les innecessàries, normalment contribuint a un millor acompliment de l'aplicació. Això també permet als programadors escollir quin nivell d'abstracció desitgen.
Els exonúcleos poden ser vists com una aplicació del principi de la "fi a la fi" als sistemes operatius, en el sentit que no forcen a una aplicació a posar les seves abstraccions en diferents capes de les que van ser dissenyades amb diferents requisits al cap. Per exemple, en el projecte del exonúcleo del MIT, el servidor web Cheetah guarda paquets preformatats del protocol IP en el disc, i el nucli garanteix un accés segur al disc evitant lectures i escriptures no permeses, però com s'abstreu el funcionament del disc es deixa a l'elecció de les llibreries que l'aplicació utilitza.

## L'exonúcli del MIT

El MIT va desenvolupar dos sistemes operatius basats en exonucli, que empraven dos nuclis:Aegis, una prova del concepte amb suport limitat per a emmagatzematge, i XOK, que aplicava el concepte de exonucli més directament.
Una idea essencial del sistema exonucli del MIT era que el sistema operatiu hauria d'actuar com un executador per petits programes subministrats per l'aplicació programari, que només estan subjectes al requisit que l'exonucli ha de ser capaç de garantir que usen el maquinari de manera segura.

### Disseny

Consta de 3 capes, la capa de l'exonucli, la capa LibOS (nuclis de diversos sistemes operatius corrent sobre exonucli) i la capa d'aplicacions, corrent sobre LibOS. L'exonúcli del MIT administra el maquinari de la següent manera:

#### CPU

El nucli representa els recursos del processador com una línia temporal en la qual els programes poden col·locar intervals de temps. Un programa pot cedir la resta del seu interval de temps a un altre programa. El nucli notifica als programes dels esdeveniments del CPU, com interrupcions, excepcions de maquinari, i l'inici o final d'un interval de temps. Si un programa triga molt a manejar un esdeveniment, el nucli ho penalitzarà en les posteriors assignacions de temps, i en casos extrems el nucli pot avortar el programa.

#### Memòria

El nucli assigna pàgines de memòria física als programes i controla el Translation Lookaside Buffer (TLB). Un programa pot compartir una pàgina amb un altre donant-li permís. El nucli s'encarrega d'assegurar que els programes accedeixen només a les pàgines que tenen permeses.

#### Emmagatzematge en disc

El nucli identifica els blocs de disc a les aplicacions mitjançant la seva adreça física, permetent a l'aplicació que optimitzi la localització de les dades. Quan el programa inicialitza el seu ús del disc, subministra al nucli una funció que aquest pot emprar per determinar quins blocs controla aquest programa. El nucli usa aquesta trucada per verificar que quan assigna un nou bloc, el programa només sol·licita el bloc que li va ser assignat, a més dels que ja controlava.

#### Xarxes

El nucli implementa un filtre de paquets programable, que executa programes en un llenguatge byte code dissenyat per a una fàcil comprovació de seguretat per part del nucli.

### Aplicacions

Els sistemes operatius (llibreries libOS disposades sobre el nucli) disponibles per exonucli inclouen l'habitual sistema ExOS i un emulador per BSD. A més, l'equip del exonucli va crear el servidor web Cheetah, que usa el nucli directament.

## Rendiment

El sistema és realment robust i flexible, ja que l'única tasca del 'exonúcleo', és impedir que tinguin errors de permisos al maquinari i conflictes entre els LibOS. Exemple d'aquest disseny es troba en ExOS i Extended OpenBSD.

## Història

El concepte de exonucli va ser introduït entorn dels finals de 1994, però encara en 2005 els exonuclis segueixen sent un gran esforç en investigació i no són usats en cap sistema operatiu comercial popular. Un sistema operatiu que segueix la filosofia exonucli és Nemesis, escrit per la Universitat de Cambridge, la Universitat de Glasgow, Citrix Systems i l'Institut Suec d'Informàtica. El MIT també ha desenvolupat diversos sistemes exonucli, com el ExOS.

## Vegeu també

* Nucli monolític
* Micronucli
* Nucli híbrid