1、進程的定義
進程是為了描述程序在並發執行時對系統資源的共享,所需的一個描述程序執行時動態特征的概念。
進程是具有獨立功能的程序關於某個數據集合的一次運行活動,是系統進行資源分配、調度和保護的獨立單位。
進程是一個具有獨立功能的程序關於某個數據集合的一次運行活動。它可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體。它不只是程序的代碼,還包括當前的活動,通過程序計數器的值和處理寄存器的內容來表示。
進程是操作系統中最基本、最重要的概念。是多道程序系統出現后,為了刻畫系統內部出現的動態情況,描述系統內部各道程序的活動規律引入的一個概念,所有多道程序設計操作系統都建立在進程的基礎上。
2、進程的結構特征:程序、數據和進程控制塊
3、進程分類:系統進程、用戶進程
4、進程的屬性:結構性、共享性、動態性、獨立性、制約性、並發性。
5、程序和進程之間的區別:
進程能真實地描述並發,而程序不能
程序是由程序和數據和控制塊組成
程序是靜態的,進程是動態的
進程有生命周期,程序是相對長久的
一個程序可對應多個進程,反之亦然
進程具有創建其他進程的功能,程序沒有
6、進程的狀態和轉換
三種狀態模型:運行態、就緒態、等待態。
1) 運行態(running):占有處理器正在運行
2) 就緒態(ready):具備運行條件,等待系統分配處理器以便運行
3) 等待態(blocked):不具備運行條件,正在等待某個事件的完成
運行態—→等待態:等待使用資源;如等待外設傳輸;等待人工干預。
等待態—→就緒態:資源得到滿足;如外設傳輸結束;人工干預完成。
運行態—→就緒態:運行時間片到;出現有更高優先權進程。
就緒態—→運行態:CPU 空閑時選擇一個就緒進程。
五種狀態模型:增加新建態和終止態
新建態對應於進程剛剛被創建的狀態。創建一個進程要通過兩個步驟:
1)為一個新進程創建必要的管理信息,
2)讓該進程進入就緒態。此時進程將處於新建態,它並沒有被提交執行,而是在等待操作系統完成創建進程的必要操作。需要注意的是,操作系統有時將根據系統性能或主存容量的限制推遲新建態進程的提交
進程的終止也要通過兩個步驟,首先是等待操作系統進行善后,然后退出主存。當一個進程到達了自然結束點,或是出現了無法克服的錯誤,或是被操作系統所終結,或是被其他有終止權的進程所終結,它將進入終止態。進入終止態的進程以后不再執行,但依然臨時保留在操作系統中等待善后 。 一旦其他進程完成了對終止態進程的信息抽取之后,操作系統將刪除該進程。
NULL->新建態:創建子進程
新建態->就緒態:系統完成進程創建操作,且當前系統的性能和內存的容量均允許
運行態->終止態:進程到達自然結束點,或出現了無法克服的錯誤,或被操作系統終結,或被其他有中職權的進程所終結
終止態->NULL:完成善后操作
就緒態->終止態:父進程終結子進程
等待態->終止態:父進程終結子進程
七種狀態模型:增加掛起狀態
到目前為止,我們總是假設所有的進程都在內存中。事實上,可能出現這樣一些情況,例如由於進程的不斷創建,系統的資源已經不能滿足進程運行的要求,這個時候就必須把某些進程掛起(suspend)。
增加掛起狀態的原因:進程的不斷創建,系統資源已經不能滿足進程運行的要求;某些進程掛起,對換到磁盤鏡像區中,暫時不參與進程調度,平滑系統操作的負荷。
掛起: 把進程從內存轉向外存
等待 -> 等待掛起
就緒 -> 就緒掛起
運行 -> 就緒掛起
激活:從外存到內存
就緒掛起 -> 就緒
等待掛起 -> 等待
掛起就緒態(ready,suspend) 掛起就緒態表明了進程具備運行條件但目前在二級存儲器中,只有當它被對換到主存才能被調度執行
掛起等待態(blocked,suspend)掛起等待態則表明了進程正在等待某一個事件且在二級存儲器中。
- 等待態—→掛起等待態:如果當前不存在就緒進程,那么至少有一個等待態進程將被對換出去成為掛起等待態;操作系統根據當前資源狀況和性能要求,可以決定把等待態進程對換出去成為掛起等待態。
- 掛起等待態—→掛起就緒態:引起進程等待的事件發生之后,相應的掛起等待態進程將轉換為掛起就緒態。
- 掛起就緒態—→就緒態:當內存中沒有就緒態進程,或者掛起就緒態進程具有比就緒態進程更高的優先級,系統將把掛起就緒態進程轉換成就緒態。
- 就緒態—→掛起就緒態:操作系統根據當前資源狀況和性能要求,也可以決定把就緒態進程對換出去成為掛起就緒態。
- 掛起等待態—→等待態:當一個進程等待一個事件時,原則上不需要把它調入內存。但是在下面一種情況下,這一狀態變化是可能的。當一個進程退出后,主存已經有了一大塊自由空間,而某個掛起等待態進程具有較高的優先級並且操作系統已經得知導致它阻塞的事件即將結束,此時便發生了這一狀態變化。
- 運行態—→掛起就緒態:當一個具有較高優先級的掛起等待態進程的等待事件結束后,它需要搶占 CPU,,而此時主存空間不夠,從而可能導致正在運行的進程轉化為掛起就緒態。另外處於運行態的進程也可以自己掛起自己。
- 新建態—→掛起就緒態:考慮到系統當前資源狀況和性能要求,可以決定新建的進程將被對換出去成為掛起就緒態。
引起進程掛起的原因是多樣的,主要有:
1. 系統中的進程均處於等待狀態,處理器空閑,此時需要把一些阻塞進程對換出去,以騰出足夠的內存裝入就緒進程運行。
2. 進程競爭資源,導致系統資源不足,負荷過重,此時需要掛起部分進程以調整系統負荷 ,保證系統的實時性或讓系統正常運行。
3. 把一些定期執行的進程(如審計程序、監控程序、記賬程序)對換出去,以減輕系統負荷。
4. 用戶要求掛起自己的進程,以便根據中間執行情況和中間結果進行某些調試、檢查和改正。
5. 父進程要求掛起自己的后代進程,以進行某些檢查和改正。
6. 操作系統需要掛起某些進程,檢查運行中資源使用情況,以改善系統性能;或當系統出現故障或某些功能受到破壞時,需要掛起某些進程以排除故障。
可以把一個掛起進程等同於不在主存的進程,因此掛起的進程將不參與進程調度直到它 們被對換進主存。一個掛起進程具有如下特征:
-
- 該進程不能立即被執行。
- 掛起進程可能會等待一個事件,但所等待的事件是獨立於掛起條件的,事件結束並不能導致進程具備執行條件。
- 進程進入掛起狀態是由於操作系統、父進程或進程本身阻止它的運行。
- 結束進程掛起狀態的命令只能通過操作系統或父進程發出。
7、進程控制塊(Process Control Block,PCB)
定義:進程控制塊是系統為了管理進程設置的專門數據結構,用來記錄進程的外部特征,描述進程的變化過程
系統利用PCB來控制和管理進程,PCB是系統感知進程存在的唯一標志
進程與PCB一一對應