这比起说是操作系统实验,不如说是一个模拟算法而已,
当然目标是为了让大家更清楚地了解RR轮转调度算法原理

原理上,书上课上都讲过,实现方式上推荐直接模拟一个队列(本来就应该是这样实现的)http://c.biancheng.net/view/1247.html

下面详解一下模拟过程:

这里宏变量TIMESLICE决定轮转的一次时间片长度单位
首先读入数据,
n为总的进程数量,
arr数组中存放各进程到达时刻
use数组中存放各进程需要的服务时间

que队列,h、t是队列头尾下标,当然由于设计成循环队列,要对队列长取模才是实际的下标。

nowT为当前时刻,arrPtr为依次到达的进程下标
run为上一时间单位运行的进程下标

在具体模拟中while(nowT<=1000)
首先判断有无新进程到达,有的话依次加入到队列尾部
随后如果上一个进程未结束,是被别的进程抢占了,那么它自己还需要的服务时间不为0,那么放回队列尾。
后取出队列头代表的进程,分别处理 能在一个时间片内做完和不能的情况
当然取不出来就空过一个时间单位。

#include<stdio.h>#define F(i,a,b) for(int i=a;i<=b;i++)
#define MAXN 500
#define TIMESLICE 1
int main(){int n;scanf("%d",&n);int arr[MAXN];int use[MAXN];F(i,1,n){scanf("%d%d",arr+i, use+i);}int h=0,t=0;int que[MAXN];int nowT=0;int arrPtr = 1;int run=0;while(nowT <= 1000){while(arr[arrPtr]<=nowT && arrPtr<=n){   //先看有无当前时刻到达的新进程,加入队列printf("its %d now\n", nowT);printf("at time %d process %d has arraived\n",arr[arrPtr], arrPtr);que[t % MAXN] = arrPtr;arrPtr++;t += 1;}if (run!=0){ //新进程加入后再把老进程加入队列if(use[run]){que[t] = run;t += 1;}} if(h == t) {nowT++;continue;}//队列为空,没有进程要调度,空过printf("its %d now the que is :",nowT);F(i,h,t-1){printf(" %d ",que[i % MAXN]);}printf("\n");run = que[h % MAXN];h += 1;if(use[run]<TIMESLICE){printf("now processing %d for %d tick\n", run,use[run]);nowT += use[run];use[run] = 0;}else{printf("now processing %d for %d tick\n", run,TIMESLICE);use[run] -= TIMESLICE;nowT += TIMESLICE;}}return 0;
}

测试

输入数据如下:

轮转时间片为1个单位时

轮转时间片为3个单位时

两者自然都是20时刻结束调度

结语

RR算法用队列直接模拟是相对很简单的,也很适合在考试时使用,但是其它的调度算法就不一定了,需要用辅助的数组存储信息之类的,符合原理地适时调整吧~

操作系统笔记(6):RR轮转调度算法相关推荐

  1. 操作系统时间片轮换_《操作系统_时间片轮转RR进程调度算法》

    转自:https://blog.csdn.net/houchaoqun_xmu/article/details/55540250 时间片轮转RR进程调度算法 一.概念介绍和案例解析 时间片轮转法 - ...

  2. 操作系统:时间片轮转RR进程调度算法

    目的:陆续整理近一年的学习收获 时间片轮转RR进程调度算法 一:概念 时间片轮转RR进程调度算法:用于分时系统中的进程调度.每次调度时,总是选择就绪队列的队首进程,让其在CPU上运行一个系统预先设置好 ...

  3. 操作系统笔记—调度机与调度算法

    调度的概念 调度是:某种决定任务处理顺序的规则 处理机调度是按照一定算法选择一个进程把处理机分配给它. 高级调度(作业调度):按照一定原则从外存或后被队列的作业中挑选一个或多个作业,给他们分配内存等必 ...

  4. 基于时间片延长的轮转调度算法

    课程:操作系统 原算法:轮转调度算法 改进后算法:基于时间片延长的轮转调度算法 一.算法原理 1.1算法介绍 轮转Round Robin调度算法(RR,时间片调度):每次给就绪队列队首进程分配一定额度 ...

  5. OS轮转调度算法RR的C++实现

    在分时系统中,最简单也是较常见的是基于时间片的轮转(round robin,RR)调度算法.该算法采取了非常公平的处理机分配方式,即让就绪队列中的每个进程仅运行一个时间片,如果就绪队列上有n个进程,则 ...

  6. 【操作系统 - 2】时间片轮转RR进程调度算法

    操作系统系列 2017.03.17:整理第一版. 2018.01.08:添加使用 DEV C++ 的说明. ======== 学习至此,发现很多学了但很久没用的知识,久而久之,慢慢遗忘.等哪天还需要的 ...

  7. 时间片轮转RR进程调度算法(操作系统实验 C+)

    时间片轮转RR进程调度算法 1.实验目的 通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变.进程调度的策略及对系统性能的评价方法. 2.实验内容 问题描述: 设计程序模拟进程的时间片轮转R ...

  8. 操作系统实验之时间片轮转RR进程调度算法

    一.实验内容 设计程序模拟进程的时间片轮转RR调度过程.假设有n个进程分别在T1, - ,Tn时刻到达系统,它们需要的服务时间分别为S1, - ,Sn.分别利用不同的时间片大小q,采用时间片轮转RR进 ...

  9. 《操作系统》实验三:高响应比优先调度和时间片轮转RR进程调度算法

    [实验题目]:高响应比优先调度和时间片轮转RR进程调度算法 [实验学时]:4学时 [实验目的] 通过这次实验,加深对进程调度概念的理解,进一步掌握比FCFS和SJF更为复杂的进程调度算法的实现方法. ...

最新文章

  1. 2022-2028年中国AKD施胶剂行业市场研究及前瞻分析报告
  2. GIS开发随笔(2)——关于建立GIS数据库的几个问题
  3. c语言程序头文件作用,C语言头文件
  4. springboot 做表白墙_华农表白墙144期 | 等什么时候,她从我开的花店前经过,我把整个花店送个她可好。...
  5. linux mint 安装php,使用apt-get方式为Linux Mint 13安装PHP+MYSQL+Apache
  6. 天池 在线编程 最长AB子串(哈希)
  7. 在 Windows 7 中禁用IPv6协议/IPv6隧道
  8. C# 使用NPlot绘图
  9. Android(java)学习笔记114:Service生命周期
  10. UML第二次作业 类图中类的表示
  11. 【代码优化】考虑使用静态工厂方法代替构造器
  12. PPC手机新手教程,使用方法,疑难解答,最强大的PPC手机使用手则
  13. 串联稳压电源与多谐振荡器
  14. 新时达系统服务器怎么看故障,新时达系统故障详解:38故障
  15. 王之泰201771010131《面向对象程序设计(java)》第二周学习总结
  16. 设置WDS桥接成功,上不了网怎么办?路由器WDS无线桥接设置正确方法
  17. java 组件是什么意思_java中组件是什么意思?
  18. 用Python对微信好友进行简单统计分析
  19. PRBS码是什么?PRBS生成原理介绍(转)
  20. Facebook POP 动画框架 进阶指南

热门文章

  1. 高等数学 宋浩 笔记一
  2. LeetCode - 486. Predict the Winner(排成一条线的纸牌博弈问题)
  3. 太空射击 第07课: 添加图形
  4. AccountManager教程
  5. HDU 3313 Key Vertex 胡搞(网络流最小割拆点什么的人家才不会呢)
  6. 用DOCKER安装及使用SSCHA
  7. java swing 字体显示_如何在Java Swing中使用Wingdings字体
  8. swak4foam的安装(v7测试有效)
  9. JAVA-【将字符串中的英文括号替换为中文括号】
  10. 计算机主机配置有哪些,组装电脑配置推荐有哪些