進程的管理與調度
進程的概念
- 定義:進程是具有獨立功能的程序關於某個數據集合上的一次運行活動,是系統進行資源分配、調度和保護的獨立單位。
- 創建方式:系統程序模塊統一創建;由父進程創建。
- 進程的特性:動態性、並發性、獨立性、制約性、異步性、結構性
進程和程序的區別
- 進程更能真實第描述並非,程序不能;
- 進程是由程序、數據和控制塊三部分組成的;
- 程序是靜態的,進程是動態的;
- 進程是有生命周期,有誕生有消亡,程序相對長久;
- 一個程序可以對應多個進程,反之亦然;
- 進程具有創建其他進程的功能,程序沒有。
進程的狀態與轉換
運行態:進程占有CPU,並在CPU上運行
就緒態:一個進程已經具備運行條件,由於無CPU暫時不能運行
等待態:因等待某種事件的發生而暫時不能運行的狀態
進程控制塊PCB
- 進程控制塊是操作系統為了管理進程而設置的一個數據結構,用來記錄進程的外部特征,描述進程的運動變化過程。
- PCB是系統感知進程存在的唯一標志,進程與PCB是一一對應的。
通常包含如以下的信息:
- 進程標識符(唯一)
- 進程當前狀態,通常同一狀態的進程會被放到同一個隊列;
- 進程的程序和數據地址;
- 進程資源清單。列出所擁有的除CPU以外的資源記錄。
- 進程優先級。反應進程的緊迫程度
- CPU現場保護區。記錄中斷時的CPU狀態
- 進程隊列的PCB的鏈接字。
- 進程相關的其他信息。記賬用的,如占用CPU多長時間等。
作業的調度和管理
作業的概念
作業是用戶一次計算過程中,或者一次事務處理過程中,要求計算機系統所做工作的總稱。
作業和進程的區別
- 作業是用戶向計算機提交任務的任務實體。進程是完成用戶任務的執行實體。
- 一個作業可由多個進程組成,且必須至少由一個進程組成。反之不成立。
- 作業的概念主要用在批處理系統中,進程的概念用在幾乎所有的多道程序系統中。
作業調度算法
T周轉時間=結束時間-進入時間
W帶權周轉時間=周轉時間/估計運行時間
- FCFS:先來先服務,按照作業提交的先后次序分派CPU;
- SJF:最短作業優先算法,對預計執行時間短的作業優先分派處理機,通常后來的短作業不搶先正在執行的作業(無搶占式);
- SRTF:最短剩余時間優先算法,(搶占式SJF)如果新作業需要的CPU時間比當前正在執行的作業剩余下來還需CPU的時間短,SRTF強行趕走當前正在執行的作業;
- HRN:最高響應比優先算法,R=作業周轉時間/作業處理時間=1+作業等待時間/作業處理時間
注意:單道程序環境和多道程序環境下,作業調度算法負責分配哪一個作業優先調入內存,在內存中哪一個作業優先執行需要其他調度算法控制。
並發進程
進程的同步和互斥
- 進程互斥:針對某一共享資源同時只允許一個進程對其進行訪問,對資源的使用具有唯一性和排它性,互斥並不考慮和限制對資源的訪問順序
- 進程同步:指系統中多個進程中發生的事件存在某種時序關系,需要相互合作,共同完成一項任務(直接作用)
- 互斥是同步的一種特例,同步已經實現了互斥。
臨界區管理
- 系統中某些資源一次只允許一個進程使用,稱這樣的資源為臨界資源。在進程中涉及臨界資源的程序段叫做臨界區。
- 使用臨界區的規則:①有空讓進;②無空等待;③多中擇一;④有限等待;⑤讓權等待
信號量及P、V操作
- 信號量的定義:負責協調各個進程,以保證它們能夠正確、合理的使用公共資源。(信號量是一個數據結構)
- 信號量的使用:信號量在使用時必須置一次且只能置一次初值,且初值不能為負數,並且只能執行P、V操作。
- 信號量及P、V操作的物理含義:
- S>0表示有S個資源可用;
- S=0表示無資源可用;
- S<0則|S|表示S等待隊列中的進程個數;
- P(S)表示申請一個資源;
- V(S)表示釋放一個資源
- P、V操作必須成對出現
- 當為互斥操作時,它們同處一個進程;
- 當為同步操作時,則不在同一進程中出現;
- 如果P(S1)和P(S2)兩個操作在一起,一個同步P操作與一個互斥P操作在一起時,同步P在互斥P前,V操作順序不重要。
- 經典生產者-消費者問題(同步問題)
- 多個生產者-消費者問題(互斥問題)
死鎖的基本概念
- 死鎖是指多個進程互不相讓,都得不到足夠的資源;飢餓是指一個進程長時間得不到資源
- 產生死鎖的原因:因為資源不足(根本原因);進程運行推進的順序不合適;資源分配不當等
- 產生死鎖的四個必要條件:互斥使用(資源獨占);不可強占(不可剝奪);請求和保持(部分分配,占有申請);循環等待
死鎖的預防和避免
死鎖的預防——解決死鎖的靜態方法
- 破壞“不可剝奪”條件;
- 破壞“請求和保持”條件;
- 破壞“循環等待”條件
死鎖的避免——解決死鎖的動態方法
銀行家算法:n表示系統進程的個數,m表示資源類型的種類
- 可利用資源向量available[m]——長度為m的向量,代表每種資源的現有實例的數量。
- 最大需求矩陣max[n][m]——n*m矩陣,定義每個進程的最大需求量。
- 分配矩陣allocation[n][m]——n*m矩陣,定義每個進程現在已經分配的各類資源的實例數量。
- 需求矩陣need[n][m]——n*m矩陣,定義每個進程還需要的剩余的資源。
當一個進程申請使用資源的時候,銀行家算法通過先“試探”分配給該進程資源,然后通過安全性算法判斷分配后的系統是否處於安全狀態,若不安全則試探分配作廢,讓該進程繼續等待。
死鎖的檢測和解除
系統為死鎖狀態的充分條件:當且僅當“進程-資源分配圖”無法化簡(資源分配圖化簡:找一個非孤立點進程結點且只有分配邊,去掉分配邊,將其變成孤立結點;再把相應的資源分配給一個等待該資源的進程,即將某進程的申請邊變成分配邊)。
死鎖的接觸:資源剝奪法;撤銷進程法