先来先服务算法(FCFS)和 短作业优先算法(SJF)

FCFS、SJF、HRRN调度算法 文章目录FCFS、SJF、HRRN调度算法知识总览图先来先服务(FCFS,First Come First Serve)短作业优先(SJF,Shortest Job First)对FCFS和SJF两种算法的思考高响应比优先算法(HRRN,Highest Response Ratio Next) FCFS、SJF、HRRN调度算法 知识总览图 什么叫做饥饿?就是进程一直不被CPU处理。FCFS算法不会导致饥饿是因为,它的所有的进程按到来的时间先后顺序依次执行,所以每个进程都会被执行到。SJF/SPF算法会导 阅读详情

先来先服务算法(FCFS)

FCFS是最简单的调度算法,既可以用作作业调度,也可以用作进程调度

这种算法优先考虑系统中等待时间最长的作业(进程),而不管作业所需执行时间长短,

做法是从后备队列中选择几个最先进入该队列的作业,将它们调入内存,为它们分配资源和创建进程,然后放入就绪队列

进程调度中使用此算法时,每次都从就绪的进程队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行,该进程会一直运行到完成或者因发生某事件而阻塞后,进程调度程序才会把处理机分配给其他进程

短作业优先算法(SJF)

由于在实际情况中短作业(进程)所占比例很大,为了让它们比长作业优先执行,就有了此算法

SJF顾名思义以作业长短来确定优先级,作业越短优先级越高,作业的长短用作业所需的运行时间来衡量,此算法一样也可以用做进程调度,它将从外存的作业后备队列中选择若干个估计运行时间最短的作业,优先将它们调入内存运行

#include<iostream>  
#include<iomanip>  
using namespace std;  
  
static const int MaxNum=100;  
int  ArrivalTime[MaxNum];  
int  ServiceTime[MaxNum];  
int  FinishTime[MaxNum];  
int  WholeTime[MaxNum];  
double  WeightWholeTime[MaxNum];  
double AverageWT,AverageWWT;   
double WT , WWT;  
  
//-------------------------------------------------------------------  
//先来先服务调度算法  
//------------------------------------------------------------------  
void FCFS(int n)  
{  
    cout<<endl;  
    cout<<"FCFS:"<<endl;   
    cout<<"   进程ID"<<"         完成时间"<<"         周转时间"<<"      带权周转时间"<<endl;  
    //完成时间计算  
    for(int i = 0 ; i < n ; i++)  
    {  
        if(i==0){  
            FinishTime[0] = ArrivalTime[0] + ServiceTime[0];  
        }else{  
            FinishTime[i] = FinishTime[i-1] + ServiceTime[i];  
        }  
        WholeTime[i] = FinishTime[i] - ArrivalTime[i];  
        WeightWholeTime[i] = (float)WholeTime[i]  / (float)ServiceTime[i];  
        WT = WT + WholeTime[i];  
        WWT = WWT + WeightWholeTime[i];  
        cout<<"\t"<<setprecision(3)<<i+1<<"\t\t"<<setprecision(3)<<FinishTime[i]<<"\t\t"<<setprecision(3)<<WholeTime[i]<<"\t\t"<<setprecision(3)<<WeightWholeTime[i];  
        cout<<endl;  
    }  
    AverageWWT = WWT / n;  
    AverageWT = WT / n;  
    cout<<"平均周转时间为:        "<<setprecision(3)<<AverageWT<<endl; //保留三位有效数字  
    cout<<"平均带权周转时间为:     "<<setprecision(3)<<AverageWWT;  
    WT = 0;                         //WT和WWT最后要置零,因为我单独把计算周转时间等作为一个函数  
    WWT = 0;                        //如果不置零将导致后续引用该函数的出错  
    cout<<endl;  
}  
  
