操作系統復習(二)——進程調度
一、進程管理
(一)引入進程目的
為了更好地描述和控制程序并發執行,實現操作系統的并發性和共享性(進程是動態的,程序是靜態的)
(二)定義
是計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位。
(三)組成
1、PCB:保存進程運行期間相關的數據,是進程存在的唯一標志。
2、程序段:能被進程調度到CPU的代碼。
3、數據段
(四)進程的狀態
1、狀態種類:
(1)運行態:進程正在占用CPU。
(2)就緒態:進程已處于準備運行的狀態,即進程獲得了除處理機外的一切所需資源,一旦得到處理機即可運行。
(3)阻塞態:線程因為某種原因放棄CPU使用權,暫時停止運行。直到線程進入就緒狀態,才有機會轉到運行狀態。
阻塞的情況分三種:
a.等待阻塞:運行的線程執行wait()方法,JVM會把該線程放入等待池中。(wait會釋放持有的鎖)
b.同步阻塞:運行的線程在獲取對象的同步鎖時,若該同步鎖被別的線程占用,則JVM會把該線程放入鎖池中。
c.其他阻塞:運行的線程執行sleep()或join()方法,或者發出了I/O請求時,JVM會把該線程置為阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入就緒狀態。(注意,sleep是不會釋放持有的鎖)
(4)創建狀態:進程正在被創建。
(5)結束狀態:進程正在從系統消失。
2.進程狀態轉換圖:

(五)線程
1、引入目的:為了更好的使用多道程序并發執行,提高資源利用率和系統吞吐量。
2、特點:是程序執行的最小單位,基本不擁有任何系統資源(調度的基本單位)。
二、處理機調度
(一)概念
是對處理機進行分配,即從就緒隊列中按照定的算法(公平、高效)選擇一個進程并將處理機分配給它運行,以實現進程并發地執行。
(二)分類
高級調度(作業調度)(次數少)
中級調度(內存對換)(次數中等)
低級調度(進程調度)(次數多)
(三)調度方式
剝奪式、非剝奪式
(四)調度準則
CPU利用率、系統吞吐量、周轉時間、等待時間、響應時間
(五)算法
先來先服務、短作業優先、優先級調度算法、高響應比優先調度算法、時間片輪轉、多級反饋隊列調度算法
三、進程同步
(一)引入原因
協調進程之間的相互制約關系
(二)制約關系
1、同步:
亦稱直接制約關系,是指為完成某種任務而建立的兩個或者多個進程,這些進程因為需要在某些位置上協調它們的工作次序而等待、傳遞信息所產生的制約關系。
2、互斥:
也稱間接制約關系。當一個進程進入臨界區使用臨界資源時,另一個進程必須等待,當占用臨界資源的進程退出臨界區后,另進程才允許去訪問此臨界資源。
(三)臨界資源
一次僅允許一個進程使用的資源(比如:打印機、共享緩沖區、共享變量、公用隊列)
(四)臨界區
在每個進程中訪問臨界資源的那段程序
(五)臨界區互斥
1、原則
(1)空閑讓進:如果有若干進程要求進入空閑的臨界區,一次僅允許一個進程進入。
(2)忙則等待:任何時候,處于臨界區內的進程不可多于一個。如已有進程進入自己的臨界區,則其它所有試圖進入臨界區的進程必須等待。
(3)有限等待:進入臨界區的進程要在有限時間內退出,以便其它進程能及時進入自己的臨界區。
(4)讓權等待:如果進程不能進入自己的臨界區,則應讓出CPU,避免進程出現“忙等”現象。
2、基本方法
信號量——利用PV操作實現互斥
四、死鎖
(一)產生的原因
非剝奪資源的競爭和進程的不恰當推進順序(與饑餓的區別)
(二)定義
多個進程因競爭資源而造成的一種僵局,如果沒有外力,這些進程將無法推進。
(三)解決方法
1、預防死鎖:破壞互斥條件、破壞不剝奪條件、破壞請求和保持條件、破壞循環等待條件。
2、避免死鎖:安全狀態、銀行家算法。
3、檢測死鎖:利用死鎖定理。
4、解除死鎖:資源剝奪法、撤銷進程法、進程回退法。
參考鏈接:https://www.bilibili.com/video/BV1xZ4y1r74y/?p=2&spm_id_from=pageDriver
浙公網安備 33010602011771號