進(jìn)程的創(chuàng)建
在啟動(dòng)進(jìn)程時(shí)(好像會(huì)創(chuàng)建一個(gè)空轉(zhuǎn)進(jìn)程),通常會(huì)創(chuàng)建若干進(jìn)程,其中包括前臺(tái)進(jìn)程(負(fù)責(zé)與用戶交互)和后臺(tái)進(jìn)程(與特定用戶沒有關(guān)系,完成專門的功能,比如電子郵件接收等)。
當(dāng)然,除了上述創(chuàng)建進(jìn)程的過程外,一個(gè)進(jìn)程還可以由另外一個(gè)進(jìn)程創(chuàng)建。在交互式系統(tǒng)中,用戶可以點(diǎn)擊圖標(biāo)創(chuàng)建進(jìn)程。而在批處理系統(tǒng)中,用戶提交批處理作業(yè),OS認(rèn)為有資源可以運(yùn)行時(shí),會(huì)創(chuàng)建一個(gè)進(jìn)程。
在UNIX系統(tǒng)中,只有一個(gè)系統(tǒng)調(diào)用可以用來創(chuàng)建新進(jìn)程:fork。兩個(gè)進(jìn)程關(guān)系為父子關(guān)系,子進(jìn)程和父進(jìn)程擁有東西幾乎一樣但都擁有自己獨(dú)立的地址空間,進(jìn)程ID不一樣。
可寫的內(nèi)存是不可以共享的,但是,對(duì)于一個(gè)新創(chuàng)建的進(jìn)程而言,確實(shí)又可能共享其創(chuàng)建者的其它資源,如打開的文件等。在windows中從一開始父進(jìn)程的地址空間和子進(jìn)程的地址就是不同的,unix好像不是吧。
進(jìn)程的終止
分為以下四種情況:
正常退出(自愿)
出錯(cuò)退出(自愿)
嚴(yán)重錯(cuò)誤(非自愿)
被其他進(jìn)程殺死(非自愿 kill)
多數(shù)情況下,進(jìn)程都是自動(dòng)完成任務(wù)后退出的,UNIX返回exit(0)。第二種情況,若是進(jìn)程執(zhí)行時(shí)遇到非法指令會(huì)通知操作系統(tǒng),想要自行解決,正常終止。第三種情況是進(jìn)程遇到嚴(yán)重錯(cuò)誤,例如在編譯時(shí)出錯(cuò)。第四種就不解釋了。
進(jìn)程的層次結(jié)構(gòu)
進(jìn)程只有一個(gè)父進(jìn)程,但可以有多個(gè)子進(jìn)程。,在UNIX中,這將會(huì)是一個(gè)進(jìn)程組,,當(dāng)用戶從鍵盤發(fā)出一個(gè)信號(hào)時(shí),該進(jìn)程組中的所有成員都可以分別捕捉,忽略該信號(hào)或者被該信號(hào)殺死。,相反windows系統(tǒng)中沒有該概念,所有進(jìn)程地位相同,可能會(huì)有類似的作用是當(dāng)一個(gè)進(jìn)程擁有令牌時(shí)可以控制其它進(jìn)程,但是該令牌可以送給其它進(jìn)程,這樣就不存在進(jìn)程層次了。
進(jìn)程的狀態(tài)
進(jìn)程的實(shí)現(xiàn)
OS維護(hù)著一張進(jìn)程表,每個(gè)進(jìn)程都占用一個(gè)表項(xiàng)(包括程序計(jì)數(shù)器,堆棧指針,內(nèi)存分配狀況,所打開文件狀態(tài),賬號(hào),調(diào)度信息,以及狀態(tài)轉(zhuǎn)換時(shí)必須要保存的寄存器信息等),進(jìn)程切換時(shí),就會(huì)發(fā)生壓棧操作,即用戶態(tài)轉(zhuǎn)向內(nèi)核態(tài),數(shù)據(jù)壓入內(nèi)核空間。
審核編輯:劉清
-
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2261瀏覽量
94994 -
Unix系統(tǒng)
+關(guān)注
關(guān)注
0文章
15瀏覽量
9690 -
堆棧指針
+關(guān)注
關(guān)注
0文章
5瀏覽量
2936
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論