//---------------------------------------------------------------------------  
//短作业(进程)优先调度算法  
//-----------------------------------------------------------------------------  
void SJF(int n)  
{  
    cout<<endl;  
    cout<<"SJF:"<<endl;   
    cout<<"   进程ID"<<"         完成时间"<<"         周转时间"<<"      带权周转时间"<<endl;  
    int finish = 0;  
    int min,k;  
    int m[MaxNum] = {0};  
  
    //完成时间计算  
   /** FinishTime[0] = ArrivalTime[0] + ServiceTime[0];  
    finish = FinishTime[0];  
    WholeTime[0] = FinishTime[0] - ArrivalTime[0];  
        WeightWholeTime[0] = (float)WholeTime[0]  / (float)ServiceTime[0];  
        WT = WT + WholeTime[0];  
        WWT = WWT + WeightWholeTime[0];  
        cout<<"\t"<<setprecision(3)<<1<<"\t\t"<<setprecision(3)<<FinishTime[0]<<"\t\t"<<setprecision(3)<<WholeTime[0]<<"\t\t"<<setprecision(3)<<WeightWholeTime[0];  
        cout<<endl;  
  */
    for (int j = 0 ; j < n ; j++)  
    {     
        min = 5000;                             //将最小值设置的比较大,服务时间不可能能达到如此大  
        for (int i = 0 ; i < n; i++)         //找到最短服务时间  
            if(m[i]==0 && ServiceTime[i]<min&&ArrivalTime[i]<=finish)  
            {  
                min = ServiceTime[i];  
                k = i;  
            }  
        m[k] = 1;     
        FinishTime[k] = finish + min;           //计算该进程的完成时间  
        finish = FinishTime[k];                             //标记该进程  
          
    }  
  
    for(int i = 0 ; i < n ; i++)  
    {  
          
        WholeTime[i] = FinishTime[i] - ArrivalTime[i];  
        WeightWholeTime[i] = (float)WholeTime[i]  / (float)ServiceTime[i];  
        WT = WT + WholeTime[i];  
        WWT = WWT + WeightWholeTime[i];  
        cout<<"\t"<<setprecision(3)<<i+1<<"\t\t"<<setprecision(3)<<FinishTime[i]<<"\t\t"<<setprecision(3)<<WholeTime[i]<<"\t\t"<<setprecision(3)<<WeightWholeTime[i];  
        cout<<endl;  
    }  
    AverageWWT = WWT / n;  
    AverageWT = WT / n;  
    cout<<"平均周转时间为:        "<<setprecision(3)<<AverageWT<<endl; //保留三位有效数字  
    cout<<"平均带权周转时间为:     "<<setprecision(3)<<AverageWWT;  
    WT = 0;                         //WT和WWT最后要置零,因为我单独把计算周转时间等作为一个函数  
    WWT = 0;                        //如果不置零将导致后续引用该函数的出错  
    cout<<endl;  
}  
  
  
int main()  
{  
    int n;  
    int input;  
    cout<<"请输入进程的数量n:";  
    cin>>n;  
    for(int i = 0 ; i < n ; i++)  
    {  
        cout<<"请输入进程"<<i+1<<"的到达时间和服务时间,并以空格间隔:";  
        cin>>ArrivalTime[i];  
        cin>>ServiceTime[i];  
    }  
    FCFS(n);  
    SJF(n);  
    return 0;  
}  



SJF短作业进程优先调度算法 短作业(进程)优先调度算法 短作业(进程)优先(Shortest Job First,SJF或Shortest Process Next,SPN)是指对短作业或短进程优先调度的算法。该算法可分别用于作业调度和进程调度。该算法的设计目标是改进FCFS算法,减少作业或进程的平均周转时间。 SJF算法要求作业在开始执行之前预计作业的执行时间,对预计执行时间短的作业优先调入内存。 SJF算法和FCFS... 阅读详情

相关推荐

FCFS算法和SJF算法

FCFS算法和SJF算法(非抢占式) 此处主要说一下SJF算法,FCFS算法仅仅按到达时间选择或者排序即可 SJF算法设计思路: 我看了看大多数人写的SJF算法,有些用的是排序算法,虽然能做出来,但是在CPU调用期间,CPU并不知道接下来一段时间,要运行进程的数量,并且如果选用排序算法,我们不能衡量CPU资源是否是空闲的,换句话说,此处的排序算法是一种静态算法,本设计思路没有用排序算法,而是选用缓冲区,所以我在此处设置一个缓冲区,如果缓冲区中没有进程,那么CPU资源就是空闲的,说明没有进程调用,如果缓冲区

XIQI_1的博客 7347

二、操作系统进程管理(5)——调度算法(1)

