Linux內核分析(六)Linux新進程創建處理過程

Linux創建新進程使用fork系統調用,系統調用的前期和一般的系統調用並沒有什麼特別的區別,而區別在於fork處理過程do_fork的內部。do_fork的處理過程可總結爲:

1. 複製父進程的程序控制塊;

2. 修改複製過來的進程控制塊,將控制塊中的屬性值改爲子進程自己的值,比如,棧指針指向自己的棧地址,並初始化棧頂指針,打開的文件列表初始化等等,而EIP的值將被設置爲ret_from_fork的地址,ret_from_fork過程會跳轉到sys_call_exit去執行。

3. 轉去子進程執行。

 

所以,在內核中,新創建的進程將從ret_from_fork處繼續執行,然後跳轉到sys_call_exit,這個過程中不會再調用進程切換檢查的部分;而在用戶程序看來,新創建的子進程將會從fork ()系統調用的下一條指令處開始執行,而這一般會是fork函數返回值的賦值和檢測。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章