2017-02-20 5 views
1

Почему функция __switch_to объявлена ​​как принимающая параметры через регистры (а не по соглашению через стек)?Зачем передавать параметры функции `__switch_to` через регистры?

extern void FASTCALL(__switch_to(struct task_struct *prev, struct task_struct *next)); 

Это может быть актуально для случая, когда мы возвращаемся из нее в ret_from_fork и не маркировать 1? как?

исходный код: https://www.kernel.org/pub/linux/kernel/people/marcelo/linux-2.4/include/asm-i386/system.h

(да, я знаю, что это старый по мне интересно, в чем причина)

ответ

1

Короче говоря, когда вы говорите о «стопке» вы на самом деле говорим о «стеке текущего процесса» и во всех нормальных ситуациях вам не нужно указывать это. Но для __switch_to() нет такой вещи, как «текущий процесс», поскольку целью этой функции является переход от одного процесса к другому. Существует текущий процесс при входе и другой при выходе, но (или, по крайней мере, это так), но между ними только рабочие исполнительные инструкции сохраняют контекст процессора старого процесса (в его стеке) и восстанавливают ЦП контекста нового процесса (из его стека).

Использование стека приведет к осложнениям.

Теперь я не думаю, что это невозможно сделать, это просто бесполезно.

Смежные вопросы