Нечто подобное возможно. Для планирования ЦП мы используем библиотеку ucontext.h
, которая дает вам доступ к блоку контекста для хранения функции, стека и других вещей. Вы должны поддерживать RunQ контекстных блоков. Чтобы добавить в RunQ, позвоните allocate_context(function);
с:
void allocate_context(void (*function) (void)){
ucontext_t* context = (ucontext_t*)malloc(sizeof(ucontext_t)); //allocate a context block
int* stack = malloc(8192); //allocate a stack of 8192 bytes
init_Context(Context, function, stack, sizeof(stack)); //call init_TCB
AddQueue(RunQ, TCB); //call addQ to add this TCB into the "RunQ"
}
void init_Context (ucontext_t context, void (*function) (void), void *stackP, int stack_size){
memset(context, '\0', sizeof(ucontext_t)); // wash, rinse
getcontext(context); //get parent context
context.uc_stack.ss_sp = stackP;
context.uc_stack.ss_size = (size_t) stack_size;
makecontext(context, function, 0); // context is now cooked
}