最近學了作業系統的程序排程的各種演算法,手癢實現了一下,
僅供參考,若有bug,請指出.^v^.
先到先服務(fcfs)
1//先來先服務排程演算法
2 #include 3
#define time 500 //
限制最長程序執行時間
4#define n 100
5#define state int
6using
namespace
std;
7struct
pcb20
}pcb[n];
21int
num;
22double cur_t = 0;23
bool
cmp(pcb a, pcb b)
26void
fcfs()36}
3738
void
init()46}
4748
void
output()53}
54int
main()
最短作業優先排程演算法(sjf)
1//短作業優先排程演算法 (非搶占式)
2 #include 3
#define time 500 //
限制最長程序執行時間
4#define n 100
5#define state int
6using
namespace
std;
7double cur_t = 0;8
struct
pcb23
24}pcb[n];
25 priority_queueq;
26bool
vis[n];
27int
num;
28bool
cmp(pcb a, pcb b)
3334
void
init()42}
4344
void
sjf()else63}
64 cur_t =cnt.end_t;
65 pcb[index++] =cnt;
66//
cout<< pcb[index -1].end_t<<" ** "<67}68
bool flag = false;69
if( i 73if(!flag) break;74
}75}76
77void
output()82}
8384
intmain()
高響應比優先排程
1//高響應比優先順序排程演算法(非搶占式)
2 #include 3
#define time 500 //
限制最長程序執行時間
4#define n 100
5#define state int
6using
namespace
std;
7double cur_t = 0;8
struct
pcb24
25}pcb[n];
26 priority_queueq;
27bool
vis[n];
28int
num;
29bool
cmp(pcb a, pcb b)
3233
void
init()41}
4243
void
hrrn()else63}
64 cur_t =cnt.end_t;
65 pcb[index++] =cnt;
6667
pcb left[n];
68int xn = 0;69
while( !q.empty() )
73for(int j = 0; j < xn; ++j)77}
78bool flag = false;79
if( i 8384
if(!flag) break;85
}86}87
88void
output()93}
94int
main()
1//高響應比優先順序排程演算法(非搶占式)
2 #include 3
#define time 500 //
限制最長程序執行時間
4#define n 100
5#define state int
6using
namespace
std;
7double cur_t = 0;8
struct
pcb24
25}pcb[n];
26 priority_queueq;
27bool
vis[n];
28int
num;
29bool
cmp(pcb a, pcb b)
3233
void
init()41}
4243
void
hrrn()else63}
64 cur_t =cnt.end_t;
65 pcb[index++] =cnt;
6667
pcb left[n];
68int xn = 0;69
while( !q.empty() )
73for(int j = 0; j < xn; ++j)77}
78bool flag = false;79
if( i 8384
if(!flag) break;85
}86}87
88void
output()93}
94int
main()
搶占式優先比排程演算法
1//搶占式優先比排程演算法
2 #include 3
#define time 500 //
限制最長程序執行時間
4#define n 100
5#define state int
6using
namespace
std;
7double cur_t = 0;8
struct
pcb24
25}pcb[n];
2627 priority_queueq;
28bool
vis[n];
29int
num;
30bool
cmp(pcb a, pcb b)
3536
void
init()44}
4546
void
pps()else
if(!vis[pcb[j].pos])
75 }else78}
79if
( ok )83}
84bool flag = false;85
for(int j = 0; j < num ;j++)93}
94if( !flag ) break;95
}96}97
98void
output()
103}
104105
intmain()
時間片輪轉排程演算法
1//時間輪片排程演算法
2 #include 3
#define n 100
4#define state int
5using
namespace
std;
6struct
pcbpcb[n];
18int
num,time;
19double cur_t = 0
;20 queueq;
21bool
cmp(pcb a, pcb b)
2425
void
init()36}
3738
void
tt()else
54break;55
}56if(cnt.service_t >time)else64}
65bool flag = false;66
if(i 71if( !flag ) break;72
}7374}
7576
void
output()83}
8485
intmain()
程序排程模擬演算法
1.先進先出排程。程序按申請進入記憶體的時間執行。2.優先順序排程。程序按作業系統分配的優先順序,執行。3.時間輪轉排程。程序按申請進入記憶體的時間依次執行乙個時間片。4.分級排程。時間輪轉排程 優先順序排程。先執行優先順序較高的按時間輪轉排程的方法執行,在執行優先順序較低的。a.設計程序控制塊pc...
模擬程序排程演算法
模擬短作業優先演算法 時間片輪轉法和優先數演算法的執 況,並動態畫出其程序執行的gantt圖,計算以上演算法的每個程序的響應時間和周轉時間。name geting time 2014 12 10 includeusing namespace std const int max 100 定義程序結構體...
程序排程模擬
實驗平台 windows 7,vs2010 實驗目標 模擬短作業優先演算法,時間片輪轉演算法,和優先數演算法,並動態畫出grant圖,計算每個程序的響應時間和周轉時間 資料結構 class process fin.close void sjf void void preemptive sjf int...