高响应比优先调度算法和短作业优先调度算法

简介: 高响应比优先调度算法和短作业优先调度算法

动态优先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。引入动态优先权,并使作业的优先权随其等待时间的增长,其优先权以速率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的相关数据依次输入,得到运行结果:

image.png


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;
  else
    jobtable[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;
  else
    jobtable[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;
}


目录
相关文章
|
6天前
|
算法 调度
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】
|
9月前
|
算法 调度
【需求响应】基于进化算法的住宅光伏电池系统需求响应研究(Matlab代码实现)
【需求响应】基于进化算法的住宅光伏电池系统需求响应研究(Matlab代码实现)
|
9月前
|
算法 调度
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
|
10月前
|
供应链 算法 决策智能
电力系统激励型需求响应+自适应多群体优化算法(Python实现)
电力系统激励型需求响应+自适应多群体优化算法(Python实现)
110 0
电力系统激励型需求响应+自适应多群体优化算法(Python实现)
|
10月前
|
算法
计及需求响应的改进灰狼优化算法求解风、光、柴、储容量优化配置(Matlab代码实现)
计及需求响应的改进灰狼优化算法求解风、光、柴、储容量优化配置(Matlab代码实现)
|
10月前
|
算法 安全 新能源
计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置(Matlab代码实现)
计及需求响应的粒子群算法求解风能、光伏、柴油机、储能容量优化配置(Matlab代码实现)
|
10月前
|
算法 调度
计及需求响应的基于改进天牛须算法算法的孤岛微电网优化调度(Matlab代码实现)
计及需求响应的基于改进天牛须算法算法的孤岛微电网优化调度(Matlab代码实现)
|
3天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
4天前
|
存储 算法 数据可视化
基于harris角点和RANSAC算法的图像拼接matlab仿真
本文介绍了使用MATLAB2022a进行图像拼接的流程,涉及Harris角点检测和RANSAC算法。Harris角点检测寻找图像中局部曲率变化显著的点,RANSAC则用于排除噪声和异常点,找到最佳匹配。核心程序包括自定义的Harris角点计算函数,RANSAC参数设置,以及匹配点的可视化和仿射变换矩阵计算,最终生成全景图像。
|
4天前
|
算法 Serverless
m基于遗传优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真
MATLAB 2022a仿真实现了遗传优化的归一化最小和(NMS)译码算法,应用于低密度奇偶校验(LDPC)码。结果显示了遗传优化的迭代过程和误码率对比。遗传算法通过选择、交叉和变异操作寻找最佳归一化因子,以提升NMS译码性能。核心程序包括迭代优化、目标函数计算及性能绘图。最终,展示了SNR与误码率的关系,并保存了关键数据。
13 1