我正在尋找初始化第一個進程的pid = 0的linux內核(2.4.x)中的代碼。在linux內核中,初始化的第一個進程在哪裏?
許多搜索提供了許多線索,但我仍然無法找到它。
任何指針,任何人?在端
// idle process, pid = 0
cpu_idle(); // never return
我正在尋找初始化第一個進程的pid = 0的linux內核(2.4.x)中的代碼。在linux內核中,初始化的第一個進程在哪裏?
許多搜索提供了許多線索,但我仍然無法找到它。
任何指針,任何人?在端
// idle process, pid = 0
cpu_idle(); // never return
退房rest_init()初始任務結構設置由宏INIT_TASK()
,在include/linux/init_task.h
定義。所有其他任務結構由do_fork
創建。
內核初始化的第一個進程是交換進程或空閒線程。這個線程永遠運行。當系統中沒有其他進程處於活動狀態時,該線程[在ARM架構的arch/arm/kernel/process.c中找到cpu_idle()函數]調用依賴於體系結構的pm_idle函數,該函數將CPU摺疊直到定時器中斷或其他中斷將其喚醒。
通過宏INIT_TASK在arch/arm/kernel/init_task.c中初始化swapper進程[pid = 0]。
這應該是被接受的答案。我會補充說'init/init_task.c'還使用'INIT_THREAD_INFO()'爲PID 0(僅在引導CPU上)設置'thread_info'和內核棧。然後,對於x86架構,'startup_32'(在'arch/x86/kernel/head_32.S'中)將指向PID 0內核堆棧的指針加載到ESP中。從那時起,Linux在PID 0的「進程上下文」中。 –