Siempre pensamos en un thread como una entidad que posee los siguientes elementos:

Figure 3.8: Threads: estado y flujo de control.
Sistemas como Spring han separado el concepto de estado del thread del de flujo de control (ver figura 3.9):
Nosotros hemos empleado la terminología de Spring por considerarla más clara, aunque otros sistemas que emplean nombres distintos para estas abstracciones (notablemente, una implementación de threads móviles para Mach [73] denomina thread al equivalente a un Shuttle en Spring y activación al equivalente a un thread en Spring).
En Off, los shuttles se conciben como contextos de procesador extensibles. Un shuttle en Off no es otra cosa que el estado necesario para ejecutar un thread. A diferencia de lo que sucede en Spring, los shuttles de Off pueden extenderse dinámicamente para incluir nuevos elementos en el ``estado de ejecución'' (hablaremos de esto en el apartado 3.3.2). El kernel se limita pues a crear, destruir y planificar shuttles. Como vemos en la figura 3.9, el procesador se multiplexa entre un conjunto de Shuttles que se emplean como abstracción básica para ejecutar threads.

Figure 3.9: Flujos de control (threads) y estados (shuttles)
La distinción entre shuttles y threads permite que el sistema opere con contextos de procesador (Shuttles) a nivel de planificación y gestión de procesos y, por otro lado, los usuarios perciban una abstracción distinta correspondiente a un flujo de control (thread).
Lamentablemente, a pesar de la introducción de shuttles en Spring, los
threads de Spring están dentro del núcleo y son de hecho la única
abstracción exportada a los usuarios (los shuttles son una abstracción
interna del núcleo que no es manipulable directamente por los usuarios
del sistema). Los shuttles de Off, al contrario, dejan abierta la
posibilidad de emplear otras abstracciones a nivel de usuario. El
kernel no los oculta en absoluto.
Como consecuencia de la ocultación, la planificación de los
procesadores y otros aspectos relacionados con la implementación de
los Shuttles en Spring están completamente determinados por el
kernel.
En cambio Off deja estas tareas en la medida de lo posible en manos
de las aplicaciones.