SHAOXIAOJ正在加载中...

2697: 【操作系统】实验二 - 先来先服务(FCFS)算法

金币值:10 定数:8 时间限制:1.000 s 内存限制:128 M
正确:7 提交:9 正确率:77.78% 命题人:
点赞量:0 收藏量:0 题目类型:程序 知识点: 结构体 操作系统

题目描述

实验目标

设计一个按先来先服务 $(FCFS)$ 调度算法实现处理机调度的程序。


一、算法思想

先来先服务($First-Come$, $First-Served$, $FCFS$)调度算法是一种最简单的调度算法,其核心思想是按照进程到达就绪队列的先后顺序进行调度。具体来说,进程按照到达时间的先后排序,调度程序总是选择队列中第一个到达的进程,为其分配处理机资源,使其执行直到完成或阻塞。该算法不考虑进程的 $CPU$ 执行时间、优先级等因素,完全遵循 “先来后到” 的公平原则。在单处理机环境下,一旦某个进程开始执行,就会一直运行到结束或被阻塞,不会被其他进程抢占。

二、算法实现

以下是本次实验用到的公式:
$1$. 周转时间 $=$ 完成时间 $-$ 到达时间
$2$. 平均周转时间:周转时间 $/$ 进程数
$3$. 带权周转时间:周转时间 $/$ 服务时间
$4$. 平均带权周转时间:带权周转时间 $/$ 进程数


计算方法:

$1$.找出最先到达的进程(该进程的完成时间 $=$ 到达时间 $+$ 服务时间)
$2$.根据给出的到达时间,找出下一个到达的进程(该进程的完成时间 $=$ 上一进程的完成时间 $+$ 该进程的服务时间);
$3$.重复 $2$ 直至完成所有进程的计算;


结构体示例:
typedef struct job{
	char name[200];            //进程名称
	double reach_time;         //到达时间
	double st_time;            //开始时间
	double serve_time;         //服务时间
	double run_time;           //运行时间
	double comp_time;          //完成时间
	double week_time;          //周转时间
	double quan_time;          //带权周转时间
} ZHT;

测试代码   复制

typedef struct job{
	char name[200];            //进程名称
	double reach_time;         //到达时间
	double st_time;            //开始时间
	double serve_time;         //服务时间
	double run_time;           //运行时间
	double comp_time;          //完成时间
	double week_time;          //周转时间
	double quan_time;          //带权周转时间
} ZHT;

输入格式

第一行输入一个整数 $n$,代表进程个数。

从第二行开始的 $n$ 行中,每行输入三个量,分别代表进程名称 $name$、到达时间  $reach\_time$、服务时间 $serve\_time$。

输出格式

详见输出样例和温馨提示部分,除输出某些提示性文字外,还需输出每个进程的所有信息,包括进程名称 $name$、到达时间 $reach\_time$、开始时间 $st\_time$、服务时间 $serve\_time$、完成时间 $comp\_time$、周转时间 $week\_time$、带权周转时间 $quan\_time$ 以及所有进程的平均周转时间 $aver\_week\_time$、平军带权周转时间 $aver\_quan\_time$。

输入样例    复制

3
1 0 5
2 1 2
3 2 3

输出样例    复制

请输入进程个数:请输入各进程的信息(格式:作业名 到达时间 服务时间):
名称 到达 开始 服务 完成 周转 带权
1 0.0 0.0 5.0 5.0 5.0 1.000000
2 1.0 5.0 2.0 7.0 6.0 3.000000
3 2.0 7.0 3.0 10.0 8.0 2.666667
平均周转时间:6.33
平均带权周转时间:2.222

提示

温馨提示

你的运行窗口的运行信息依照样例数据应该是这样的,不必查看样例输入输出的内容:
请输入进程个数:3
请输入各进程的信息(格式:作业名 到达时间 服务时间):
1 0 5
2 1 2
3 2 3
名称 到达 开始 服务 完成 周转 带权
1 0.0 0.0 5.0 5.0 5.0 1.000000
2 1.0 5.0 2.0 7.0 6.0 3.000000
3 2.0 7.0 3.0 10.0 8.0 2.666667
平均周转时间:6.33
平均带权周转时间:2.222

对样例的解释

对于这 $3$ 个进程,时间点从 $0$ 开始计时,根据 $FCFS$ 算法优先处理先到达的进程可知,进程处理的顺序为 $ 1,2,3。$
$0$ 时刻 $1$ 进程到达,优先处理。服务时间为 $5$ 个时间点,所以完成时间为 $0 + 5 = 5$。周转时间 $=$ 完成时间 $-$ 到达时间,即 $5 - 0 = 5$。带权周转时间为 周转时间 $/$ 服务时间,即 $5 / 5 = 1$。
当时间来到 $5$ 时,此时 $2$ 和 $3$ 进程都到达,$2$ 进程完成时间为 $5 + 2 = 7$,周转时间为 $7 - 1 = 6$,带权周转时间为 $6 / 2 = 3$。
当时间来到 $7$ 时,此时 $3$ 进程到达,进程完成时间为 $10$,周转时间为 $8$,带权周转时间为 $\frac{8}{3}$。
平均周转时间为 $\frac{5+6+8}{3} = \frac{19}{3}$,平均带权周转时间为 $\frac{1+3+\frac{8}{3}}{3} = \frac{20}{9}$。