短作业优先调度算法(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 ...
随机推荐
- spring随手笔记2:初始化方法
1.init-method="init" public class HelloWorldServiceImpl implements HelloWorldService { pri ...
- 支持GPS的核心API
Android为GPS功能支持专门提供了一个LocationManager类,它的作用于TelephonyManager.AudioManager等服务类的作用相似,所有GPS定位相关的服务.对象都将 ...
- 动态监控驱动、dll、exe加载
/* windows2003 x86/x64 window7 x86 windows2008 R2 x64测试通过 */ #include <ntddk.h> #include " ...
- 省常中模拟 day2
第一题: 题目大意: 有mn颗糖,要装进k个盒子里,使得既可以平均分给n个人,也可以平均分给m个人. 求k的最小值. 解题过程: 1.先看一组小数据(13,21).那么根据贪心的原则很容易想到先拿13 ...
- Linux Shell 脚本入门
linux shell 脚本格式 #!/bin/sh#..... (注释)命令...命令... 使用vi 创建完成之后需设置权限 chmod +x filename.sh 执行命令: ./filena ...
- c/c++面试题(2)
4.已知String类的原型是: class String { public: String(const char* str = NULL); //普通的构造函数 String(const Str ...
- iOS6的旋屏控制技巧
在iOS5.1 和 之前的版本中, 我们通常利用 shouldAutorotateToInterfaceOrientation: 来单独控制某个UIViewController的旋屏方向支持,比如: ...
- linux安装eclipse
1 采用ssh无法运行eclipse, 错误如下: Autolaunch error: X11 initialization failed.\n, 打开日志文件: org.eclipse.swt. ...
- Javascript笔记一
Javascript: ECMAscript :相当于翻译器 翻译电脑于代码 解释器 DOM document object model 文档 对象 模型 --->document 获取 ...
- MYSQL基本操作语句
0.修改密码:mysqladmin -u root -p password 123456 导出数据库:mysqldump -u root -p yunpay>yunpay.sql 导入数据库:m ...