操作系统 RR轮转调度算法(C++实现)
2021-01-05 19:28
标签:bin color ali 队列 order list cpu width div 在轮转(RR)法中,系统根据FCFS策略,将所有的就绪进程排成一个就绪队列,并可设置每隔一定时间间隔(即时间片)即产生一次中断,激活系统中的进程调度程序,完成一次调度,将CPU分配给队首进程,令其执行。 进程切换时机: 作业情况 \ 时间片 RR q = 4 操作系统 RR轮转调度算法(C++实现) 标签:bin color ali 队列 order list cpu width div 原文地址:https://www.cnblogs.com/john1015/p/12980008.html1. 基本原理
2. 代码实现
2.1 初始化数据
进程名
0
1
2
3
4
平均
到达时间
0
1
2
3
4
服务时间
4
3
4
2
4
完成时间
4
7
11
13
17
周转时间
4
6
9
10
13
8.4
带权周转时间
1
2
2.25
5
3.25
2.5
2.2 RR实现函数
1 //RR轮转调度算法
2 void RoundRobin( vectorint> T, vectordouble> S, vectorint> &FT, vectorint> &WT
3 , vectordouble> &WWT){
4 int q , CurTime = 0, count = 0;
5 printf("Please enter the number of piece:\n");
6 cin >> q;
7 queueint> list;
8 vectordouble> _S = S; //用来存储服务时间
9 while(CurTime 17){
10 while( T[count] T.size())
11 list.push(count ++);
12 // 利用队列完成时间片轮转
13 if( ! list.empty() ){
14 int temp = list.front();
15 list.pop();
16 for( int i = 0; i ){
17 if( S[temp] > 0)
18 printf("Time %d : Program %d is Running.\n",CurTime ,temp);
19 else break;
20 }
21 //先判断是否有新的就绪进程可以入队
22 while( T[count] T.size())
23 list.push(count ++);
24 //再将之前未完成的进程入队
25 if(S[temp] > 0)
26 list.push(temp);
27 else{
28 printf("Time %d : Program %d is over.\n", CurTime ,temp);
29 FT[temp] = CurTime; WT[temp] = FT[temp] - T[temp]; WWT[temp] = WT[temp] / _S[temp];
30 }
31 }
32 else
33 printf( "Time %d : No Program is Running.\n", CurTime ++);
34 }
35
36 }
文章标题:操作系统 RR轮转调度算法(C++实现)
文章链接:http://soscw.com/index.php/essay/40329.html