進程的提出
操作系統必須全方位地管理計算機系統中運行的程序
因此,操作系統爲正在運行程序建立一個管理實體——進程
進程的概念
進程是一個具有一定獨立功能的程序關於某個數據集合的一次運行活動
進程是操作系統進行資源分配和調度的一個獨立單位
進程的概念
一個進程包括五個實體部分,分別是:
•(OS管理運行程序的)數據結構P
•(運行程序的)內存代碼C
•(運行程序的)內存數據D
•(運行程序的)通用寄存器信息R
•(OS控制程序執行的)程序狀態字信息PSW
進程舉例
不同程序在不同數據集上運行:構成兩個無關進程
不同程序在相同數據集上運行:構成兩個共享數據的交往進程
進程舉例
相同代碼在不同數據集上運行:構成兩個共享代碼的無關進程
共享的代碼稱爲可再入程序,如編輯器
可再入程序是純代碼的
前述的程序與數據集均是內存級的
那麼,在不同時段中針對(同一個外存數據文件)運行(同一個外存程序文件),意味着完全不同的(P,C, D, R, Psw)
所以兩次運行構成兩個不同的進程
概念級的進程狀態
•運行態指進程佔有處理器運行
•就緒態指進程具備運行條件等待處理器運行
•等待態指進程由於等待資源、輸入輸出、信號等而不具備運行條件
進程三態模型
⑴ 運行態→等待態:
等待資源、I/O、信號
⑵ 等待態→就緒態:
資源滿足、I/O結束、 信號完成
⑶ 就緒態→運行態:
處理器空閒時選擇\更高優先權進程搶佔
⑷ 運行態→就緒態:
運行時間片到 \有更高優先權進程
進程掛起的概念
OS無法預期進程的數目與資源需求,計算機系統在運行過程中可能出現資源不足的情況
運行資源不足表現爲性能低和死鎖兩種情況
解決辦法:剝奪某些進程的內存及其他資源,調入OS管理的對換區,不參加進程調度,待適當時候再調入內存、恢復資源、參與運行
這就是進程掛起
掛起態與等待態有着本質區別,後者佔有已申請到的資源處於等待,前者沒有任何資源
進程掛起的選擇與恢復
一般選擇等待態進程進入掛起等待態
也可選擇就緒態進程進入掛起就緒態
運行態進程還可以掛起自己
等待事件結束後,掛起等待態進入掛起就緒態
一般選擇掛起就緒態進程予以恢復
進程控制塊, Process Control Block
進程控制塊PCB是OS用於記錄和刻畫進程狀態及環境信息的數據結構
藉助PCB,OS可以全面管理進程的物理實體,刻畫進程的執行現狀,控制
進程的執行
進程控制塊 - 標識信息
用於存放唯一標識該進程的信息
•系統分配的標識號
•系統分配的進程組標識號
•用戶定義的進程名
•用戶定義的進程組名
進程控制塊 - 現場信息
用於存放該進程運行時的處理器現場信息
•用戶可見寄存器內容:數據寄存器、地址寄存器
•控制與狀態寄存器內容:PC、IR、PSW
•棧指針內容:核心棧與用戶棧指針
進程控制塊 - 控制信息
用於存放與管理、調度進程相關的信息
• 調度相關信息:狀態、等待事件/原因、優先級
• 進程組成信息:代碼/數據地址、外存映像地址
• 隊列指引元:進程隊列指針、父子兄弟進程指針
• 通信相關信息:消息隊列、信號量、鎖
• 進程特權信息:如內存訪問權限、處理器特權
• 處理器使用信息:佔用的處理器、時間片、處理器使用時間/已執行總時間、記賬信息
• 資源清單信息:如正佔有的資源、已使用的資源
進程映像,Process Image
某一時刻進程的內容及其執行狀態集合:
• 進程控制塊: 保存進程的標識信息、狀態信息和控制信息
• 進程程序塊: 進程執行的程序空間
• 進程數據塊: 進程處理的數據空間,包括數據、處理函數的用戶棧和可修改的程序
• 核心棧: 進程在內核模式下運行時使用的堆棧,中斷或系統過程使用
進程映像是內存級的物理實體,又稱爲進程的內存映像
進程的內存映像示意圖
進程上下文,Process context
進程的執行需要環境支持,包括CPU現場和Cache中的執行信息
OS中的進程物理實體和支持進程運行的環境合成進程上下文,包括以下:
• 用戶級上下文:用戶程序塊/用戶數據區/用戶棧/用戶共享內存
• 寄存器上下文:PSW/棧指針/通用寄存器
• 系統級上下文:PCB/內存區表/核心棧
進程上下文刻畫了進程的執行情況
概念級的OS進程管理軟件
關鍵的進程管理軟件包括:
•系統調用/中斷/異常處理程序
•隊列管理模塊
•進程控制程序
•進程調度程序(獨立進程居多)
•進程通信程序(多個程序包)
•終端登錄與作業控制程序、性能監控程序、審計程序等外圍程序
進程實現的隊列模型
隊列管理模塊
隊列管理模塊是操作系統實現進程管理的核心模塊
操作系統建立多個進程隊列,包括就緒隊列和等待隊列
按需組織爲先進先出隊列與優先隊列
隊列中的進程可以通過PCB中的隊列指引元採用單/雙指引元或索引連接
出隊和入隊操作
進程與資源調度圍繞進程隊列展開
進程的控制與管理
• 進程創建:進程表加一項,申請PCB並初始化,生成標識,建立映像,分配資源,移入就緒隊列
• 進程撤銷:從隊列中移除,歸還資源,撤銷標識,回收PCB,移除進程表項
• 進程阻塞:保存現場信息,修改PCB,移入等待隊列,調度其他進程執行
• 進程喚醒:等待隊列中移出,修改PCB,移入就緒隊列(該進程優先級高於運行進程觸發搶佔)
• 進程掛起:修改狀態並出入相關隊列,收回內存等資源送至對換區
• 進程激活:分配內存,修改狀態並出入相關隊列
• 其他:如修改進程特權
原語與進程控制原語
進程控制過程中涉及對OS核心數據結構(進程表/PCB池/隊列/資源表)的修改
爲防止與時間有關的錯誤,應使用原語
原語是由若干條指令構成的完成某種特定功能的程序,執行上具有不可分割性
原語的執行可以通過關中斷實現
進程控制使用的原語稱爲進程控制原語
另一類常用原語是進程通信原語
進程切換
進程切換指從正在運行的進程中收回處理器,讓待運行進程來佔有處理器運行
進程切換實質上就是被中斷運行進程與待運行進程的上下文切換,處理過程是:
•保存被中斷進程的上下文
•轉向進程調度
•恢復待運行進程的上下文
模式切換
進程切換必須在操作系統內核模式下完成,這就需要模式切換
模式切換又稱處理器狀態切換,包括:
•用戶模式到內核模式
由中斷/異常/系統調用中斷用戶進程執行而觸發
•內核模式到用戶模式
OS執行中斷返回指令將控制權交還用戶進程而觸發
模式切換的基本工作任務
中斷裝置完成正向模式切換,包括:
•處理器模式轉爲內核模式
•保存當前進程的PC/PSW值到核心棧
•轉向中斷/異常/系統調用處理程序
中斷返回指令完成逆向模式轉換,包括:
•從待運行進程核心棧中彈出PSW/PC值
•處理器模式轉爲用戶模式
進程切換的工作過程
1. (中斷/異常等觸發)正向模式切換並壓入PSW/PC
2. 保存被中斷進程的現場信息
3. 處理具體中斷/異常
4. 把被中斷進程的系統堆棧指針SP值保存到PCB
5. 調整被中斷進程的PCB信息,如進程狀態
6. 把被中斷進程的PCB加入相關隊列
7. 選擇下一個佔用CPU運行的進程
8. 修改被選中進程的PCB信息,如進程狀態
9. 設置被選中進程的地址空間,恢復存儲管理信息
10.恢復被選中進程的SP值到處理器寄存器SP
11.恢復被選中進程的現場信息進入處理器
12.(中斷返回指令觸發)逆向模式轉換並彈出PSW/PC
進程切換的發生時機
進程切換一定發生在中斷/異常/系統調用處理過程中,常見的情況是:
•阻塞式系統調用、虛擬地址異常導致被中斷進程進入等待態
•時間片中斷、I/O中斷後發現更高優先級進程導致被中斷進程轉入就緒態
•終止用系統調用、不能繼續執行的異常導致被中斷進程進入終止態
進程切換與模式切換
一些中斷/異常不會引起進程狀態轉換,不會引起進程切換,只是在處理完成後把控制權交回給被中斷進程,處理流程是:
• (中斷/異常觸發)正向模式切換壓入PSW/PC
• 保存被中斷進程的現場信息
• 處理中斷/異常
• 恢復被中斷進程的現場信息
• (中斷返回指令觸發)逆向模式轉換彈出PSW/PC
NUM445
個人博客式公衆號
用心每一天