一.實驗過程
跟蹤到do_fork
跟蹤到copy_process
跟蹤到copy_thread
到此就一直在迴圈執行,最後執行到ret_from_fork.在ret_from_fork中會jump到syscall_exit。
二. 實驗分析
linux通過複製父程序建立新程序,fork、vfork、clone都是通過do_exit實現程序的建立。
-a.複製乙個pcb
-b.給新程序分配乙個新的核心堆疊(複製了thread_info,不是複製了核心堆疊)
-c.修改複製的資料,即子程序初始化。
在start_kernel中,建立了0號程序,0號程序建立了1號程序,1號程序是所有使用者態程序的祖先,0號程序是所有核心程序的祖先。之後其他程序都通過clone(),fork(),vfork()建立,是0號或1號的子孫程序。建立新程序通過複製父程序實現,先複製task_struct,再為其分配乙個核心棧,然後修改需要改動的地方,比如程序pid,程序鍊錶等等。
建立好之後,會跳轉到ret_from_fork,在ret_from_fork中會jmp到syscall_exit,此時父程序的核心棧中儲存了父程序在執行fork()前的上下文。子程序的核心棧中也從父程序那裡拷貝得到了自己的上下文。所以它們現在只有被排程到,都可以正常的執行。
接下來可能發生程序排程,如果子程序得到cpu,就可以正常執行,父程序得到cpu也可以正常執行。
新程序從ret_from_fork開始執行;決定了新程序的第一條指令位址。
Exec函式對應的系統呼叫處理過程
關於系統呼叫,前兩周已經詳細說明了,這次就主要講講exec函式對應的系統呼叫的不同之處。還有,exec對應的程式是怎樣載入到記憶體裡並且執行的。exec對應的中斷處理程式 在這裡我們首先來說明一下,在linux裡,乙個程式是如何載入執行的。一般,我們是在shell裡執行一條命令,然後就執行了乙個程式...
跟蹤分析Linux核心5 0系統呼叫處理過程
實驗分析 實驗總結 學號末尾三位 474 本實驗 於 2.在當前使用者目錄下建立linuxkernel資料夾 3.將linux5.0.2原始碼拷貝到linuxkernel資料夾下並解壓,之後所有的檔案操作都在該資料夾下執行 4.配置並編譯linux核心,使其具備除錯功能 命令如下 cd linux ...
跟蹤分析Linux核心5 0系統呼叫處理過程
虛擬機器為vmware workstation,系統為ubuntu 18.04 可能的問題 bin sh 1 bison not found scripts makefile.lib 217 recipe for target scripts kconfig zconf.tab.c failed m...