高响应比优先调度算法 java_操作系统高响应比优先模拟算法
这学期刚开始学习操作系统,收到一个作业,百度关于高响应比优先(HRRN,Highest Response Ratio Next)的CPU进程调度模拟算法,基本思想:短作业优先调度算法 + 动态优先权机制;既考虑作业的执行时间也考虑作业的等待时间,综合了先来先服务(FCFS,First Come First Served)和最短作业优先(SJF,Shortest Job First)两种算法的特点。
之后经过多番揣摩... ...决定界面用命令行算了,反正啥也不会...
关于响应比:
RR = (预计运行时间 + 等待时间) / 预计运行时间 = 1 + 等待时间/预计运行时间;
响应比高者优先进行调度;
关于要求中的周转时间、带权周转时间、平均周转时间和平均带权周转时间:
周转时间 =(作业完成的时间 - 作业提交时间);
带权周转时间 = 作业周转时间 / 作业运行时间;
平均周转时间 = (周转时间1+周转时间2+...+周转时间n)/ n;
平均带权周转时间 = (带权周转时间1+带权周转时间2+...+带权周转时间n)/ n;
开始,用vector存储提交的作业结构体指针,自己设置一个系统时间,毕竟模拟不可能时间流速一毛一样,接下来就是毫无技术含量的选择了,关于测试数据,想了想好难输,还得自己编,于是用随机函数产生数据;再在主函数参数中提供一个传递生成数据数量的参数。
说到这里得说一下,关于java老师(没错,java老师)说的关于main()的一些情况:
1 int main(int argc, char** argv){ argc为参数个数, argv为接下来传的参数
2 ...3 return 0;4 }
比如在命令行中调用该函数,***.exe 100,此时有两个参数,一个为"***.exe", 另一个就是"100"了,分别在argv[0]和argv[1]中。
首先是数据生成,用为要求格式,所以要小处理一下,感觉这种方法可以在刷ACM题被题目玄学时使用,一个为标准代码,一个为自己的代码,目前未试过:
1 #include "bits/stdc++.h"
2 using namespacestd;3
4 int ch_to_int(char*s){5 int ans = 0, len =strlen(s);6 for(int i = 0; i < len; i++) ans = ans*10 + s[i]-'0';7 returnans;8 }9 int main(int argc, char**argv){10 int k, N, tj/*0~23*/, ys/*0~59*/, tmp;11 freopen("test.txt", "w", stdout);12 srand(time(NULL)); //以系统时间为种子生成真正的随机数
13 N = k = ch_to_int(argv[1]);14 while(k--){15 tmp = (rand() + 24)%24 * 100 + (rand() + 6)%6*10 + (rand() + 10)%10;16 printf("%04d %d\n", tmp, (rand() + N)%N + 1);17 }18 return 0;19 }
调度算法:
1 #include "bits/stdc++.h"
2 #include "windows.h"
3 using namespacestd;4 typedef long longll;5
6 //(所有时间以分钟为单位存储,需要时转化)
7
8 ll systemTime; //自定义系统当前时间
9
10 structTask{11 int Tij; //提交时间
12 int Ysi; //预计运行时间
13 ll waitingTime; //等待时间
14 int id; //作业号
15
16 ll prior(){17 return 1 + waitingTime*1.0/Ysi;18 }19
20 Task(int T, intY){21 Tij =T;22 Ysi =Y;23 waitingTime = 0;24 }25 ll aroundTime(){26 return systemTime - Tij +Ysi;27 }28
29 doublepriorTime(){30 return aroundTime()*1.0/Ysi;31 }32 void disp(intord){33 printf("--调度次序: %d --作业号: %04d --调度时间:%02d%02d --周转时间: %d min(s) --带权周转时间%.2f ...\n",34 ord, id, (systemTime/100 + systemTime/60)%24, systemTime%60, aroundTime(), priorTime());35 }36 };37
38 int cmp1(const Task* a, const Task*b){39 return (a->Tij) < (b->Tij);40 }41
42 intmain(){43 vector taskArr; ///以不定长数组存储作业队列
44
45 intTij, Ysi, order;46 ll ave_aroundTime = 0;47 double ave_prior_aroundTime = 0;48
49 freopen("test.txt", "r", stdin);50 system(".\\生成测试数据.exe 1024"); //调用测试数据生成程序
51
52 while(cin>>Tij>>Ysi) taskArr.push_back(new Task(Tij%100 + Tij/100*60, Ysi));53
54 按提交时间进行排序并编号
55 sort(taskArr.begin(), taskArr.end(), cmp1);56 std::vector::iterator pos;57 for(pos = taskArr.begin(); pos != taskArr.end(); pos++){58 (*pos)->id = pos -taskArr.begin();59 }60
61 std::vector::iterator willRun; //指向即将运行程序
62 systemTime = (*taskArr.begin())->Tij; ///将系统当前时间设置为最早提交的作业时间
63 order = -1;64 while(!taskArr.empty()){65 bool flag = false; ///判定是否有新的程序提交
66 willRun =taskArr.begin();67 for(pos = taskArr.begin(); pos != taskArr.end(); pos++){68 if((*pos)->Tij > systemTime) break;69 willRun = (*willRun)->prior() < (*pos)->prior() ?pos : willRun;70 flag = true;71 }72 if(!flag){73 willRun =taskArr.begin();74 systemTime = (*willRun)->Tij;75 }76
77 (*willRun)->disp(++order);78
79 ave_aroundTime += (*willRun)->aroundTime(); //总周转
80 ave_prior_aroundTime += (*willRun)->priorTime(); //总带权周转
81
82 for(pos = taskArr.begin(); pos != taskArr.end(); pos++){ //更新等待时间
83 if((*pos)->Tij waitingTime += (*willRun)->Ysi;85 }86 }87
88 systemTime += (*willRun)->Ysi; //系统时间增加
89
90 taskArr.erase(willRun); //结束则删除91
92 //Sleep(10);
93 }94 cout<
97 return 0;98 }
加油( ̄▽ ̄)"
高响应比优先调度算法 java_操作系统高响应比优先模拟算法相关推荐
- 理发师问题报告java_操作系统-理发师问题的java模拟
1.理发师问题的java语言模拟对于操作系统经典的理发师问题,给出一种基于java代码的解决方案.一.问题分析:我们首先需要考虑以下的情况:1.没有顾客时:理发师休息2.顾客到来但理发师在睡觉时:唤醒 ...
- 假设有四个作业,它们的提交、运行时间如下表所示。若采用高响应比优先调度算法,试问平均周转时间和平均带权周转时间为多少?
处理机调度算法 题目: 假设有四个作业,它们的提交.运行时间如下表所示.若采用高响应比优先调度算法,试问平均周转时间和平均带权周转时间为多少? 高响应比优先(HRRN)调度算法 是对FCFS调度算法和 ...
- 操作系统第一次实验-短作业优先调度算法
一.实验目的: 目的:了解并掌握作业调度的功能,熟悉并掌握各种作业调度算法. 任务:模拟实现先来先服务或者短作业优先调度算法. 二.实验内容: 模拟实现SJF调度. 设置作业体:作业名,作业的到达时间 ...
- 短作业优先算法c语言实现,OS短作业优先调度算法C语言
OS短作业优先调度算法C语言 采用短作业优先调度算法调度程序 学 号: 姓 名: 专 业: 指导老师: 日 期: 目录 一.实验题目3 二.课程设计的目的3 三.设计内容3 四.设计要求3 五.主要数 ...
- 操作系统高响应比优先调度算法代码_进程调度
进程调度的定义 进程的调度就是操作系统进程管理的一个重要组成部分. 其任务是选择下一个要运行的进程. 那么如何进行选择呢? 要探明这一点,首先需要确定操作系统进程调度的目标是什么. 有了目标,我们就知 ...
- 操作系统调度算法--高响应比优先调度算法解析
高响应比优先调度算法(Highest Response Radio Next,HRRN)是一种对CPU中央控制器响应比的分配的算法.HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之 ...
- 非抢占的高响应比优先调度算法
模拟操作系统进程调度 算法流程图 测试数据 进程名: A B C D E 需要运行时间: 3 6 4 5 2 5 ProcA 8 3 ProcB 10 6 ProcC 7 4 ProcD 12 5 P ...
- 高响应比优先调度算法 (HRRN)例题
高响应比优先调度算法(Highest Response Ratio Next)是一种对CPU中央控制器响应比的分配的一种算法.HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之间的折 ...
- 高响应比优先调度算法
任务描述 本关任务:编写一个高响应比优先调度算法解决一个实际的进程调度问题,并打印出每个进程的完成时间.周转时间和带权周转时间 相关知识 为了完成本关任务,你需要掌握:1.先来先服务调度算法,2.进程 ...
- 先来先服务和高响应比优先调度算法C语言实现
先来先服务和高响应比优先调度算法C语言实现 目录: 1.进程调度与作业调度的区别: 2.单道批处理系统与多道批处理系统的区别: 3.程序设计用到的公式: 4.高响应比优先算法特点: 5.源代码示例: ...
最新文章
- 【Python培训基础】一篇文件教你py文件打包成exe
- accp8.0转换教材第1章多线程理解与练习
- while的用法java_java中的while循环和do while循环
- python移植到arm_python移植到arm平台
- AcWing 789. 数的范围
- HTML表单颜色选择器
- r语言平均值显著性检验_R语言:常用统计检验方法(一)数据分析师
- 居民身份证号码的编码规则
- 优酷视频如何登录优酷账号?
- 【C语言】五彩斑斓的颜色
- 爱思服务器可以下小组件,iOS14 小组件添加/删除方法教程
- 【通用】Windows Server 2012突然无法复制文件到阿里云服务器
- chrome调试与设置 remote设备调试
- kcon 黑客大会 github
- Android开发者该学习哪些东西提高竞争力?成功入职腾讯
- Hive基本SQL操作
- *uni-app之H5端跨域问题解决方案
- windows安全警报怎么关闭_windows安全中心怎么关闭
- 调节e18-d80nk的测量距离_常用测量仪器操作教学 | 视频+图文
- NCspeed软件+视频教程