Я пытаюсь реализовать пользовательские потоки в ядре Linux 2.4 (домашнее задание), и уловка для переключения контекста, похоже, использует сигнал тревоги, который срабатывает каждые x миллисекунд и отправляет нас в обработчик сигналов тревоги, из которого мы можем longjmp следующая тема. У меня возникают трудности с выяснением того, как сохранить окружающую среду, чтобы вернуться к ней позже.
По сути, у меня есть массив jmp_buffs, и каждый раз, когда происходит «переключение контекста» с помощью тревоги, я хочу сохранить предыдущий контекст в соответствующую запись массива и longjmp в следующий. Однако сам факт того, что мне нужно сделать это из обработчика событий, означает, что простое использование setjmp в обработчике событий не даст мне именно ту среду, которую я хочу (насколько это касается стека и счетчика программы), потому что стек имеет вызов обработчика события, и компьютер находится в обработчике события.
Полагаю, я могу посмотреть на стек и изменить его в соответствии со своими потребностями, но это кажется немного громоздким. У меня была еще одна идея - как-то передать окружение перед переходом к обработчику событий в качестве параметра к обработчику событий, но я не могу понять, возможно ли это.
Итак, я думаю, мой вопрос - как я могу сделать это правильно?