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

先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。

  • FCFS部分
int fcfs()
{int i,j,w=0;for(i=0;i<4;i++){if(arrayTask[i].Status==0){t=arrayTask[i].ArriveTime;w=1;}if(w==1)break;}for(i=0;i<4;i++){if(arrayTask[i].ArriveTime<t&&arrayTask[i].Status==0)t=arrayTask[i].ArriveTime;}for(i=0;i<4;i++){if (arrayTask[i].ArriveTime==t)return i;}
}
  • SFJ部分
int sjf()
{int i,x=0,a=0,b=0;float g;for(i=0;i<4;i++){if(arrayTask[i].Status==1){g=arrayTask[i].EndTime;x=1;}}if(x==0){t=arrayTask[0].ArriveTime;for(i=0;i<4;i++){if(arrayTask[i].ArriveTime<t){t=arrayTask[i].ArriveTime;a=i;}}return a;}else{for(i=0;i<4;i++){if(arrayTask[i].EndTime>g) g=arrayTask[i].EndTime;}for(i=0;i<4;i++){if(arrayTask[i].Status==0&& arrayTask[i].ArriveTime<=g){t=arrayTask[i].RequestTime;a=i;b=1;}}if(b!=0){for (i=0; i <4; i ++){if (arrayTask [i]. Status==0&&arrayTask[i]. ArriveTime<=g&&arrayTask[i]. RequestTime<t){t=arrayTask[i]. RequestTime;a=i;}}return a;}else{for (i=0; i <4; i ++){if (arrayTask [i]. Status==0) t=arrayTask[i]. ArriveTime;}for(i=0;i<4;i++){if(arrayTask[i]. Status==0&&arrayTask[i]. ArriveTime<t){t=arrayTask[i]. ArriveTime;a=i;}}return a;}}
}

总的代码实现

