首页 > 编程知识 正文

先来先服务调度算法,写出调度过程,先来先服务和短作业优先调度算法例题

时间:2023-05-04 04:28:12 阅读:215551 作者:4519

关于先到先服务算法,我这里只陈述几个要点:

 

1.为什么缩写是FCFS?

first-come first-served,先到先服务。

 

2.FCFS算法中优先级的评定标准?

优先级根据等待时间来确定,等待时间越长,优先级越高,越优先执行。

 

3.为什么说等待时间越长FCFS算法调度作业的优先级越高?

这个问题开始挺纠结我的,不晓得大家有没有纠结过,给大家做一个比喻,当前一个饭店处于爆满状态(处理机调度作业此时处于忙碌状态),而此时还有好多顾客去吃饭(有好多新的作业进入调度队列),先到的顾客肯定比后到的顾客已经等待的时间要长,因此一旦有位子自然先到的顾客先入座,就是这样。

 

下面给出FCFS算法的执行模拟:

#include <bits/stdc++.h>using namespace std;#define max(x, y) x >= y ? x : y#define min(x, y) x <= y ? x : y#define INF 0x3f3f3f3fconst int maxn = 105;//作业调度的最大数量/*作业控制块的数据结构*/typedef struct job_control_block{ int priority; //作业优先级 int runtime; //作业预计运行时间 int Count; //作业执行计数器 int waitime; //等待时间} JCB;int font, rear; //调度队列指针JCB *Queue[maxn]; //作业调度队列int number; //队列中的作业数long Time; //模拟时钟/*添加辅助延时函数*/void Delay(){ for (int i = 0; i < 100000; i++) for (int j = 0;j < 10000; j++) ;}/*各参数初始化*/void init(){ font = rear = 0; number = 0; Time = 0;}/*作业运行器*/void RunningJob(JCB *job){ job->Count = 0; //作业计数器归零 while (job->Count <= job->runtime) job->Count++; //执行作业 delete job; //释放该作业}/*建立作业*/void MakeJob(int num, JCB *job){ for (int i = 0; i < num; i++) { job = new JCB; job->runtime = 10000 + rand() % 10001; //随机化作业的运行时间(10000——20000) job->priority = number; Queue[rear] = job; rear = (rear + 1) % maxn; number++; }}/*作业调度函数*/void RunJob(){ while (number > 0) { cout << "Job is running..." << endl; while (Queue[font]->Count <= Queue[font]->runtime) Queue[font]->Count++; Delay(); //延时等待(为了使作业运行显式化) cout <<"Job is finished!" << endl; delete Queue[font]; font = (font + 1) % maxn; number--; }}int main(){ init(); while (Time < LONG_MAX) { JCB *job = NULL; int num = rand() % 5; //随机产生作业数量(0——4个) cout << "Creat Jobs number = " << num << endl; MakeJob(num, job); //随机创建num个进程并加入作业调度队列 RunJob(); //按照FCFS的执行思路调度作业 Time++; } return 0;}

 

执行结果:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。