1.
進程0是所有其他進程的祖先,
也稱作idle進程或swapper進程.
2.
進程0是在系統初始化時由kernel自身從無到有創建.
3.
進程0的數據成員大部分是靜態定義的,即由預先定義好的INIT_TASK,
INIT_MM等宏初始化.
進程0的描述符init_task定義在arch/arm/kernel/init_task.c,由INIT_TASK宏初始化。
init_mm等結構體定義在include/linux/init_task.h內,為init_task成員的初始值,分別由對應的初始化宏如INIT_MM等初始化
Process
1
進程0最終會通過調用kernel_thread創建壹個內核線程去執行init函數,這個新創建的內核線程即Process
1(這時還是***享著內核線程0的資源屬性如地址空間等)。init函數繼續完成剩余的內核初始化,並在函數的最後調用execve系統調用裝入用戶空間的可執行程序/sbin/init,這時進程1就擁有了自己的屬性資源,成為壹個普通進程(init進程)。至此,內核初始化和啟動過程結束。下面就進入了用戶空間的初始化,最後運行shell登陸界面。(註:Init進程壹直存活,因為它創建和監控在操作系統外層執行的所有進程的活動。)
——————
這段對進程0的描述引用自《Understanding
The
Linux
Kernel
-
Third
Edtion》
The
ancestor
of
all
processes,
called
process
0,
the
idle
process,
or,
for
historical
reasons,
the
swapper
process,
is
a
kernel
thread
created
from
scratch
during
the
initialization
phase
of
Linux.
This
ancestor
process
uses
the
following
statically
allocated
data
structures
(data
structures
for
all
other
processes
are
dynamically
allocated)