# include<stdio.h>float t, d;struct
{int id;float ArriveTime;float RequestTime;float StartTime;float EndTime;float RunTime;float DQRunTime;int Status;
}arrayTask[4];GetTask()
{int i;float a;for(i=0;i<4;i++){arrayTask[i].id=i+1;printf("input the number");printf("input the the ArriveTime of arrayTask[%d]:",i);scanf("%f",&a); arrayTask[i].ArriveTime=a;printf("input the RequestTime of arrayTask[%d]:",i);scanf("%f",&a); arrayTask[i].RequestTime=a; arrayTask[i].StartTime=0;arrayTask[i].EndTime=0; arrayTask [i].RunTime=0;arrayTask[i].Status=0;}
}int fcfs()
{int i,j,w=0;for(i=0;i<4;i++){if(arrayTask[i].Status==0){t=arrayTask[i].ArriveTime;w=1;}if(w==1)break;}for(i=0;i<4;i++){if(arrayTask[i].ArriveTime<t&&arrayTask[i].Status==0)t=arrayTask[i].ArriveTime;}for(i=0;i<4;i++){if (arrayTask[i].ArriveTime==t)return i;}
}int sjf()
{int i,x=0,a=0,b=0;float g;for(i=0;i<4;i++){if(arrayTask[i].Status==1){g=arrayTask[i].EndTime;x=1;}}if(x==0){t=arrayTask[0].ArriveTime;for(i=0;i<4;i++){if(arrayTask[i].ArriveTime<t){t=arrayTask[i].ArriveTime;a=i;}}return a;}else{for(i=0;i<4;i++){if(arrayTask[i].EndTime>g) g=arrayTask[i].EndTime;}for(i=0;i<4;i++){if(arrayTask[i].Status==0&& arrayTask[i].ArriveTime<=g){t=arrayTask[i].RequestTime;a=i;b=1;}}if(b!=0){for (i=0; i <4; i ++){if (arrayTask [i]. Status==0&&arrayTask[i]. ArriveTime<=g&&arrayTask[i]. RequestTime<t){t=arrayTask[i]. RequestTime;a=i;}}return a;}else{for (i=0; i <4; i ++){if (arrayTask [i]. Status==0) t=arrayTask[i]. ArriveTime;}for(i=0;i<4;i++){if(arrayTask[i]. Status==0&&arrayTask[i]. ArriveTime<t){t=arrayTask[i]. ArriveTime;a=i;}}return a;}}
}void new (int s)
{int i, g=0;for (i=0; i <4; i ++){if (arrayTask [i]. Status==0) continue;else{g=1;break;}}if (g==0){arrayTask[s].StartTime=arrayTask[s]. ArriveTime;arrayTask[s]. EndTime=arrayTask[s]. RequestTime+arrayTask[s]. ArriveTime;arrayTask[s]. RunTime=arrayTask[s]. RequestTime;arrayTask[s]. Status=1; g=2;}if (g==1){arrayTask[s]. Status=1;for(i=0;i<4;i++){if(arrayTask[i]. Status==1) d=arrayTask[i]. EndTime;}for (i=0; i <4; i ++){if (arrayTask [i]. EndTime>d&&arrayTask[i]. Status==1)d=arrayTask[i]. EndTime;}if(arrayTask[s]. ArriveTime <d)arrayTask [s]. StartTime=d;elsearrayTask[s]. StartTime=arrayTask[s].ArriveTime;arrayTask[s]. EndTime=arrayTask[s].StartTime+arrayTask[s].RequestTime;arrayTask[s].RunTime=arrayTask[s].EndTime-arrayTask[s].ArriveTime;}arrayTask[s].DQRunTime=arrayTask[s].RunTime/arrayTask[s].RequestTime;
}/* output */
void Printresult(int j )
{printf ("%d \t", arrayTask [j]. id);printf("%5.2f\t",arrayTask[j]. ArriveTime);printf("%5.2f\t",arrayTask[j]. RequestTime);printf("%5.2f\t",arrayTask[j]. StartTime);printf("%5.2f\t",arrayTask[j].EndTime);printf("%5.2f\t",arrayTask[j].RunTime);printf("%5.2f\n",arrayTask[j].DQRunTime);
}void main()
{int i,b,k,a,c=0;int d[4];printf("\t F. FCFS \n");printf("\t S. SJF \n"); // short job firstprintf("\t Q. EXIT \n");for(i=0;;i++){if(c)break;printf("please input the number a:\n");scanf("%S",&a);switch(a){case 'Q': c=1; break;case 'F': printf("please input the different-ArriveTime of arrayTasks\n");GetTask();printf("*****************************the result of fcfs\n");printf("Number\tArrive\tServer\tStart \ tFinish \ tTurnove \ tTake power turnover time \n ");for (b=0; b <4; b ++){k = fcfs();d[b] = k;new(k);}for (b=0; b <4; b ++)Printresult(d[b]);continue;case 'S': printf (" please input the different-RequestTime of arrayTasks\n");GetTask();printf("******************************the result of sjf\n");printf("Number\tArrive\tRequest\tStart\tEnd\tRun\tDQRun time\n");for(b=0;b < 4 ;b++){k = sjf();d[b] = k;new(k);}for(b=0;b < 4;b++)Printresult(d[b]);continue;default:printf("the number Error.please input another number!\n");}}
}

执行结果如下:
  先选择FCFS,再选择SFJ部分,设置四个进程:到达时间为分别为10、15、30、50,运行时间分别为100、5、30、10。可得到如下结果:

