Spin [17] permite a las aplicaciones adaptar el
funcionamiento del sistema mediante el uso de spindles,
fragmentos de código escritos en un lenguaje con tipado estricto de
datos. La idea de partida radica en que para cada política empleada
dentro del
kernel es posible establecer un spindle como
implementador de la misma. Permitiendo a las aplicaciones el
establecimiento de spindles dentro del
kernel es factible entonces que
éstas puedan emplear sus propias políticas.
El problema de este enfoque radica en que las partes del sistema que es posible adaptar están prefijadas de antemano. Sólo es posible adaptar el funcionamiento de aquellos elementos del sistema que el arquitecto del mismo ha dispuesto como spindles. Los sistemas que adoptan un esquema de especialización dinámica de código (ver apartado 4.4.3) presentan problemas similares.
Cuando una aplicación ejecuta una llamada al sistema se instalan sus
spindles de tal modo que, por ejemplo, un fallo de página, una
operación bloqueante de E/S, etc. den lugar a la ejecución del spindle
injertado por la aplicación en el
kernel. En realidad, se emplea
un esquema de despacho dinámico
para escoger
la implementación deseada. Éste trabaja conjuntamente con técnicas de
co-ubicación (carga dinámica de código en el
kernel) para permitir la
inserción de spindles en tiempo de ejecución. El despacho dinámico
introduce algo de sobrecarga en la ejecución de todas y cada una de
las llamadas al sistema, aunque esta sobrecarga es mínima.
La descarga de código de aplicación dentro del
kernel introduce además
problemas de seguridad en el sistema. El
kernel no puede confiar
en el código de aplicación, por lo que se requiere de técnicas
orientadas a garantizar la seguridad del código que las aplicaciones
introducen en el
kernel. Así se fuerza el uso de un compilador (en el
que el sistema ha de confiar, con los consiguientes problemas de
seguridad que ello supone) con tipado estricto de datos y modularidad;
Spin usa Modula 3 [57]). Se introduce así mismo el
uso de dominios de protección lógicos consistentes en espacios de
nombres empleados por el
kernel de tal modo que las extensiones
efectuadas por las aplicaciones tengan acotado el conjunto de recursos
del
kernel que pueden referenciar.
El sistema Spin es un sistema centralizado, por lo que no trata de
abordar la combinación de adaptabilidad y distribución del sistema. En
principio sería factible emplear la técnica de descarga de código
dentro del
kernel, como hace Spin, para adaptar el funcionamiento de un
sistema distribuido (aunque incurriríamos de nuevo en el problema
mencionado anteriormente).