當前位置:首頁 » 操作系統 » 優先數調度演算法

優先數調度演算法

發布時間: 2023-02-11 12:40:42

⑴ 動態優先數高者優先進程調度演算法

我也在找這個

⑵ 操作系統的主要演算法都有哪些

一、進程(作業)調度演算法
l 先來先服務調度演算法(FCFS):每次調度是從就緒隊列中,選擇一個最先進入就緒隊列的進程,把處理器分配給該進程,使之得到執行。該進程一旦佔有了處理器,它就一直運行下去,直到該進程完成或因發生事件而阻塞,才退出處理器。特點:利於長進程,而不利於短進程。

l 短進程(作業)優先調度演算法(SPF):它是從就緒隊列中選擇一個估計運行時間最短的進程,將處理器分配給該進程,使之佔有處理器並執行,直到該進程完成或因發生事件而阻塞,然後退出處理器,再重新調度。

l 時間片輪轉調度演算法 :系統將所有的就緒進程按進入就緒隊列的先後次序排列。每次調度時把CPU分配給隊首進程,讓其執行一個時間片,當時間片用完,由計時器發出時鍾中斷,調度程序則暫停該進程的執行,使其退出處理器,並將它送到就緒隊列的末尾,等待下一輪調度執行。

l 優先數調度演算法 :它是從就緒隊列中選擇一個優先權最高的進程,讓其獲得處理器並執行。

l 響應比高者優先調度演算法:它是從就緒隊列中選擇一個響應比最高的進程,讓其獲得處理器執行,直到該進程完成或因等待事件而退出處理器為止。特點:既照顧了短進程,又考慮了進程到達的先後次序,也不會使長進程長期得不到服務,因此是一個比較全面考慮的演算法,但每次進行調度時,都需要對各個進程計算響應比。所以系統開銷很大,比較復雜。

l 多級隊列調度演算法

基本概念:

作業周轉時間(Ti)=完成時間(Tei)-提交時間(Tsi)

作業平均周轉時間(T)=周轉時間/作業個數

作業帶權周轉時間(Wi)=周轉時間/運行時間

響應比=(等待時間+運行時間)/運行時間

二、存儲器連續分配方式中分區分配演算法
n 首次適應分配演算法(FF):對空閑分區表記錄的要求是按地址遞增的順序排列的,每次分配時,總是從第1條記錄開始順序查找空閑分區表,找到第一個能滿足作業長度要求的空閑區,分割這個空閑區,一部分分配給作業,另一部分仍為空閑區。

n 循環首次適應演算法:每次分配均從上次分配的位置之後開始查找。

n 最佳適應分配演算法(BF):是按作業要求從所有的空閑分區中挑選一個能滿足作業要求的最小空閑區,這樣可保證不去分割一個更大的區域,使裝入大作業時比較容易得到滿足。為實現這種演算法,把空閑區按長度遞增次序登記在空閑區表中,分配時,順序查找。

三、頁面置換演算法
l 最佳置換演算法(OPT) :選擇以後永不使用或在最長時間內不再被訪問的內存頁面予以淘汰。

l 先進先出置換演算法(FIFO):選擇最先進入內存的頁面予以淘汰。

l 最近最久未使用演算法(LRU):選擇在最近一段時間內最久沒有使用過的頁,把它淘汰。

l 最少使用演算法(LFU):選擇到當前時間為止被訪問次數最少的頁轉換。

四、磁碟調度
n 先來先服務(FCFS):是按請求訪問者的先後次序啟動磁碟驅動器,而不考慮它們要訪問的物理位置

n 最短尋道時間優先(SSTF):讓離當前磁軌最近的請求訪問者啟動磁碟驅動器,即是讓查找時間最短的那個作業先執行,而不考慮請求訪問者到來的先後次序,這樣就克服了先來先服務調度演算法中磁臂移動過大的問題

n 掃描演算法(SCAN)或電梯調度演算法:總是從磁臂當前位置開始,沿磁臂的移動方向去選擇離當前磁臂最近的那個柱面的訪問者。如果沿磁臂的方向無請求訪問時,就改變磁臂的移動方向。在這種調度方法下磁臂的移動類似於電梯的調度,所以它也稱為電梯調度演算法。

n 循環掃描演算法(CSCAN):循環掃描調度演算法是在掃描演算法的基礎上改進的。磁臂改為單項移動,由外向里。當前位置開始沿磁臂的移動方向去選擇離當前磁臂最近的哪個柱面的訪問者。如果沿磁臂的方向無請求訪問時,再回到最外,訪問柱面號最小的作業請求。

⑶ 作業調度的演算法有哪些

作業調度的演算法有:演算法有先來先服務、最短作業優先演算法、最高響應比優先演算法、基於優先數調度演算法。

1、演算法有先來先服務

最簡單的調度演算法,按作業的先後順序進行調度,只考慮每個作業的等待時間而未考慮執行時間的長短。

2、最短作業優先演算法

最短作業優先演算法是對先來先服務演算法的改進,其目標是減少平均周轉時間。對預計執行時間短的作業優先分派處理機。通常後來的短作業不搶先正在執行的作業。 只考慮執行時間而未考慮等待時間的長短。