操作系统:先来先服务调度算法以及短作业优先调度算法C语言实现相关推荐

  1. 设有 4道作业,它们的提交时间及执行时间如下,试计算在单道程序环境下,采用先来先服务调度算法和短作业优先调度算法时的平均周转时间和平均带权周转时间,并指出它们的调度顺序。

    处理机调度算法 题目: 设有 4道作业,它们的提交时间及执行时间如下: 试计算在单道程序环境下,采用先来先服务调度算法和短作业优先调度算法时的平均周转时间和平均带权周转时间,并指出它们的调度顺序. 先 ...

  2. C#进程调度的模拟实现:模拟先来先服务调度算法、短作业优先调度算法和优先级调度算法(考虑非抢占式和抢占式),进行算法评价,输出调度结果和算法评价指标。

    没什么水平,希望能帮到你 环境:visual studio 2019 附带工程资源:C#进程调度的模拟实现附带资源-C#文档类资源-CSDN下载 先来先服务的调度算法:是一种非抢占式的算法,先来先服务 ...

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

    操作系统系列 学习至此,发现很多学了但很久没用的知识,久而久之,慢慢遗忘.等哪天还需要的话,却发现已经忘得差不多了,即使整理了文档(word等),还是得从头再学一遍.读研第一学期,发现很多东西都可以从 ...

  4. 《操作系统》实验一:先来先服务FCFS和短作业优先SJF进程调度算法

    [实验题目]:先来先服务FCFS和短作业优先SJF进程调度算法 [实验学时]:4学时 [实验目的] 通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变.进程调度的策略及对系统性能的评价方法. ...

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

    文章目录 0.思维导图 1.先来先服务---FCFS 2.短作业优先---SJF 3.高响应比优先---HRRN 4.三种算法的对比和总结 0.思维导图 1.先来先服务-FCFS First come ...

  6. 软件测试——进程调度(短作业优先调度算法+先来先服务算法)测试

    源代码 被测代码 Schedule package net.mooctest;import java.util.ArrayList; import java.util.List;public clas ...

  7. 操作系统第一次实验-短作业优先调度算法

    一.实验目的: 目的:了解并掌握作业调度的功能,熟悉并掌握各种作业调度算法. 任务:模拟实现先来先服务或者短作业优先调度算法. 二.实验内容: 模拟实现SJF调度. 设置作业体:作业名,作业的到达时间 ...

  8. 先来先服务和短作业优先调度算法

    先来先服务调度算法:系统按照作业到达的先后次序来进行调度,或者说它优先考虑在系统中等待时间最长的作业,而不管该作业所需执行时间的长短,从后备作业队列中选择几个最先进入该队列的作业,将它们调入内存,为它 ...

  9. 先来先服务和短作业优先调度算法-C语言实现

    算法介绍 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度.当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将 ...

最新文章

  1. 线性表List的基本创建
  2. SDK开发日积月累(二)
  3. delphi 登录界面 主窗体 切换_winform项目——仿QQ即时通讯程序06:主界面交互逻辑...
  4. c++ 重载 重写_Java | 深入理解方法调用的本质(含重载与重写区别)
  5. 基于IOC的GUI框架设计与实现
  6. java中的abstract和interface差异
  7. rs232读取智能电表_没想到物联网电表这么智能!插卡预付费电表该升级了!
  8. 实验8.2 指针与字符串 7-2 字符串排序
  9. python enumerate函数用法
  10. UCSB微软提出VIOLET,用Masked Visual-token Modeling进行端到端的视频语言学习!性能SOTA...
  11. UE3 移动设备主页
  12. .Net Core新建解决方案,添加项目引用,使用VSCode调试
  13. 解决This application failed to start because cannot find or load the qt platform plugin 'xcb'
  14. lammps后处理:Python调用Ovito模块配置方法
  15. 我收藏的PDF电子书第一部分
  16. 4.6 数值分析: P阶收敛的迭代法
  17. 红米手机Pro超简单刷入开发版获得ROOT超级权限的步骤
  18. Java基础面试题整理及答案
  19. jacob+wps 文档转为pdf excel转换pdf卡死无响应
  20. 阿里云商标注册教程:新手自助申请详细步骤

热门文章

  1. 简报 | 法国立法者支持将加密货币税率降低6%的修正案
  2. 如何学习Unity3d开发,菜鸟在线有妙招!
  3. 拍领导牵手的摄影师立功还是担责?
  4. 十六、行为型模式--观察者模式
  5. git 设置用户名,密码,邮箱
  6. 2015年11月06日
  7. Lenet5和VGG16介绍
  8. VS中区分Debug和Realease、x86和x64的宏定义
  9. Win11 22H2怎么卸载更新补丁?Win11 22H2卸载更新补丁的步骤
  10. 小心“格局很大”的人!