先来先服务算法(FCFS)和 短作业优先算法(SJF)
来源:互联网 发布:2016淘宝店好做吗 编辑:程序博客网 时间:2024/05/29 03:30
先来先服务算法(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; }
0 1
- 先来先服务算法(FCFS)和 短作业优先算法(SJF)
- java_实现先来先服务(FCFS)短作业优先算法(SJF)
- 【计算机操作系统】先来先服务FCFS和短作业优先SJF进程调度算法
- 【操作系统 - 1】先来先服务FCFS和短作业优先SJF进程调度算法
- 《操作系统》 先来先服务FCFS和短作业优先SJF进程调度算法相关计算及实验
- 先来先服务FCFS和短作业优先SJF进程调度算法
- 好开心呀,能用自己学习知识去做作业了,也算是解决一些问题吧。操作系统实践作业:短作业优先(SJF)和先来先服务算法(FCFS)
- 短作业优先算法-SJF
- 短作业优先(SJF)算法
- 操作系统短作业优先(SJF)调度算法
- 进程调度算法 短作业优先 SJF
- 先来先服务和短作业优先算法
- 最短作业优先调度算法(SJF算法)的C++实现
- 算法/调度算法/ShortJobFirst(SJF)短作业优先调度算法
- java短作业优先调度算法(SJF) ---------> 求平均等待时间
- 百度2016实习笔试:短作业优先调度算法(SJF)的平均等待时间---java版本
- 短作业优先调度算法(SJF)——Java实现
- Java实现最短作业优化算法 (SJF算法)
- 监控集群的状态
- 梯度下降法(BGD,SGD,MSGD)python+numpy具体实现
- Lecture 11: Hopfield Nets
- JAVA使用JOONE实现神经网络的官网例子
- 算法分析与设计课程07——330. Patching Array(Hard)
- 先来先服务算法(FCFS)和 短作业优先算法(SJF)
- 编码练习——Java-6-类的高级特性
- 网络名称空间netns的用法
- primefaces 推送服务报Uncaught SyntaxError: Unexpected token < in JSON at position 0
- 将1-20这二十个连续的自然数排成一圈,使任意两个相邻的自然数之和均为素数
- java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger
- iOS与JS交互实战篇(ObjC版)
- FatMouse and Cheese hdu-1078
- 遵守普遍接受的命名规范