算法 fork
{ 檢查可用的內核資源;
取一個空閒的進程表項和惟一的PID號;
檢查用戶沒有過多運行進程;
將子進程的狀態設置為
將父進程進程表項的數據拷貝到子進程進程表項中;
當前目錄和根目錄的索引節點引用計數加
文件表中打開文件的引用計數加
在內存中作父進程上下文的拷貝;
fork的算法描述(續)
在子進程的系統級上下文中壓入虛設系統級上下文層;
if (正在執行的進程是父進程)
{ 將子進程的狀態設置為
return(子進程的PID);
}
else {
初始化U區的計時域;
return(
}}
系統調用exec
exec系列中的系統調用都完成同樣的功能
這一組系統調用的主要差別在於給出參數的數目和形式不同
int execl(path
char *path
int execv(path
char *path
exec算法描述
算法 exec
{ 取文件的索引節點(算法namei);
驗證文件可被執行
讀文件頭
將exec參數從老地址空間拷貝到系統空間;
for (與該進程附接的每個區)
使區與進程斷接(算法detachreg);
for (裝入模塊中指定的每個區);
{ 分配新區(算法alloreg);
exec算法描述(續)
將新區附接到進程(算法attachreg);
[
From:http://tw.wingwit.com/Article/program/czxt/201311/24164.html