1. 最短作业优先:

最短作业优先(SJF)是一种调度任务请求的调度策略。每个任务请求包含有请求时间(即向系统提交的请求的时间)和持续时间(即完成任务所需时间)。

当前任务完成后,SJF策略会选择最短持续时间执行任务,若最短持续时间相同,则选择最早请求时间的任务。任务等待时间为请求时间和实际开始时间之差。

   “短作业优先”=“最短剩余时间优先”

2. 实例:

假设系统一直执行任务,从未空闲。设计程序,输入请求时间表和对应的持续时间表,以及任务数量,计算平均等待时间。

输入例子:

[0,1,3,9],[2,1,7,5],4

输出例子:

0.5

解题思路:

按照持续时间长短排序,只要请求时刻<=当前时刻就执行,否则找满足请求时刻<=当前时刻,持续时间次短的执行。

#include <iostream>  

#include <vector>  

using namespace std;

void sortDuration(int *arr1, int *arr2, int n){      //arr1为排序数列,arr2为跟随变化数列,第一行不参加排序  

    for (int i = ; i < n; i++)

        for (int j = ; j<n -  - i; j++)

            if (arr1[j]>arr1[j + ]){

                int temp1 = arr1[j];

                int temp2 = arr2[j];

                arr1[j] = arr1[j + ];

                arr2[j] = arr2[j + ];

                arr1[j + ] = temp1;

                arr2[j + ] = temp2;

            }

}

int main(){

    int request[] = { , , ,  };

    int duration[] = { , , ,  };

    int n = ;

    int time = duration[];

    double wait = ;

    vector<bool> book;

    for (int i = ; i < n; i++)

        book.push_back();

    sortDuration(duration, request, n);

    for (int i = ; i < n; i++)

        for (int j = ; j < n; j++)

            if (book[j] ==  && request[j] <= time){

                book[j] = ;

                wait += time - request[j];

                time += duration[j];

                break;

            }

    wait = wait / n;

    cout << wait << endl;

    //getchar();  

}
 

最短作业优先(SJF)的更多相关文章

  1. C语言模拟实现先来先服务(FCFS)和短作业优先(SJF)调度算法

    说明 该并非实现真正的处理机调度,只是通过算法模拟这两种调度算法的过程. 运行过程如下: 输入进程个数 输入各个进程的到达事件 输入各个进程的要求服务事件 选择一种调度算法 程序给出调度结果:各进程的 ...

  2. 短作业优先调度算法(SJF)

    假设有n项作业位于就绪队列中,这些作业的提交时间用数组requestTimes按照提交时间的先后顺序存储,对应的作业服务时间(持续时间)用数组durations存储.采用SJF算法,计算n项作业的平均 ...

  3. OS作业模拟SJF和FCFS

    一个OS的作业, 用于模拟短作业优先 和 先来先服务两种作业调度方式. #!/usr/bin/python3.5 ## Modify the SJF and FCFS algorithm in the ...

  4. 【操作系统】先来先服务和短作业优先算法(C语言实现)

    [操作系统] 先来先服务算法和短作业优先算法实现 介绍: 1.先来先服务 (FCFS: first come first service) 如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在就绪队列 ...

  5. 最短寻道优先算法(SSTF)——磁盘调度管理

    原创 最近操作系统实习,敲了实现最短寻道优先(SSTF)——磁盘调度管理的代码. 题目阐述如下: 设计五:磁盘调度管理 设计目的: 加深对请求磁盘调度管理实现原理的理解,掌握磁盘调度算法. 设计内容: ...

  6. 最短寻道优先算法----SSTF算法

    请珍惜小编劳动成果,该文章为小编原创,转载请注明出处. 该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短 java代码实现如下: import java.ut ...

  7. [OS] 操作系统常考知识点

    转自:http://jennica.space/2017/03/21/os-principle/ 大纲如下: 1.操作系统概述2.操作系统运行环境3.进程线程模型4.处理器调度5.同步机制6.存储模型 ...

  8. CPU调度算法

    批处理系统中的调度算法: *需要考虑的因素: 1. 吞吐量 2. cpu利用率 3. 周转时间 4. 公平性* 1.先来先服务: FCFS: 优点:实现简单 缺点:可能造成周转时间长 2.最短作业优先 ...

  9. 《操作系统_FCFS和SJF》

    先来先服务FCFS和短作业优先SJF进程调度 转自:https://blog.csdn.net/qq_34374664/article/details/73231072 一.概念介绍和案例解析 FCF ...

随机推荐

  1. LM27313 (ACTIVE) 具有 30V 内部 FET 开关(采用 SOT-23 封装)的 1.6 MHz 升压转换器

    The LM27313 switching regulator is a current-mode boost converter with a fixed operating frequency o ...

  2. 修改gnome-shell扩展“Applications Menu”的菜单区域宽度。

    sudo打开 /usr/share/gnome-shell/extensions/apps-menu@gnome-shell-extensions.gcampax.github.com/extensi ...

  3. c#封装三维向量,另外也看了下别人的C++封装

    一. c#实现 /* Vector3 Definition Created by taotao man on 2016-4-12 brief:封装三位向量类Vector3 // 修改记录: date: ...

  4. Java Collection 简介

    转自:http://skyuck.iteye.com/blog/526358 在 Java2中,有一套设计优良的接口和类组成了Java集合框架Collection,使程序员操作成批的数据或对象元素极为 ...

  5. Go -- 调用dll库

    package main import ( "syscall" "unsafe" ) func main(){ h, err := syscall.LoadLi ...

  6. c#抓去网页

    c#利用WebClient和WebRequest获取网页源代码的比较 2011-11-28 10:26:42     我来说两句 收藏 我要投稿 C#中一般是可以利用WebClient类和WebReq ...

  7. rqnoj-208-奥运火炬到厦门-dp

    这道题目是把一个连续的串看成一个环. 那么除了原始的求最大字段和外. 还存在一种情况是前面的连续最大值,加上后面的连续最大值. #include<stdio.h> #include< ...

  8. .net 序列化与反序列化

    1.序列化 反序列化 C#中如果需要:将一个结构很复杂的类的对象存储起来,或者通过网路传输到远程的客户端程序中去,这时就需要用到序列化,反序列化(Serialization & Deseria ...

  9. 汉字的unicode码范围是多少?

    unicode码的分布情况,够清楚了吧!不仅汉字,什么都有了!    *******************************************************    0000.. ...

  10. Zclip:复制页面内容到剪贴板兼容各浏览器

    WEB开发中,要让用户复制页面中的一段代码.URL地址等信息,为了避免用户拖动鼠标再进行右键复制操作而可能出现的差错,我们可以直接在页面中放置一个复制按钮,只需要轻轻一点这个复制按钮,内容将会被复制, ...