As is shown in the picture below:
Figure:
SPIN system decomposition. Arrows indicate strand related
communication.
A shrink wrapped SPIN system has the following components:
All user level threads are strands that are scheduled by some strand scheduler. Further, there exists a kernel strand scheduler which runs the spindles marked by the dispatcher as ready to run. Hence, executing spindles conform to the strand interface and are scheduled just like every other executable entity in the system. That is, there is no inherent dichotomy between user-level strands and spindles except for the level of trust granted to them. This is intented to facilitate the migration of code from user-level into kernel space.