3、最高響應比優先演算法

最高響應比優先演算法是對先來先服務方式和最短作業優先演算法方式的一種綜合平衡。最高響應比優先法調度策略同時考慮每個作業的等待時間的長短和估計需要的執行時間長短,從中選出相應比最高的作業投入執行。

4、基於優先數調度演算法

優先數調度演算法常用於批處理系統中。在進程調度中,每次調度時,系統把處理機分配給就緒隊列中優先數最高的進程。它又分為兩種:非搶占式優先數演算法和搶占式優先數演算法。

(3)優先數調度演算法擴展閱讀:

作業調度是指按照時間周期(年、月、日、時、分、秒等)對作業進行分割,並根據業務需求、作業長度、存儲管理及依賴性關系對作業的執行方式加以調度。主要任務是從作業後備隊列中選擇作業進入主存運行。作業調度的功能主要有以下幾方面:

1、記錄各作業在系統中的狀態;

2、從後備隊列中挑選一部分作業投入運行;

3、從被選中的作業做好執行前的准備工作;

4、在作業執行結束時,做善後處理工作。

進行作業調度有很多作業調度演算法,這些作業調度演算法要實現的目標是:

1、調度對所有作業都是公平合理的;

2、應使設備有較高的利用率(提供系統利用率);

3、每次運行盡可能多的作業(提高系統吞吐量);

4、較快的相應時間。

⑷ 優先順序調度演算法是什麼

優先順序演算法是指在進程創建時先確定一個初始優先數,以後在進程運行中隨著進程特性的改變不斷修改優先數,這樣,由於開始優先數很低而得不到CPU的進程,就能因為等待時間的增長而優先數變為最高而得到CPU運行。

⑸ 進程調度的方式有哪兩種試列舉至少4種進程調度演算法。

進程調度的方式有非剝奪方式和剝奪方式。
非剝奪方式:
分派程序一旦把處理機分配給某進程後便讓它一直運行下去,直到進程完成或發生某事件而阻塞時,才把處理機分配給另一個進程。
剝奪方式:
當一個進程正在運行時,系統可以基於某種原則,剝奪已分配給它的處理機,將之分配給其它進程。剝奪原則有:優先權原則、短進程優先原則、時間片原則。
進程調度演算法:
1、先進先出演算法(FIFO):
演算法總是把處理機分配給最先進入就緒隊列的進程,一個進程一旦分得處理機,便一直執行下去,直到該進程完成或阻塞時,才釋放處理機。
舉例:有三個進程P1、P2和P3先後進入就緒隊列,它們的執行期分別是21、6和3個單位時間,對於P1、P2、P3的周轉時間為21、27、30,平均周轉時間為26。可見,FIFO演算法服務質量不佳,容易引起作業用戶不滿,常作為一種輔助調度演算法。
2、最短CPU運行期優先調度演算法(SCBF--Shortest CPU Burst First):
該演算法從就緒隊列中選出下一個「CPU執行期最短」的進程,為之分配處理機。
舉例:在就緒隊列中有四個進程P1、P2、P3和P4,它們的下一個執行進程調度期分別是16、12、4和3個單位時間,P1、P2、P3和P4的周轉時間分別為35、19、7、3,平均周轉時間為16。該演算法雖可獲得較好的調度性能,但難以准確地知道下一個CPU執行期,而只能根據每一個進程的執行歷史來預測。
3、時間片輪轉法:
前幾種演算法主要用於批處理系統中,不能作為分時系統中的主調度演算法,在分時系統中,都採用時間片輪轉法。簡單輪轉法:系統將所有就緒進程按FIFO規則排隊,按一定的時間間隔把處理機分配給隊列中的進程。這樣,就緒隊列中所有進程均可獲得一個時間片的處理機而運行。
4、多級反饋隊列:
多級隊列方法:將系統中所有進程分成若干類,每類為一級。多級反饋隊列方式是在系統中設置多個就緒隊列,並賦予各隊列以不同的優先權。

⑹ 作業調度演算法的選擇原則有哪幾個

批處理作業的調度演算法主要有以下幾種:
①先來先服務演算法。原則上按照作業進入輸入井的次序調度,如果作業的資源得不到滿足,將會推遲調度,它的資源得到滿足的時候會優先被調度進來。
優點:具有一定的公平性。
缺點:系統的吞吐率低,平均周轉時間長,有大作業到來的時,許多小作業推遲調度。
②計算時間短的作業優先.優先調度計算時間短的作業進行調度,資源不滿足的情況下推遲調度。在這種調度演算法下,要求用戶要對作業的計算時間預先有一個估計,調度以此為依據。
優點:由於被選中的作業計算時間,所以不能盡快地完成並退出系統,降低了作業的平均等待時間,提高了系統的吞吐率。
缺點:大作業會不滿意,而且極限情況下使得某些大作業始終得不到調度。
③響應比高者優先演算法。該演算法考慮了計算時間等待時間,既考慮了計算時間短的作業優先,又考慮了大作業長期等待的問題。所謂響應比是按照以下公式來定義的:
響應比R=等待時間/計算時間
這里的計算時間是估計的作業計算時間,從公式看,計算時間越短,響應比越高;而另一方面,大作業等待時間越長,響應比也會越大。一個作業完成以後,需要重新計算一下在輸入井中的各個作業的響應比,最高的將優先調度。
④優先數調度演算法。為每一個作業指定一個優先數,優先數高的作業先被調度。對於優先數相等的作業採用先來先服務的策略。優先數的制定原則是:作業的緩急程序,估計的計算時間,作業的等待時間,資源申請情況等因素綜合考慮。
⑤均衡調度演算法。使用不同資源的進程同時執行,減少作業等待同類設備而耗費的時間,加快作業的執行。

