迴圈輪轉演算法

2022-08-18 22:00:23 字數 2758 閱讀 2642

-------------------------------腦瓜疼腦瓜疼,哎呀媽呀腦瓜疼------------------------

在作業系統中,多程序執行的次序是不一樣的,這種時候就需要選擇執行的順序。

在分時系統中多採用迴圈輪轉排程演算法,系統規定乙個時間片,每個程序被排程的時候分得乙個時間片,當這一時間片用完時,

該程序轉為就緒態並進入就緒佇列末尾。這就是迴圈輪轉演算法的主要思路。

(下面的**只考慮p1-----p5的程序)

當cpu空閒時,選取就緒佇列首元素,賦予時間片。當程序時間片用完時,就釋放cpu控制權,進入就緒佇列末尾,cpu控制權給

下乙個處於就緒佇列首元素。

狀態圖如下:

本來想用佇列來算的,但是考慮到指標的問題,又因為剛學了迴圈鍊錶,所以考慮用迴圈鍊錶來存放資料。

(迴圈列表和一般鍊錶唯一乙個區別就是最後乙個結點本來是p->next=null,現在就把頭結點和尾結點相連就行,即p->next=head)

下面是結構體的裡面的內容,放入程序的名字以及需要執行的時間和等待時間

struct

pcb ;

然後,給鍊錶賦初值

//

給佇列1 賦值

struct pcb *create1()

else

if (num == len1 - 1

)

else

init(t);

++num;

}return

rq1;

}void init(struct pcb*p)

在計算執行時間的時候,

1.比如說第乙個程序的執行時間小於或等於時間片的長度,所以,就把時間加上去,並將每個程序的等待時間都加上這個程序的執行時間。

並且將正在執行的程序的need賦值為0。這樣是為了將need標記為已經執行完的了,以後若再碰到就跳過這個結點。

2.再比如說第乙個程序的執行時間大於時間片的長度,就將該程序的need減去乙個時間片的長度,並且將指標移到下個結點,相當於把這個結點放到佇列尾部。

再把各個程序的等待時間加上乙個時間片的長度。就這樣反覆的迴圈,知道所有結點的need全部變為0的時候就跳出來。

直接上**吧:

#define _crt_secure_no_warnings#include

#include

#include

//#define null 0

#includeusing

namespace

std;

const

int maxn = 100

;struct

pcb ;

int len1(0), len2(0); //

兩個程序的長度

int clock(0); //

時鐘int time(0);//

時間片大小

int time; //

rq1執行完的時間

void init(struct pcb*p)

//給佇列1 賦值

struct pcb *create1()

else

if (num == len1 - 1

)

else

init(t);

++num;

}return

rq1;}//

當執行時間小於時間片大小時候的求和函式,即將每個程序的等待時間加上當前程序執行的時間

void sum1(struct pcb *p)

else p = p->next;;

}p->turn += t->need;}//

當執行時間大於時間片大小時候的求和函式,即將每個程序的等待時間加上當前程序執行的時間

void sum2(struct pcb *p)

else p=p->next;

}p->turn +=time;}//

求佇列1裡面各個程序執行完畢需要花費的時間

void fun1(struct pcb *h)

if(t->need>time)

h = h->next;

struct pcb *temp =h;

while (count--)

temp = temp->next;

}if (num == 4) break

; }

while (h->need == 0

)

while (h->need>time)

//return (h->turn + h->need);

time = h->turn + h->need;

cout

的執行時間是

"<< h->turn + h->need <

//cout << h->turn + h->need << endl;

}int

main()

執行結果:

這個程式我調了好久,經常因為死迴圈的問題,輸出不出來結果,真的快自閉了。。。

從開始打斷點慢慢除錯的時候,找到卡住死迴圈的位置,慢慢改,終於改好了。

還是要有耐心啊!!!

不早啦,早點睡覺吧!晚安!

時間片輪轉演算法

include include include include include include includeusing namespace std 初始化程序池 初始化就緒佇列 rr演算法 struct pcb pcb string name,int atime,int rtime,char st...

時間片輪轉演算法實現

include include define null 0 typedef struct quen 定義結構 char pname 8 int time1 int time2 char state struct quen next quen main 主程式 quen q,p,head,m char...

時間片輪轉演算法實現

程式設計實現時間片輪轉演算法,並求出每個作業的完成時間 周轉時間 帶權周轉時間,及平均周轉時間 平均帶權周轉時間。任選一種高階語言實現 選擇1 2種排程演算法 能夠輸入程序的基本資訊,如程序名 提交時間 預估執行時間等 根據選擇的排程演算法顯示程序排程順序 顯示完成排程後每個程序的開始時間 完成時間...