Linux內核的七大區間 1.進程管理(進程創建,進程的三種狀態,進程間的調度,調度算法...) 2.內存管理(段式管理(Linux所有段都從0開始),頁式管理--地址偏移量) 3.系統調用(C語言庫函數的區別) 4.網絡協議(TCP/IP協議) 5.UFS--虛擬文件系統==》Linux驅動總線模型 6.驅動管理(網絡設備,塊設備,字符設備...) 7ARCH(對各個硬件平臺的支持...RAM x86 power pc)
?
進程數據結構
進程的靜態描述:由三部分組成:PCB,有關程序段和該程序段對其進行操作的數據結構集
進程控制塊(PCB):用于描述進程情況及控制進程運行所需的全部信息
代碼段:是進程中能被進程調度程序在CPU上執行的程序代碼段。
數據段:一個進程的數據段,可以是進程對應的程序加工處理的原始數據,也可以是程序執行后產生的中間或最終數據
進程是操作系統對資源的一種抽象:一個進程:代碼段、數據段,堆棧段(內存四區)+進程控制塊(PCB)
PCB是操作系統感知進程存在的一個重要數據結構。
?
fork函數和vfork函數 vfork()函數有個限制,子進程必須立刻執行_exit或者exec函數,
即使fork實現了copy on write,效率也沒有vfork高,但是我們不推薦使用vfork,因為幾乎每一個vfork的實現,
都或多或少存在一定的問題 結論: 1.fork子進程會寫時拷貝父進程的數據段;vfork子進程與父進程共享數據段 2.fork父子進程的執行次序不確定;vfork子進程先運行,父進程后運行
vfork和exec函數在一起
execve替換進程映像(加載程序),注意execve是一個系統調用;替換意味著:代碼段,數據段,堆棧段,進程控制塊PCB全部替換
?