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