-------------------------------腦瓜疼腦瓜疼,哎呀媽呀腦瓜疼------------------------
在作業系統中,多程序執行的次序是不一樣的,這種時候就需要選擇執行的順序。
在分時系統中多採用迴圈輪轉排程演算法,系統規定乙個時間片,每個程序被排程的時候分得乙個時間片,當這一時間片用完時,
該程序轉為就緒態並進入就緒佇列末尾。這就是迴圈輪轉演算法的主要思路。
(下面的**只考慮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種排程演算法 能夠輸入程序的基本資訊,如程序名 提交時間 預估執行時間等 根據選擇的排程演算法顯示程序排程順序 顯示完成排程後每個程序的開始時間 完成時間...