⑺ 將最高優先數優先的調度演算法改為時間片輪轉調度演算法

#include<iostream>
using namespace std;
struct PCB_Type{
char name;
int cpu_time;
};
struct QueueNode{
struct PCB_Type PCB;
struct QueueNode *next;
};

int main(){
int m,n,t;
int usecpu=0,unusecpu=0;
cout<<"輸入就緒隊列中的進程數目m:";
cin>>m;
cout<<"輸入阻塞隊列中的進程的數目n:";
cin>>n;
cout<<"輸入喚醒系統資源的相隔時間片個數t:";
cin>>t;
struct QueueNode *readyhead=new QueueNode ,*readytail=new QueueNode,
*blockedhead=new QueueNode,*blockedtail=new QueueNode;
// readyhead=NULL;readytail=NULL;blockedhead=NULL;blockedtail=NULL;
readyhead=readytail;
blockedhead=blockedtail;
for(int i=1;i<=m;i++){
struct QueueNode *t1=new QueueNode;
cout<<"輸入就緒隊列中進程的name和cpu_time:";
cin>>t1->PCB.name>>t1->PCB.cpu_time;
readytail->next=t1;
readytail=t1;
}
for(int j=1;j<=n;j++){
struct QueueNode *t2=new QueueNode;
cout<<"輸入阻塞隊列中進程的name和cpu_time:";
cin>>t2->PCB.name>>t2->PCB.cpu_time;
blockedtail->next=t2;
blockedtail=t2;
}

cout<<"輸出就緒隊列的進程信息:";
for(struct QueueNode *t3=readyhead->next;t3!=readytail->next;t3=t3->next){
cout<<t3->PCB.name<<"、"<<t3->PCB.cpu_time<<"---> ";
}
cout<<"無進程";
cout<<endl;
cout<<"輸出阻塞隊列的進程信息:";
struct QueueNode *t4;
t4=blockedhead->next;
while(t4!=blockedtail->next){
cout<<t4->PCB.name<<"、"<<t4->PCB.cpu_time<<"---> ";
t4=t4->next;
}
cout<<"無進程";
cout<<endl<<"進程的運行順序:";
int x=0;
while(readyhead!=readytail||blockedhead!=blockedtail){
if(readyhead!=readytail){
struct QueueNode *p=readyhead->next;
cout<<p->PCB.name<<",";
p->PCB.cpu_time--;
usecpu++;
if(readyhead->next!=readytail){
if(p->PCB.cpu_time>0){
readyhead->next=p->next;//出隊列
readytail->next=p;
readytail=p;
}
else{
readyhead->next=p->next;
delete p;
}
}
else//隊列中只有兩個節點 頭結點和尾結點
{
if(p->PCB.cpu_time<=0){readytail=readyhead;//只有進程為執行完,就繼續執行,完成之後,把隊列清空,釋放指針p;就緒隊列無進程
delete p;}
}

}
else
{
unusecpu++;
cout<<"_,";
}
x++;
if(x==t){
if(blockedhead!=blockedtail){

struct QueueNode *q=blockedhead->next;
if(blockedhead->next!=blockedtail)
{
blockedhead->next=q->next;
}
else
{
blockedhead=blockedtail;
}
readytail->next=q;
readytail=q;
x=0;
}
}
}
cout<<endl;
cout<<"cpu的利用率="<<usecpu<<"/"<<usecpu+unusecpu<<endl;
return 0;
}

熱點內容
6s和安卓8哪個值得入手 發布:2025-07-23 23:03:31 瀏覽:766
巧妙運演算法 發布:2025-07-23 23:02:02 瀏覽:140
sql解析json 發布:2025-07-23 22:48:16 瀏覽:905
戰神解壓密碼 發布:2025-07-23 22:29:07 瀏覽:224
如何刷機安卓系統手機 發布:2025-07-23 22:28:56 瀏覽:739
麥咭編程下載 發布:2025-07-23 22:20:04 瀏覽:36
javadraw 發布:2025-07-23 22:19:59 瀏覽:629
忘記密碼去哪裡找回 發布:2025-07-23 22:19:06 瀏覽:748
php培訓技術 發布:2025-07-23 22:18:21 瀏覽:608
兒童速演算法 發布:2025-07-23 22:09:37 瀏覽:637