高响应比优先调度算法和短作业优先调度算法
动态优先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。引入动态优先权,并使作业的优先权随其等待时间的增长,其优先权以速率a提高。优先权的变化规律可描述为:
优先权=(等待时间+要求服务时间)/要求服务时间
本实验模拟了高响应比优先调度算法。
假如系统中现有3个作业,分别为A、B、C,它们的作业大小、需要磁带机数、需要打印机数,在外存上等待的时间以及估计需要执行时间分别是:
A 5 2 1 3 10
B 3 3 2 4 6
C 7 1 2 2 14
按高响应比优先算法,假如要选一个作业,你认为选择哪个作业进行调度? B
1.打开“Microsoft Visual C++ 6.0”,输入相关代码后,对程序行进编译运行后,将前述的三个作业A、B、C的相关数据依次输入,得到运行结果:
2.将程序改为短作业优先算法,给出程序修改位置以及所改代码:
修改位置
if(jobtable[p].length<=memory&&jobtable[p].tape<=tape&&jobtable[p].printer<=printer){xk=(float)(jobtable[p].waittime+jobtable[p].runtime)/jobtable[p].runtime;if(q==0||xk>k) { k=xk;q=p;t=s;}}
所改代码
if(jobtable[p].length<=memory&&jobtable[p].tape<=tape&&jobtable[p].printer<=printer){xk=(float)(jobtable[p].runtime);if(q==0||xk<jobtable[p+1].runtime) { k=xk;q=p;t=s;}}
3.短作业优先算法中输入相同的三个作业A、B、C的相关数据,得到运行结果:
——————————————————————————————————————————————————————————————————————————————————————
附上高响应比优先调度算法:
#include"string.h"
#define n 10
typedef struct jcb {char name[4]; int length; int printer; int tape; int runtime; int waittime; int next;
}JCB;
int head;
int tape,printer;
long memory;
JCB jobtable[n];
int jobcount=0;
shedule(){float xk,k;int p,q,s,t;do{p=head;q=s=-1;k=0;while(p!=-1){if(jobtable[p].length<=memory&&jobtable[p].tape<=tape&&jobtable[p].printer<=printer){xk=(float)(jobtable[p].waittime+jobtable[p].runtime)/jobtable[p].runtime;if(q==0||xk>k) { k=xk;q=p;t=s;}}s=p;p=jobtable[p].next; } if(q!=-1){if(t==-1) head=jobtable[head].next;elsejobtable[t].next=jobtable[q].next; memory=memory-jobtable[q].length;tape=tape-jobtable[q].tape; printer=printer-jobtable[q].printer; printf("选中的作业的作业名: %s\n",jobtable[q].name);}} while(q!=-1);
}
void main(){char name[4];int size,tcount,pcount,wtime,rtime; int p;memory=65536; tape=4;printer=2;head=-1;printf("请输入作业相关数据(以作业大小为负数停止输入):\n");printf("输入作业名 作业大小 磁带机数 打印机数 等待时间 估计运行时间\n");scanf("%s %d %d %d %d %d",name,&size,&tcount,&pcount,&wtime,&rtime);while(size!=-1){if(jobcount<n)p=jobcount;else{printf("无法在创建作业\n");break;}jobcount++;strcpy(jobtable[p].name,name);jobtable[p].length=size;jobtable[p].printer=pcount;jobtable[p].tape=tcount;jobtable[p].runtime=rtime;jobtable[p].waittime=wtime;jobtable[p].next=head; head=p; printf("输入作业名 作业大小 磁带机数 打印机数 等待时间 估计运行时间\n");scanf("%s %d %d %d %d %d",name,&size,&tcount,&pcount,&wtime,&rtime);}shedule(); return;
}
附上短作业优先调度算法:
#include"string.h"
#define n 10
typedef struct jcb {char name[4]; int length; int printer; int tape; int runtime; int waittime; int next;
}JCB;
int head;
int tape,printer;
long memory;
JCB jobtable[n];
int jobcount=0;
shedule(){float xk,k;int p,q,s,t;do{p=head;q=s=-1;k=0;while(p!=-1){if(jobtable[p].length<=memory&&jobtable[p].tape<=tape&&jobtable[p].printer<=printer){xk=(float)(jobtable[p].runtime);if(q==0||xk<jobtable[p+1].runtime) { k=xk;q=p;t=s;}}s=p;p=jobtable[p].next; } if(q!=-1){if(t==-1) head=jobtable[head].next;elsejobtable[t].next=jobtable[q].next; memory=memory-jobtable[q].length;tape=tape-jobtable[q].tape; printer=printer-jobtable[q].printer; printf("选中的作业的作业名: %s\n",jobtable[q].name);}} while(q!=-1);
}
void main(){char name[4];int size,tcount,pcount,wtime,rtime; int p;memory=65536; tape=4;printer=2;head=-1;printf("请输入作业相关数据(以作业大小为负数停止输入):\n");printf("输入作业名 作业大小 磁带机数 打印机数 等待时间 估计运行时间\n");scanf("%s %d %d %d %d %d",name,&size,&tcount,&pcount,&wtime,&rtime);while(size!=-1){if(jobcount<n)p=jobcount;else{printf("无法在创建作业\n");break;}jobcount++;strcpy(jobtable[p].name,name);jobtable[p].length=size;jobtable[p].printer=pcount;jobtable[p].tape=tcount;jobtable[p].runtime=rtime;jobtable[p].waittime=wtime;jobtable[p].next=head; head=p; printf("输入作业名 作业大小 磁带机数 打印机数 等待时间 估计运行时间\n");scanf("%s %d %d %d %d %d",name,&size,&tcount,&pcount,&wtime,&rtime);}shedule(); return;
}
生活从来都不容易啊,当你觉得挺容易的时候,一定是有人在替你承担属于你的那份不容易 。-- 致父母
高响应比优先调度算法和短作业优先调度算法相关推荐
- 设有 4道作业,它们的提交时间及执行时间如下,试计算在单道程序环境下,采用先来先服务调度算法和短作业优先调度算法时的平均周转时间和平均带权周转时间,并指出它们的调度顺序。
处理机调度算法 题目: 设有 4道作业,它们的提交时间及执行时间如下: 试计算在单道程序环境下,采用先来先服务调度算法和短作业优先调度算法时的平均周转时间和平均带权周转时间,并指出它们的调度顺序. 先 ...
- C#进程调度的模拟实现:模拟先来先服务调度算法、短作业优先调度算法和优先级调度算法(考虑非抢占式和抢占式),进行算法评价,输出调度结果和算法评价指标。
没什么水平,希望能帮到你 环境:visual studio 2019 附带工程资源:C#进程调度的模拟实现附带资源-C#文档类资源-CSDN下载 先来先服务的调度算法:是一种非抢占式的算法,先来先服务 ...
- 操作系统:先来先服务调度算法以及短作业优先调度算法C语言实现
FCFS(先来先服务)和SJF(短作业优先)调度算法 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度.当在作业调度中采用该算法时,每次调度都是从后备作业 ...
- 短作业优先算法c语言实现,OS短作业优先调度算法C语言
OS短作业优先调度算法C语言 采用短作业优先调度算法调度程序 学 号: 姓 名: 专 业: 指导老师: 日 期: 目录 一.实验题目3 二.课程设计的目的3 三.设计内容3 四.设计要求3 五.主要数 ...
- 作业调度算法【平均周转时间、平均带权周转时间、先来先服务FCFS、短作业优先SJF、高优先权(级)算法FPF、高响应比优先算法HRRN】
文章目录 先来先服务算法(FCFS) 短作业优先算法(SJF).短进程优先算法(SPF) 周转时间和带权周转时间 高优先权(级)调度算法FPF 高响应比优先调度算法HRRN 先来先服务算法(FCFS) ...
- 【操作系统】-- 先来先服务算法(FCFS)、短作业优先算法(SJF)、高响应比调度算法(HRRN)
一.先来先服务(FCFS) 1.算法思想 主要从公平的角度考虑. 2.算法规则 按照 作业/进程 到达的先后顺序进行服务. 3.是否可抢占 非抢占式算法. 4.是否可导致饥饿 不会导致饥饿. 5.优缺 ...
- 调度算法——先来先服务(FCFS)、短作业优先(SJF)、高响应比优先(HRRN) 例题详细!!!
文章目录 前言 知识总览 先来先服务(FCFS, First Come First Serve) 短作业优先(SJF, Shortest Job First) 对FCFS和SJF两种算法的思考 高响应 ...
- 2.2.4 操作系统之作业/进程调度算法(FCFS先来先服务、SJF短作业优先、HRRN高响应比优先)
文章目录 0.思维导图 1.先来先服务---FCFS 2.短作业优先---SJF 3.高响应比优先---HRRN 4.三种算法的对比和总结 0.思维导图 1.先来先服务-FCFS First come ...
- 【学习笔记】第二章——调度算法:先来先服务FCFS、短作业优先SJF、高响应比HRRN
文章目录 一. 先来先服务(FCFS) 二. 短作业优先(SJF) 三. 高响应比优先 1. 对前面两种算法的思考 2. 描述 四. 一.二.三总结 例子都要手动写一遍哦-这三个是供早期的批处理系统使 ...
- 十一、FCFS(先来先服务)、SJF(短作业优先)、HRRN(高响应比优先)
一.知识总览 二.先来先服务(FCFS) **注意:**针对于先来先服务算法某些作业(或进程)平均周转时间长的缺点,提出了短作业优先的算法(SJF) 三.短作业优先(SJF) 1.非抢占式的短作业优先 ...
最新文章
- dp uva1218
- HTML的标签描述23
- C++ with STL(二)map
- Linux的scp命令
- mysql树形遍历_mysql树形结构遍历
- windows2003+PHP-5.3.8+IIS6.0的安装配置
- 读字库遇到坑爹的问题
- CRTMPServer 在CentOS 64-bit下的编译(转)
- yum install nginx
- java 的转义字符,在正则表达式中应用
- 4月电脑分辨率TOP10 :仅亚军1920*1080占比上涨
- Android——eclipse下运行android项目报错 Conversion to Dalvik format failed with error 1解决...
- Java-在线聊天系统-线程
- 什么将计算机连接到网络,Windows 8.1官方教程:将电脑连接到网络-windows技巧-电脑技巧收藏家...
- 格兰杰检验的基本步骤_实证检验步骤
- CROSS APPLY和OUTER APPLY的区别
- 产品读书《Facebook效应:看Facebook如何打造无与伦比的社交帝国》
- js与php与mysql_PHP、MySQL和JavaScript入门经典(第6版)
- 《零基础学HTML5+CSS3(全彩版)》读书笔记
- 数据仓库工程师面试经验(2019)