2.2 進程控制
- 進程控制是進程管理中最基本的功能。
- 進程控制包括:
◆ 創建進程
◆ 終止進程
◆ 進程狀態轉換
- 進程控制是由OS的內核完成的。
2.2.1 進程的創建
2.進程的創建
調用進程創建原語Create(),按下述步驟創建一個進程
(1)申請空白PCB;
(2)爲新進程分配資源。主要是內存空間。
(3)初始化PCB。包括:
(4)將新進程插入就緒隊列
2.2.2 進程的終止
2.進程的終止過程
OS調用終止原語,按下述過程終止進程:
- 根據被終止進程的標識,從PCB集合中找除該進程的PCB,讀出該進程狀態。
- 若被終止進程正處於執行狀態,應立即終止其執行,並置調度標誌爲真,用於指示該進程被終止後應重新進行調度。若該進程還有子孫進程,應將其所有子孫進程終止,以防止它們成爲不可控進程。
- 將被終止進程的所有資源,或者歸還給其父進程,或者歸還給系統。
- 將被終止進程(它的PCB)從所在隊列中移出,等待其他進程來搜索信息。
2.2.3 進程的阻塞和喚醒
2.進程阻塞過程
調用阻塞原語block把自己阻塞。(主動行爲)
阻塞(block)過程:
- 立即停止執行;
- 把PCB中進程狀態由“執行”改爲“阻塞”;
- 將PCB插入具有相同事件的阻塞隊列;
- 轉進程調度程序,將處理機分配給某個就緒進程,並進行進程切換——保留被阻塞進程的處理機狀態(在PCB中),再按新進程的PCB中處理機狀態設置CPU的環境。
- 3.進程喚醒過程
- 調用喚醒原語wakeup( ),將等待事件的進程喚醒。
- 喚醒原語執行過程:
- ▲將被喚醒進程的PCB從阻塞隊列移出;
- ▲將其PCB中進程狀態由“阻塞”改爲“就緒”;
- ▲將改PCB插入到就緒隊列中。
2.2.4 進程的掛起和激活
1.進程的掛起
當出現了引起進程掛起的事件時(用戶進程請求將自己掛起,或父進程請求將子進程掛起),系統將用掛起原語suspend( )將指定進程或處於阻塞狀態的進程掛起。
掛起原語的執行過程
2.進程的激活