La primitive switch_to_ctx() du mécanisme de coroutines impose au programmeur d’expliciter le nouveau contexte à activer. Par ailleurs, une fois l’exécution de la fonction associée à un contexte terminée, il n’est pas possible à la primitive swicth_to_ctx() d’activer un autre contexte ; aucun autre contexte ne lui étant connu.
Un des objectifs de l’ordonnancement est de choisir, lors d’un changement de contexte, le nouveau contexte à activer. Pour cela il est nécessaire de mémoriser l’ensemble des contextes connus ; par exemple sous forme d’une structure chaînée circulaire des contextes.
On propose une nouvelle interface avec laquelle les contextes ne sont plus directement manipulé dans « l’espace utilisateur » :
int create_ctx(int stack_size, func_t f, void *args); void yield();
La primitive create_ctx() ajoute à l’ancien init_ctx() l’allocation dynamique initiale de la structure mémorisant le contexte. La primitive yield() permet au contexte courant de passer la main à un autre contexte ; ce dernier étant déterminé par l’ordonnancement.