(1)先来先服务(FCFS): 算法思想:主要从“公平”的角度考虑。 算法规则:按照作业/进程到达的先后顺序进行服务。就是等待时间越久的越优先得到服务。 用于作业/进程调度:用于作业调度时,考虑的是哪个作业先到达后备队列;用于进程调度时,考虑的是哪个进程先到达就绪队列。 是否可抢占?非抢占式的算法。 优点:公平、算法实现简单;缺点:对长作业有利,对短作业不利。 不会导致饥饿。 饥饿:某进程/作业长期得不到服务。 (2)短作业优先(SJ...

Zzh1110的博客 579

C语言实现先来先服务(FCFS)和短作业优先(SJF)算法

C语言实现先来先服务(FCFS)和短作业优先(SJF)进程调度算法。 要求输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。 **先来先服务(FCFS)**调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为

Hiroomi的博客 2万+

短作业优先调度算法(SJF)、时间片轮转(RR)

调度算法。

weixin_42421252的博客 8894

二、PCIE的TLP包的封包解包原理

熟悉 PCIE 的组建包的过程,以及内部的字段细节的定 义,掌握如何发送接收 Mrd(memory read TLP)、 Mwr(Memory write TLP)、Cpl (Completion TLP)和 Cpld(Completion with data TLP)命令包,深入理解 PCIE 底层协议工作过程

k7126685的博客 3931

Ubuntu22.04+Docker一键部署Autoware Universe避坑指南(附鱼香ROS配置)

本文详细介绍了在Ubuntu22.04系统中使用Docker一键部署Autoware Universe的完整流程,包括鱼香ROS工具链配置、Docker环境优化及VSCode开发环境集成。通过实战指南帮助开发者快速搭建自动驾驶开发环境,解决常见部署问题,提升开发效率。

weixin_29254673的博客 416

调度算法——先来先服务(FCFS)、短作业优先(SJF)、高响应比优先(HRRN) 例题详细!!!

文章目录前言知识总览先来先服务(FCFS, First Come First Serve)短作业优先(SJF, Shortest Job First)对FCFS和SJF两种算法的思考高响应比优先算法(HRRN)知识回顾与重要考点 前言 此篇文章是我在B站学习时所做的笔记,大部分图片都是课件老师的PPT,方便复习用。此篇文章仅供学习参考。 提示:以下是本篇文章正文内容 知识总览 先来先服务(FCFS, First Come First Serve) 由带权周转时间可以看出,P3的时间最长,由此可看出

CHEN的博客笔记 8863

SAP MM委外加工保姆级教程:从BOM配置到MIGO发货的完整避坑指南

本文提供SAP MM模块中委外加工的完整操作指南,涵盖从BOM配置到MIGO发货的全流程。详细解析委外采购和工序委外两种模式,包括主数据配置、采购订单创建及物料移动等关键步骤,帮助用户规避常见错误,提升供应链管理效率。特别适合制造业企业实施SAP外包业务参考。

weixin_26905487的博客 528

【操作系统 - 1】先来先服务FCFS和短作业优先SJF进程调度算法

【操作系统系列】学习至此,发现很多学了但很久没用的知识,久而久之,慢慢遗忘。等哪天还需要的话,却发现已经忘得差不多了,即使整理了文档(word等),还是得从头再学一遍。读研第一学期,发现很多东西都可以从博客上学习到,也有不少博主呕心沥血整理了挺多有用的博文。于是,本人借此契机,也慢慢开始整理一些博文,不断改进完善中。整理博文(IT)有如下目的。1. 首要目的:记录“求学生涯”的所学所悟,不断修改,不断更新!(有读者的互动)2. 其次目的:在这“开源”的时代,整理并分享所学所悟是一种互利的行为。

Houchaoqun_XMU的博客 6万+

【WRF数据准备】土地利用数据-MODIS MCD12Q1数据下载及制备

【WRF数据准备】MODIS静态地理数据下载及制备

WW、forever的博客 3413

利用Gretna软件计算脑网络的全局属性和局部属性指标

使用Gretna,你可以计算脑网络的全局属性指标(如网络特征、小世界性和模块度),以及局部属性指标(如节点度和聚类系数)。通过Gretna,你可以计算脑网络的稀疏度,并进一步探索网络的特征和特性。Gretna是一款基于MATLAB平台的脑网络分析工具,它提供了丰富的函数和工具箱,用于计算和分析脑网络的结构和功能。在脑网络中,较高的稀疏度可能意味着神经系统的高效性和信息处理能力,因为较少的连接可以降低信息传递的成本。连接矩阵是一个N*N的矩阵,其中N表示节点的数量,矩阵的每个元素表示节点之间的连接强度。

code_program481的博客 1809

调度算法先来先服务(FCFS)、最短作业优先(SJF)和最高响应比优先(HRRN)算法

一、调度算法 (一)先来先服务(FCFS,First Come First Serve) 例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用先来先服务调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。 (二)短作业优先(SJF,Shortest Job First) 1. 短作业/进程优先调度算法 例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用非抢占式的短作业优先调度算法,计算各进程的等待时间、平均等待时间、周转时间、

派拉斯兔子的博客 2万+

一文看懂EMMC原理及工作过程

CMD:用于设备初始化和命令传输的双向通道, CMD信号有2种工作模式:1#:漏极开路--->用于初始化模式2#:推拉--->用于快速命令传输其中命令从eMMC主机控制器发送到eMMC设备,响应从设备发送到主机。DAT [7:0]:双向数据信号,模式包括:1(DAT0);默认情况下,通电或重置后,只有DAT0用于数据传输。DAT信号在推挽模式下工作,eMMC设备包括数据线DAT1-DAT7的内部上拉。进入4位模式后,设备立即断开线路DAT1、DAT2和DAT3的内部上拉;

Airer_00的博客 2033

【操作系统实验一】先来先服务FCFS和短作业优先SJF进程调度算法

目的与任务 (1)目的:了解并掌握作业调度的功能,熟悉并掌握各种作业调度算法。 (2)任务:模拟实现先来先服务或者短作业优先调度算法。 (3)实验环境:安装eclipse 环境的Windows10 X64 操作系统。 内容、要求与安排 (1)实验内容 1.模拟实现FCFS/SJF调度。 2.设置作业体:作业名,作业的到达时间,服务时间,作业状态(W——等待,R——运行,F——完成),作业间的链接指针; 3.作业初始化:由用户输入作业名、服务时间、到达时间进行初始化,同时,初始化作业的状态为W。 4...

qq_43813351的博客 1万+

基于STM32的智能鱼缸设计

为了缓解学习、生活、工作带来的压力,提升生活品质,许多人喜欢在家中、办公室等场所养鱼。为节省鱼友时间、劳力、增加养鱼乐趣;为此,本文基于STM32单片机设计了一款智能鱼缸。该鱼缸可以实现水温检测、水质检测、自动或手动换水、氛围灯灯光变换和自动或手动喂食等功能为一体的控制系统,可通过控制键进行一键控制。...

1万+

ArcGIS实验教程——实验十九:网络分析(最短路径实现)

一、实验描述 网络分析模块用于实现基于网络数据集的网络分析功能,包括路径分析、服务区分析、最近设施点分析、OD成本矩阵分析、多路径配送分析、位置分配分析和高级网络的管理与创建等。 网络数据集不同于几何网络,是一种高级的连接模型,能够展示复杂的细节,拥有丰富的网络属性模型,可以模拟网络阻力、网络限制以及网络层次等。 本实验重点演示网络分析中最短路径的实现过程。 二、实验内容 1、网络数据集...

智慧空间实验室 5681

实验一 先来先服务FCFS和短作业优先SJF进程调度算法

设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。假设有n个进程分别在T1, … ,Tn时刻到达系统,它们需要的服务时间分别为S1, … ,Sn。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。

qq_65892509的博客 2327

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【操作系统】-- 先来先服务算法(FCFS)、短作业优先算法(SJF)、高响应比调度算法(HRRN)

主要从公平的角度考虑。按照 作业/进程 到达的先后顺序进行服务。非抢占式算法。不会导致饥饿。优点:公平、算法实现简单。缺点:对长作业有利,对短作业不利。追求最少的平均等待时间、最少的平均周转时间和平均带权周转时间。最短的 作业/进程 优先得到服务。非抢占式,抢占式版本:最短剩余时间优先算法。 会,如果有源源不断的短作业到来,可能使长作业长时间得不到服务。优点:“最短的“平均等待时间、平均周转时间缺点:不公平,对短作业有利,对长作业不利,可能产生饥饿现象。要综合考虑 作业/进程 的等待时间和要求服务时间在每次

个人博客 2万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

2.2.4 操作系统之作业/进程调度算法(FCFS先来先服务、SJF短作业优先、HRRN高响应比优先)

文章目录0.思维导图1.先来先服务---FCFS2.短作业优先---SJF3.高响应比优先---HRRN4.三种算法的对比和总结 0.思维导图 1.先来先服务—FCFS First come first sever 2.短作业优先—SJF Shortest Job First 非抢占式—SJF 抢占式—SJF(SRTN) 注意几个细节 3.高响应比优先—HRRN H...

BitHachi 2万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

先来先服务FCFS和短作业优先SJF进程调度算法

操作系统-先来先服务FCFS和短作业优先SJF进程调度算法-课后小结 FCFS调度算法 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。 当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,若有多个作业等待,则优先考虑在系统中等待时间最长的作业,而不管改作业执行所需的时间,然后从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。 在进程调度中采用FCFS算法时,则每次调度是从就绪队列中

qq_41661878的博客 2645

操作系统:先来先服务FCFS和短作业优先SJF进程调度算法

目的:陆续整理近一年的学习收获                                先来先服务FCFS和短作业优先SJF进程调度算法 一:概念 先来先服务FCFS调度算法:最简单的调度算法,既可以用于作业调度 ,也可以用于程序调度,当作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,优先从后备队列中,选择一个或多个位于队列头部的作业,把他们调入内存,分配所需资源、...

但行好事 莫问前程 4810

操作系统(先来先服务FCFS和短作业优先SJF进程调度算法)

设计程序模拟进程的先来先服务FCFS和短作业优先SJF调度过程。假设有n个进程分别在T1, … ,Tn时刻到达系统,它们需要的服务时间分别为S1, … ,Sn。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。

weixin_62134940的博客 1446

进程调度算法之先来先服务(FCFS),短作业优先(SJF)以及高响应比优先(HRRN)

使用先来先服务调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。追求最少的平均等待时间,最少的平均周转时间、最少的平均平均带权周转时间。

jungleirim的博客 1万+

先来先服务FCFS和短作业优先SJF进程调度算法(C++代码及文档)

本程序的设计任务是模拟操作系统中的进程调度过程,具体实现先来先服务(FCFS)和短作业优先(SJF)调度算法。程序能够根据用户输入的进程信息,计算并输出各进程的完成时间、周转时间、带权周转时间,以及所有进程的平均周转时间和平均带权周转时间。对所有进程的周转时间与带权周转时间进行累加,计算平均值。问题:运行SJF时,未完成进程的初始化导致无法找到可调度进程。解决方案:在进程结构体中增加finishTime初始值为-1来标识尚未完成。5.2.1 算法时间复杂度分析(1) FCFS算法。

2201_75385857的博客 2046

一、操作系统——处理机(作业)调度算法:先来先服务算法FCFS、最短作业优先算法SJF(非抢占式)、 最短剩余时间优先算法SRTN(抢占式)、最高响应比优先算法HRRN

各种调度算法的学习思路: 调度算法的评价指标: 一、先来先服务算法(FCFS):First Come First Serve 二、最短作业优先算法(SJF非抢占式):Shortest Job First 三、最短剩余时间优先算法SRTN(等价于抢占式SJF):Shortest Remaining Time Next 注意几个小细节: 如果题目中未特别说明,所提到的“短作业/进程优先算法”默认是非抢占式的 很多书上都会说“SJF最短作业优先调度算法的平均等待时间、平均周转时间最少” 严格来说

zep 1万+

java_实现先来先服务(FCFS)短作业优先算法(SJF)

import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.ByteBuffer; import java.util.concurrent.CountDownLatch; public class FCFSANDSJF {

Mrwuhuai的专栏 4405
上一篇: java几种常见的数据库连接
下一篇: LINUX桌面模式和文本模式切换
追梦小猿
博客等级 码龄10年 69粉丝 26原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值