短作业优先调度算法(SJF)
假设有n项作业位于就绪队列中,这些作业的提交时间用数组requestTimes按照提交时间的先后顺序存储,对应的作业服务时间(持续时间)用数组durations存储。采用SJF算法,计算n项作业的平均等待时间。当存在多个相同长度的短作业时,按照提交时间的先后顺序进行调度。假设0<= n <= 100。求出所有作业的平均等待时间。
函数原型:void minWaitingTime(int requestTimes[],int durations[],int n)
测试用例:
输入
4
0 2 4 5
7 4 1 4
输出:
4.0
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #define MAX 0x7FFFFFFF void minWaitingTime(int requestTimes[],int durations[],int n)
{
int i,time,j,k;
float res;
int index,arriveTime,indextemp;
int *done = (int *)malloc(sizeof(int) * n); //表示作业是否执行过,1表示执行完毕,0表示未执行
int *wait = (int *)malloc(sizeof(int) * n); //表示等待时间
for(i = ; i < n; ++i){
wait[i] = ;
done[i] = ;
} time = ; //time表示总作业执行时间
for(i = ; i < n; i++){
if(i == ){ //执行第一个作业
time += durations[i];
done[i] = ;
for(j = ; j < n; j++){
if(requestTimes[j] < time)
wait[j] = time - requestTimes[j];
}
}
else{
index = GetMin(durations,done,n);
//判断是否有多个最短作业,如有选择其中先到达的
arriveTime = requestTimes[index];
for(indextemp = index + ; indextemp < n; indextemp++){
if(done[indextemp] == && durations[indextemp] == durations[index] &&
requestTimes[indextemp] < arriveTime)
index = indextemp;
} time += durations[index];
done[index] = ;
//执行选出的最短作业,并更新其它作业的等待时间
for(indextemp = ; indextemp < n && i < n-; indextemp++)
if(done[indextemp] == &&requestTimes[indextemp] < time)
wait[indextemp] = time - requestTimes[indextemp];
}
} res = 0.0;
for(i = ; i < n; i++)
res += wait[i]; printf("%f\n",res / n); }
//每次取出服务时间最短且示执行过的作业
int GetMin(int durations[],int done[],int n)
{
int i,j,min = MAX;
for(i = ; i < n; i++)
if(durations[i] < min && done[i] == ){
min = durations[i];
j = i;
}
return j;
} int main()
{
int requestTimes[];
int durations[];
int i,n;
scanf("%d",&n);
for(i = ; i < n; i++)
scanf("%d",&requestTimes[i]);
for(i = ; i < n; i++)
scanf("%d",&durations[i]); minWaitingTime(requestTimes,durations,n); system("pause");
return ;
}
短作业优先调度算法(SJF)的更多相关文章
- 【操作系统】先来先服务和短作业优先算法(C语言实现)
[操作系统] 先来先服务算法和短作业优先算法实现 介绍: 1.先来先服务 (FCFS: first come first service) 如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在就绪队列 ...
- C语言模拟实现先来先服务(FCFS)和短作业优先(SJF)调度算法
说明 该并非实现真正的处理机调度,只是通过算法模拟这两种调度算法的过程. 运行过程如下: 输入进程个数 输入各个进程的到达事件 输入各个进程的要求服务事件 选择一种调度算法 程序给出调度结果:各进程的 ...
- 最短作业优先(SJF)
1. 最短作业优先: 最短作业优先(SJF)是一种调度任务请求的调度策略.每个任务请求包含有请求时间(即向系统提交的请求的时间)和持续时间(即完成任务所需时间). 当前任务完成后,SJF策略会选择最短 ...
- golang模拟动态高优先权优先调度算法
实验二 动态高优先权优先调度 实验内容 模拟实现动态高优先权优先(若数值越大优先权越高,每运行一个时间单位优先权-n,若数值越小优先权越高,没运行一个时间单位优先权+n),具体如下: 设置进程体:进 ...
- 0422 Step2-FCFS调度
一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行, ...
- 操作系统常用调度算法(转载https://www.cnblogs.com/kxdblog/p/4798401.html)
操作系统常用调度算法 在操作系统中存在多种调度算法,其中有的调度算法适用于作业调度,有的调度算法适用于进程调度,有的调度算法两者都适用.下面介绍几种常用的调度算法. 先来先服务(FCFS)调度算法 ...
- OS中常用的调度算法总结 (转)
http://blog.chinaunix.net/uid-25132162-id-361291.html 一.常见的批处理作业调度算法 1.先来先服务调度算法(FCFS):就是按照各个作业进入系统的 ...
- OS调度算法常用摘要
一.常见的批处理作业调度 1.先来先服务调度算法(FCFS):就是依照各个作业进入系统的自然次序来调度作业.这样的调度算法的长处是实现简单,公平. 其缺点是没有考虑到系统中各种资源的综合使用情况,往往 ...
- 操作系统也谈"算法"
前言: 近来在准备校招的笔试面试,复习到操作系统时感觉概念性的东西比较多,不过对于以下的几类算法还是有必要做个小小总结. [作业调度算法] 先来先服务(FCFS, First Come First S ...
随机推荐
- 给一个div绝对定位后,如何让它水平居中
<style> .footer{position:absolute;left:0;right:0} </style> <div classs="footer&q ...
- F2工作流引擎之 概述(一)
简介 工作流应该算是基础框架软件,主要用于流程的重组和优化,它有广阔的应用领域.在java下有很多优秀的开源工作流可以选择比如activit5.jpbm4等,在.net下却几乎找不到令人满意的工作流引 ...
- 使用Android应用调用Web Service
Java本身提供了丰富的Web Service支持,比如Sun公司指定的JAX-WS 2规范,还有Apache开源组织所提供的Axis1.Axis2.CXF等,这些技术不仅可以用于非常方便地对外提 ...
- Shannon entropy
Shannon entropy is one of the most important metrics in information theory. Entropy measures the unc ...
- 关于DButils的简单介绍
android中的orm框架,一行代码就可以进行增删改查:支持事务,默认关闭:可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名)等等 ...
- sscanf函数
sscanf函数用法举例 #include <stdio.h> #include <string.h> #define N 512 int main() { char buf[ ...
- JAVA 集合List、Map、Set
Collection(接口) Set(接口) HashSet(类) … List(接口) ArrayList(类) Vector(类) LinkedList(类) … Map(接口) HashMap( ...
- Qt之WebKit学习之绘图
void Serial::on_pushButton_clicked() { //scroll(4,0); flag_btn = true; // this->update(); //绘图绘在窗 ...
- 利用Jmeter进行Web测试
JMeter介绍 脚本录制 运行JMeter进行测试 JMeter主要组件介绍 参数化设置 动态数据关联 使用命令行运行JMeter脚本 利用XSLT分析JMeter结果文件 1:JMeter,一个1 ...
- jQueryMobile控件之页面切换
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...