c语言实现调度算法--RR算法

  • 测试输入为4个进程,时间片q=3,进程为A、B、C、D,序列号为都为0,运行时间分别为6/7/9/12

测试输入为4个进程,时间片q=3,进程为A、B、C、D,序列号为都为0,运行时间分别为6/7/9/12

RR算法代码实现:
#include<stdio.h>
#define MAX 10
struct task_struct
{char name[10];           /*进程名称*/int number;              /*进程编号*/float come_time;         /*到达时间*/float run_begin_time;     /*开始运行时间*/float run_time;          /*运行时间*/float run_end_time;      /*运行结束时间*/int priority;           /*优先级*/int run_flag;          /*调度标志*/int start_flag;     //是否为第一次开始调度
} tasks[MAX];
int counter; /*实际进程个数*/
int time_counter=0;
int poutput(); /*调度结果输出*/
int time();
int charge();//判断是否所有的进程都被执行过void main()
{pinput();printf("时间片轮转算法。\n\n");time();poutput();
}int time()
{float time_temp=0;int i;int j=0;int k=0;struct task_struct  copy_task[MAX];//备份for(i=0; i<counter; i++){copy_task[j++]=tasks[i];//对进程的初始化信息备份}time_temp=tasks[0].come_time;while(charge()){for(i=0; i<counter; i++){if(tasks[i].come_time>time_temp){time_temp=tasks[i].come_time;}if(tasks[i].run_flag==0)//该进程还未结束{if(tasks[i].start_flag==0)  //该条件成立则说明,该进程是第一次执行,记录开始执行时间{tasks[i].run_begin_time=time_temp;tasks[i].start_flag=1;}if(tasks[i].run_time/time_counter>1)//至少有两倍的时间片未执行{tasks[i].run_time=tasks[i].run_time-time_counter;time_temp=time_temp+time_counter;}else if(tasks[i].run_time-time_counter==0){time_temp=time_temp+time_counter;tasks[i].run_end_time=time_temp;tasks[i].run_flag=1;tasks[i].run_time=copy_task[i].run_time;}else//仅剩下不足一倍的时间片{time_temp=time_temp+tasks[i].run_time;tasks[i].run_end_time=time_temp;tasks[i].run_flag=1;tasks[i].run_time=copy_task[i].run_time;}}}}
}int charge()//判断是否全部进程都执行完毕
{int k;int super_flag=0;//判断是否全部的进程都执行完毕for(k=0; k<counter; k++){if(tasks[k].run_flag==0){super_flag=1;return super_flag;break;}else{super_flag=0;}}return super_flag;
}int pinput() /*进程参数输入*/
{int i;printf("please input the process counter:\n");scanf("%d",&counter);printf("please input the length of time:\n");scanf("%d",&time_counter);for(i=0; i<counter; i++){printf("******************************************\n");printf("please input the process of %d th :\n",i+1);printf("please input the name:\n");scanf("%s",tasks[i].name);printf("please input the number:\n");scanf("%d",&tasks[i].number);printf("please input the come_time:\n");scanf("%f",&tasks[i].come_time);printf("please input the run_time:\n");scanf("%f",&tasks[i].run_time);printf("please input the priority:\n");scanf("%d",&tasks[i].priority);tasks[i].run_begin_time=0;tasks[i].run_end_time=0;tasks[i].run_flag=0;  //运行是否结束tasks[i].start_flag=0;//是否首次被执行}return 0;
}int poutput() /*调度结果输出*/
{int i;float turn_round_time=0,f1,w=0;printf("进程名 进程号 到达时间 运行时间 开始时间 结束时间 优先级 周转时间\n");for(i=0; i<counter; i++){f1=tasks[i].run_end_time-tasks[i].come_time;turn_round_time+=f1;printf("%s\t%d\t%5.3f\t%5.3f\t%5.3f\t %5.3f\t   %d\t  %5.3f\n",tasks[i].name,tasks[i].number,tasks[i].come_time,tasks[i].run_time,tasks[i].run_begin_time,tasks[i].run_end_time,tasks[i].priority,f1);}printf("average_turn_round_timer=%5.2f\n",turn_round_time/counter);return 0;
}

C语言实现操作系统的进程调度算法--RR算法相关推荐

  1. 进程调度c语言 fcfs,计算机进程调度算法FCFS、RR、SJF的实现

    调度算法,在Linux环境下用C语言编写程序,模拟FCFS.RR.SJF等进程调度算法,以及利用信号量等方法解决哲学家就餐问题. 在主进程中,创建 20 个子线程,分别模拟进程调度算法FCFS.RR. ...

  2. CPU调度算法——FCFS算法/SJF算法/优先级调度算法/RR算法

    文章目录 一.先来先服务(FCFS)调度算法 二.最短作业优先(SJF)算法 1. 非抢占式SJF 2. 抢占式SJF 三.优先级调度算法 1. 非抢占式优先级调度算法 2. 抢占式优先级调度算法 四 ...

  3. 操作系统的进程调度算法

    一.进程调度算法 本专栏前面文章操作系统之进程状态及其切换方式介绍了进程的五种状态,进程调度算法主要解决进程从就绪状态进入运行状态的调度策略,本文主要介绍六大进程调度策略. 二.先来先服务算法(FCF ...

  4. C语言优先级 短进程 调度算法对于分号和小数点作为间隔符的实现

    调度算法思想 短作业(进程)优先调度算法 系统对于短进程或者作业进行调度,当有若干进程进入系统后,系统从队列中选择一个个或者是若干个来进行作业调度进程调度,当前进程运行完后接着寻找下一个最短时间的进程 ...

  5. 操作系统实验二——进程调度算法(FCFS、RR)

    目录 进程调度算法 FCFS算法代码 RR算法代码 进程调度算法 FCFS算法代码 #include <stdio.h> #include <string.h> #includ ...

  6. 914-详解进程调度算法

    进程调度算法 先来先服务算法 短作业优先算法 高相应比优先算法 时间片轮转 情况2: 假如说: 优先级调度算法 思考 多级反馈队列调度算法 总结

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

    Time类 package RR算法; public class time {private int hour;private int min;public int getHour() {return ...

  8. 静态优先权调度算法C语言实现6,静态优先权优先算法的进程调度程序文件.doc

    . . . .. . 学习好帮手 静态优先权优先算法的进程调度程序 学 院 专 业 学 生 姓 名 学 号 指导教师姓名 21014年 3 月 19 日 目 录 TOC \o "1-3&qu ...

  9. c++时间片轮转rr进程调度算法_「学习笔记」时间片轮转(RR)调度算法(详解版)...

    关键词:时间, 进程, 调度, 队列, 切换 时间片轮转(RR)时间片轮转(RR)调度算法是专门为分时系统设计的.它类似于 FCFS调度,但是增加了抢占以切换进程. 该算法中,将一个较小时间单... ...

最新文章

  1. 华为交换机ssh思科交换机_思科交换机交换机中ip、mac地址绑定
  2. 清华成立“脑与智能”和“未来”两大实验室,跨学科AI深度融合
  3. rocksdb和leveldb性能比较——写性能
  4. android 引用jar的r文件,正确的方法来处理Android库的ant构建. Build从jar文件中排除R.class...
  5. access开发精要(4)-参考与查阅
  6. Axure RP 7.0团队项目使用笔记
  7. 当 Egg 遇到 TypeScript,收获茶叶蛋一枚 #27
  8. 数据和云,半年文章精选(文末赠书)
  9. java粒子群优化算法_粒子群优化算法的JAVA实现
  10. spring 框架发送 simpleMail email
  11. java模拟网银登录_Java模拟网上银行业务
  12. centos 安装rarlinux
  13. 南方cass10.1中文版
  14. Win10 全屏截图快捷键
  15. 快递地址自动识别填充
  16. 安卓修改RadioButton圆圈样式(非直接图片替换)
  17. 校园网及入网计算机管理制度,校园网用户入网管理规定
  18. CSS3多列布局 columns 弹性布局 flex
  19. android8 twrp 小米6,小米6 第三方twrp中文Recovery3.2.3-0刷入工具|支持ROOT|自动解密data分区...
  20. 面试——数据库常问问题

热门文章

  1. 计算机网络安全的对策有哪些,计算机网络安全措施有哪些
  2. UGUI图集的理解与使用
  3. 2021年区域赛ICPC沈阳站J-Luggage Lock(代码简洁)
  4. 3.2 使用直线段工具标注尺寸信息 [Illustrator CC教程]
  5. 一般纳税人什么意思(为什么一般纳税人认定500万)
  6. RH Timer for Mac(定时器软件)
  7. 长大后才知道,成年人的哭原来没有声音
  8. Distilled Dual-Encoder Model for Vision-Language Understanding
  9. 【数据结构(C语言描述)】环形队列
  10. jqGrid可编辑模式下 单元格内容不能复制处理