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