當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > 進(jìn)程詳解,由淺入深的進(jìn)程學(xué)習(xí)筆記
1.進(jìn)程
進(jìn)程是程序的一次動(dòng)態(tài)執(zhí)行;
進(jìn)程是程序執(zhí)行和系統(tǒng)資源管理的最小單位,存在資源的分配;
2.程序
程序是若干指令的集合;
程序是靜態(tài)存儲(chǔ)在文件中;
3.進(jìn)程控制塊
保存創(chuàng)建進(jìn)程的信息;
4.進(jìn)程號(hào)和進(jìn)程狀態(tài)
系統(tǒng)標(biāo)識(shí)進(jìn)程;S阻塞 Z 僵尸 R運(yùn)行
5.進(jìn)程的分類
1.交互進(jìn)程:由shell創(chuàng)建,依賴于終端,
終端退出,進(jìn)程退出;
2.批處理進(jìn)程:不受終端控制。進(jìn)入隊(duì)列,順序執(zhí)行
3.守護(hù)進(jìn)程:在后臺(tái)運(yùn)行,獨(dú)立于終端,
6.進(jìn)程的拷貝
子進(jìn)程對(duì)父進(jìn)程進(jìn)行的地址資源的基本全部拷貝;
(數(shù)據(jù)段,代碼段(fork后),緩沖區(qū));
各個(gè)進(jìn)程擁有獨(dú)立的虛擬地址空間0-4G;
7.Fork函數(shù)理解
Fork父進(jìn)程執(zhí)行一次,但是操作系統(tǒng)會(huì)給父子進(jìn)程不同的返回值;
8.孤兒進(jìn)程
父進(jìn)程先于子進(jìn)程退出;被init收養(yǎng);
9.終止進(jìn)程
Exit; _exit; return (main);fflush緩沖區(qū)區(qū)別
10. 僵尸進(jìn)程defunct(Z)
子進(jìn)程已經(jīng)退出,父進(jìn)程沒有回收子進(jìn)程的資源PCB(進(jìn)程控制塊);
11. 阻塞非阻塞
阻塞:信號(hào)的喚醒;等待進(jìn)程退出,回收子進(jìn)程資源;
非阻塞:立即返回,時(shí)刻輪詢;
12. 退出狀態(tài)返回wait
Wait返回保存子進(jìn)程exit退出時(shí)的退出狀態(tài);
Exit()退出狀態(tài);
實(shí)際編程時(shí),可以通過wait系統(tǒng)調(diào)用接收子進(jìn)程的退出狀態(tài),來進(jìn)行相應(yīng)的處理。
13. Wait和waitpid
Wait阻塞父進(jìn)程等待任意子進(jìn)程結(jié)束,返回結(jié)束進(jìn)程的進(jìn)程號(hào)
Waitpid
Waitpid(-1,int *status,0);=== wait(int *status)
非阻塞:
如果沒有等到結(jié)果,則返回0;
如果等到,則返回退出進(jìn)程的PID
14. Exec函數(shù)族(概念)
通過調(diào)用exec函數(shù)來取代原有進(jìn)程的數(shù)據(jù)段,代碼段,堆棧段來執(zhí)行另外一個(gè)程序。
在形式上實(shí)現(xiàn)了程序間的調(diào)用;
15. Exec函數(shù)的總結(jié)
1.可執(zhí)行文件的查找方式 :
帶路徑execl/execv
省略路徑execlp/execvp
指定路徑execle/execve
2.參數(shù)的傳遞v
Char * 列舉; char * [] 指針數(shù)組;
3.環(huán)境變量的使用e
指定環(huán)境變量,可執(zhí)行文件的查找路徑
16. 進(jìn)程的內(nèi)存空間
進(jìn)程的虛擬內(nèi)存是操作系統(tǒng)在邏輯上假想的一片內(nèi)存
進(jìn)程的虛擬內(nèi)存只會(huì)在程序?qū)嶋H運(yùn)行過程中,需要被訪問到的部分被映射到實(shí)際的物理內(nèi)存,映射通過頁表的實(shí)現(xiàn);虛擬內(nèi)存空間大,只是代表了他能訪問的內(nèi)存空間比較大,不帶表他占用的實(shí)際的物理內(nèi)存大;通過TOP命令來查看;進(jìn)程之間通過。
進(jìn)程的內(nèi)存圖