2017-02-20 65 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(),由於此函數的目的是從一個進程切換到另一個進程,因此不存在「當前進程」這樣的事情。 當前有一個進程進程,另一個進程退出但是(或者至少似乎是這樣),但是在兩者之間它只是執行正在執行的指令來保存舊進程的CPU上下文(在它的堆棧上)並且還原新進程的CPU上下文(來自堆棧)。

使用堆棧只會帶來複雜性。

現在,我認爲這是不可能的,這只是無用的。

相關問題