1.處理機調度的基本概念
1)高級調度:
又稱作業調度或長程調度(Long-Term Scheduling),接納調度(Admission Scheduling)
作業調度決定的細節
接納多少作業——取決于多道程序度。應根據系統的規模和運行速度等情況綜合考慮。
接納哪些作業——取決于采用的調度算法。如先來先服務,短作業優先等
系統運行并不一定存在高級調度
批處理系統:作業進入系統后先駐留外存,故需要有作業調度。
分時系統:為及時響應,作業由終端直接送入內存,故不需作業調度。
實時系統中,通常也不需作業調度。
2)低級調度:
也稱為進程調度、微觀調度或短程調度(Short-Term Scheduling)。決定內存就緒隊列中的哪個進程獲得處理機,進行分配工作。是最基本的一種調度,在三種基本OS中都有。
(1)進程調度方式
非搶占方式(Non-preemptive Mode)
一旦處理機分配給某進程,該進程一直執行。決不允許其他進程搶占已分配運行進程的處理機。
搶占方式(Preemptive Mode)
允許調度程序根據某種原則,暫停某個正在執行的進程,將處理機重新分配給另一進程。
(2)進程調度方式比較
(3)中級調度
又稱交換調度或中程調度(Medium-Term Scheduling)
引入目的:提高內存利用率和系統吞吐量。根據條件將一些進程調出或再調入內存。
(4)調度隊列模型
僅有進程調度的調度隊列模型: 分時系統
具有高級和低級調度的調度隊列模型:批處理系統中,還需要作業調度
同時具有三級調度的調度隊列模型
(5)選擇調度方式和調度算法的若干準則
① 面向用戶的準則:
周轉時間短、響應時間快、均衡性、截止時間的保證、優先權準則
② 面向系統的準則:
系統吞吐量高、處理機利用率好(主要針對大中型主機)、各類資源的平衡利用(主要針對大中型主機)
2.常用調度算法
1)先來先服務調度算法FCFS
一種最簡單的調度算法,按先后順序進行調度。既可用于作業調度,也可用于進程調度。
2)短作業(進程)優先調度算法SJF/SPF(搶占式和非搶占式)
SJF/SPF的不足:
①. 對短作業有利,但同時造成了對長作業的不利。
②.由于作業(進程)的長短含主觀因素,不一定能真正做到短作業優先。
?③.未考慮作業的緊迫程度,因而不能保證緊迫性作業(進程)的及時處理。
3)高優先權優先調度算法HPF (搶占式和非搶占式)
照顧緊迫性作業,使其獲得優先處理而引入調度算法。常用于批處理系統中的作業調度算法,以及多種操作系統中的進程調度算法
(1)優先權的類型
靜態優先權:創建進程時確定,整個運行期間保持不變。一般利用某一范圍的一個整數來表示,又稱為優先數。
動態優先權:創建進程時賦予的優先權可隨進程的推進或隨其等待時間的增加而改變。
(2)進程優先權的確定
進程類型、進程對資源的需求、用戶需求
4)高響應比優先調度算法HRRN
HRRN為每個作業引入動態優先權,使作業的優先級隨著等待時間的增加而以速率a提高:
? 優先權 =(等待時間+要求服務時間)/要求服務時間= 響應時間 / 要求服務時間
(1)同時到達的作業優先權相同。
(2)當執行時間相同的作業,優先權的高低決定于其等待時間的長短,也就是先來先服務。
5)基于時間片的輪轉調度算法RR?
分時系統新需求:及時響應用戶的請求;采用基于時間片的輪轉式進程調度算法。
(1)時間片輪轉算法
將系統中所有的就緒進程按照FCFS原則,排成一個隊列。
每次調度時將CPU分派給隊首進程,讓其執行一個時間片。時間片的長度從幾個ms到幾百ms。
在一個時間片結束時,發生時鐘中斷。
調度程序據此暫停當前進程的執行,將其送到就緒隊列的末尾,并通過上下文切換執行當前就緒的隊首進程。
(2)多級反饋隊列算法FB
設置多個就緒隊列,各隊列有不同的優先級,優先級從第一個隊列依次降低。
?賦予各隊列進程執行時間片大小不同, 優先權越高,時間片越短。
6)幾種常用調度算法的比較
3.實時調度
1)實現實時調度的基本條件
提供必要的信息
系統處理能力足夠強
采用搶占式調度機制
具有快速切換機制
2)實時調度算法的分類
非搶占調度算法
搶占式調度算法
3)常用的幾種實時調度算法
(1)最早截止時間優先EDF
根據任務的開始截止時間來確定任務的優先級。截止時間越早,其優先級越高。
(2)最低松弛度優先LLF?
根據任務緊急(或松弛)的程度,來確定任務的優先級。任務的緊急程度越高(松弛度值越小),優先級就越高。
松弛度= 截止完成時間 – 還需執行時間 - 當前時間
可理解為當前時刻到開始截止時刻間的差距,隨著時間的推進,這個差值逐漸變小,任務越來越緊迫。
4.產生死鎖的原因和必要條件
死鎖(Deadlock):指多個進程在運行過程中,因爭奪資源而造成的一種僵局。當進程處于這種狀態時,若無外力作用,它們都將無法再向前推進。
死鎖(Deadlock): 指進程之間無休止地互相等待!
饑餓(Starvation):指一個進程無休止地等待!
1)競爭資源引起進程死鎖
可把系統中的資源分為兩類:
可剝奪和非剝奪性資源
永久性資源和臨時性資源
2)進程推進順序不當引起死鎖
3) 產生死鎖的必要條件
互斥條件:
進程對所分配到的資源進行排他性使用
請求和保持條件:
進程已經保持了至少一個資源,又提出新的資源請求,而新請求資源被其他進程占有只能造成自身進程阻塞,但對自己已獲得的其他資源保持不放,必然影響其他進程。
不剝奪條件:
進程已獲得的資源未使用完之前不能被剝奪,只能在使用完時由自己釋放。
環路等待條件
4)處理死鎖的基本方法
事先預防:
(1)預防死鎖:
(2)避免死鎖:
事后處理:
(3)檢測死鎖
(4)解除死鎖
5.預防死鎖的方法
1)預防死鎖
(1)摒棄“請求和保持”條件
(2)摒棄“不剝奪”條件
(3)摒棄“環路等待”條件
6.死鎖的檢測與解除
當系統為進程分配資源時,若未采取任何限制性措施,則系統必須提供檢測和解除死鎖的手段,為此系統必須:
保存有關資源的請求和分配信息;
提供一種算法,以利用這些信息來檢測系統是否已進入死鎖狀態。
1)死鎖的檢測
檢測時機:
當進程等待時檢測死鎖
定時檢測
系統資源利用率下降時檢測死鎖
2)死鎖定理
利用資源分配圖簡化法來檢測死鎖
3)死鎖檢測算法:
* 每個進程和資源指定唯一編號
* 設置一張資源分配表
? 記錄各進程與其占用資源之間的關系
* 設置一張進程等待表
? 記錄各進程與要申請資源之間的關系
4)死鎖的解除
當發現進程死鎖時,便應立即把它們從死鎖狀態中解脫出來。常采用的方法是:
剝奪資源:
從其他進程剝奪足夠數量的資源給死鎖進程以解除死鎖狀態。
撤銷進程:
最簡單的是讓全部進程都死掉;溫和一點的是按照某種順序逐個撤銷進程,直至有足夠的資源可用,使死鎖狀態消除為止。