Как лучше всего сохранить окружающую среду до того, как обработчик тревоги сработает, когда сработает сигнализация? - PullRequest
0 голосов
/ 16 мая 2010

Я пытаюсь реализовать пользовательские потоки в ядре Linux 2.4 (домашнее задание), и уловка для переключения контекста, похоже, использует сигнал тревоги, который срабатывает каждые x миллисекунд и отправляет нас в обработчик сигналов тревоги, из которого мы можем longjmp следующая тема. У меня возникают трудности с выяснением того, как сохранить окружающую среду, чтобы вернуться к ней позже.

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

Полагаю, я могу посмотреть на стек и изменить его в соответствии со своими потребностями, но это кажется немного громоздким. У меня была еще одна идея - как-то передать окружение перед переходом к обработчику событий в качестве параметра к обработчику событий, но я не могу понять, возможно ли это.

Итак, я думаю, мой вопрос - как я могу сделать это правильно?

1 Ответ

1 голос
/ 17 мая 2010

Вы должны иметь возможность просто сделать что-то вроде:

if (setjmp(&from_thread))
    return;
else
    longjmp(&dest_thread, 1);

в обработчике событий. Конечно, это означает, что он вернется обратно в поток в обработчике событий - но это нормально, потому что тогда вы будете return прямо из него, поэтому он вернется туда, где был поток, когда сработал обработчик событий.

(Конечно, это предполагает, что вы уже установили отдельные стеки для потоков).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...