深入理解計算機系統 fork和execve

2021-09-09 08:46:21 字數 1123 閱讀 4263

像unix shell和web伺服器這樣的程式使用了大量得fork和execve函式,shell是乙個互動型程式,代表使用者執行其他程式。shell執行一系列的讀/求值步驟,然後終止,讀步驟讀取來自使用者的乙個命令列,求值步驟解析命令列,並代表使用者執行程式。

主程式主要是等待使用者在stdin輸入命令列,並且對命令列求值。eval函式對shell命令求值。parseline函式對命令列引數進行解析,builtin_command函式,檢查命令列引數是內建指令還是乙個可執行檔案。

#define maxargs 128

//函式宣告

void eval(char* cmdline);

int parseline(char* buf,char **ar**);

int builtin_command(char **ar**);

int main() }

void eval(char *cmdline)

}

if(!bg)

else

printf("%d %s",pid,cmdline);

} return ;

}//檢查第乙個命令列引數是否乙個內建的shell命令若是則解釋返回1,否則返回0

int builtin_command(char **ar**)

//解析shell的一行輸入行,解析以空格分隔的命令列引數,並最終傳遞給ar**向量。第乙個引數

//要麼是乙個內建指令,要麼是乙個可執行檔案,會在乙個新的子程序執行該程式。如果最後乙個引數是

//&字元,那麼該函式返回1表示在後台執行這個程式,否則返回0在前台執行。

這個簡單的shell程式是有缺陷的,因為它並不**後台子程序,修改這個缺陷需要使用訊號。

深入理解計算機系統

關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...

《深入理解計算機系統》

知乎 深入理解計算機系統 這本書需要什麼水平能看懂?15 213 18 218 15 513 introduction to computer systems schedule fall 2016 鏈結失效則 cmu15 213的課程主頁,有ppt,還有錄影,主講人就是這本書的作者。備註 備註 詳細...

深入理解計算機系統

系統的硬體組成 快取記憶體 作業系統管理硬體 程序虛擬記憶體 檔案amdahl定律 併發和並行 0和1組成的位序列,又稱為位元序列,8個位被組織成一組,成為位元組。每個位元組表示程式中的某些文字字元。系統中的所有資訊 包括磁碟檔案 記憶體中的程式 記憶體中存放的的使用者資料以及網路上傳送的資料,都是...