進程控制在進程管理中的作用



進程控制是進程管理中最主要的功能。

它用於創建一個新進程,終止一個已完畢的進程。或者去終止一個因出現某事件而使其無法執行下去的進程。還可負責進程執行中的狀態轉換。

一、創建進程
1.引起創建進程的事件
在多道程序環境中。僅僅有(作為)進程(時)才干在系統中執行。因此,為使程序能執行,就必須為它創建進程。導致一個進程去創建還有一個進程的典型事件,能夠有下面四類:
1) 用戶登錄
在分時系統中,用戶在終端鍵入登錄命令后,假設是合法用戶,系統將為該終端建立一個進程,並把它插入到就緒隊列中。
2)作業調度
在批處理系統中。當作業調度程序依照一定的算法調度到某作業時,便將該作業裝入到內存。為它分配必要的資源,並馬上為它創建進程,再插入到就緒隊列中。

3) 提供服務
當執行中的用戶程序提出某種請求后。系統將專門創建一個進程來提供用戶所須要的服務,比如。用戶程序要求進行文件打印,操作系統將為它創建一個打印進程,這樣。不僅能夠使打印進程與該用戶進程並發執行,並且還便於計算出為完畢打印任務所花費的時間。

4) 應用請求
在上述三種情況中。都是由系統內核為它創建一個新進程,而這一類事件則是基於應用進程的需求,由它創建一個新的進程,以便使新進程以並發的執行方式完畢特定任務。

2.進程的創建過程
一旦操作系統發現了要求創建新進程的事件后,便調用進程創建原語Creat()按下述步驟創建一個新進程。
1) 申請空白PCB。

為新進程申請獲得唯一的數字標識符。並從PCB集合中索取一個空白PCB。

2) 為新進程分配資源。

為新進程的程序和數據以及用戶棧分配必要的內存空間。

顯然。此時操作系統必須知道新進程所須要的內存大小。

3) 初始化進程控制塊。PCB的初始化包含:
①初始化標識信息,將系統分配的標識符和父進程標識符,填入新的PCB中。
②初始化處理機狀態信息。使程序計數器指向程序的入口地址。使棧指針指向棧頂。
③初始化處理機控制信息。將進程的狀態設置為就緒狀態或精巧就緒狀態,對於優先級。一般是將它設置為最低優先級,除非用戶以顯式的方式提出高優先級要求。
4) 將新進程插入就緒隊列。假設進程就緒隊列可以接納新進程,便將新進程插入到就緒隊列中。
二、進程終止
1.引起進程終止的事件
1)正常結束
在不論什么計算機系統中。都應該有一個表示進程已經執行完畢的指示。

比如。在批處理系統中,通常在程序的最后安排一條Hold指令或終止的系統調用。當程序執行到Hold指令時,將產生一個中斷,去通知OS本進程已經完畢。

2)異常結束
在進程執行期間,因為出現某些錯誤和故障而迫使進程終止。

這類異常事件非常多。常見的有:越界錯誤,保護錯,非法指令,特權指令錯。執行超時,等待超時,算術運算錯,I/O故障。

3)外界干預
外界干預並不是指在本進程執行中出現了異常事件,而是指進程應外界的請求而終止執行。這些干預有:操作員或操作系統干預,父進程請求。父進程終止。
2. 進程的終止過程
假設系統發生了上述要求終止進程的某事件后,OS便調用進程終止原語,按下述過程去終止指定的進程。
1)依據被終止進程的標識符,從PCB集合中檢索出該進程的PCB,從中讀出該進程狀態。
2)若被終止進程正處於運行狀態,應馬上終止該進程的運行,並置調度標志為真。用於指示該進程被終止后應又一次進行調度。
3)若該進程還有子孫進程。還應將其全部子孫進程予以終止,以防他們成為不可控的進程。
4)將被終止的進程所擁有的所有資源,或者歸還給其父進程。或者歸還給系統。
5)將被終止進程(它的PCB)從所在隊列(或鏈表)中移出。等待其他程序來搜集信息。
三、堵塞喚醒
1.引起進程堵塞和喚醒的事件
1)請求系統服務
當正在運行的進程請求操作系統提供服務時,因為某種原因。操作系統並不馬上滿足該進程的要求時,該進程僅僅能轉變為堵塞狀態來等待。一旦要求得到滿足后,進程被喚醒。
2)啟動某種操作
當進程啟動某種操作后。假設該進程必須在該操作完畢之后才干繼續運行,則必須先使該進程堵塞。以等待該操作完畢,該操作完畢后,將該進程喚醒。

3)新數據尚未到達
對於相互合作的進程。假設當中一個進程須要先獲得還有一(合作)進程提供的數據才干執行以對數據進行處理,則是要其所需數據尚未到達。該進程僅僅有(等待)堵塞。等到數據到達后,該進程被喚醒。
4)無新工作可做
系統往往設置一些具有某特定功能的系統進程,每當這樣的進程完畢任務后,便把自己堵塞起來以等待新任務到來。新任務到達后,該進程被喚醒。
2.進程堵塞過程
正在運行的進程,當發現上述某事件后,因為無法繼續運行,於是進程便通過調用堵塞原語block把自己堵塞。可見,進程的堵塞是進程自身的一種主動行為。進入block過程后,因為此時該進程還處於運行狀態,所以應先馬上停止運行,把進程控制塊中的現行狀態由運行改為堵塞,並將PCB插入堵塞隊列。假設系統中設置了因不同事件而堵塞的多個堵塞隊列,則應將本進程插入到具有同樣事件的堵塞(等待)隊列。最后,轉調度程序進行又一次調度。將處理機分配給還有一就緒進程,並進行切換。亦即,保留被堵塞進程的處理機狀態(在PCB中),再按新進程的PCB中的處理機狀態設置CPU環境。

3. 進程喚醒過程
當被堵塞的進程所期待的事件出現時,如I/O完畢或者其所期待的數據已經到達。則由有關進程(比方,用完並釋放了該I/O設備的進程)調用喚醒原語wakeup(),將等待該事件的進程喚醒。

喚醒原語運行的過程是:首先把被堵塞的進程從等待該事件的堵塞隊列中移出,將其PCB中的現行狀態由堵塞改為就緒。然后再將該PCB插入到就緒隊列中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM