操作系统 RR轮转调度算法(C++实现)

1. 基本原理

  在轮转(RR)法中,系统根据FCFS策略,将所有的就绪进程排成一个就绪队列,并可设置每隔一定时间间隔(即时间片)即产生一次中断,激活系统中的进程调度程序,完成一次调度,将CPU分配给队首进程,令其执行。

  进程切换时机:

  • 若一个时间片尚未用完,进程就已经结束,则立即激活调度程序,将其从队列中删除,并启动一个新的时间片。
  • 在一个时间片用完时,进程尚未结束,则将其送往队尾。

2. 代码实现

  2.1 初始化数据

作业情况

\

时间片

进程名 0  1 2 3 4 平均
到达时间 0 1 2 3 4  
服务时间 4 3 4 2 4  

RR

q = 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( vector<int> T, vector<double> S, vector<int> &FT, vector<int> &WT 
 3             , vector<double> &WWT){
 4     int q , CurTime = 0, count = 0;
 5     printf("Please enter the number of piece:\n");
 6     cin >> q;
 7     queue<int> list;
 8     vector<double> _S = S; //用来存储服务时间
 9     while(CurTime < 17){
10         while( T[count] <= CurTime && 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 < q; i ++, S[temp] --, CurTime ++){
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] <= CurTime && 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 }
复制代码
posted @   John_yan15  阅读(2757)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示