「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」。
目前比较常见的几种进程调度算法有:
- 先到先服务(FCFS)
- 短进程优先(非抢占和抢占)算法(SPF)
- 高响应比优先算法
- 时间片轮转算法
内容
编写并调试一个模拟的进程调度程序,采用如下算法对多个进程进行调度:
先来先服务
短进程优先
时间片轮转算法
分别计算平均周转时间和平均带权周转时间。
例
例如,以下四个进程先后到达系统进入调度:
| 进程名 | 到达时间 | 所需CPU时间 |
|---|---|---|
| 进程1 | 0 | 20 |
| 进程2 | 5 | 15 |
| 进程3 | 10 | 5 |
| 进程4 | 15 | 10 |
-
施行FCFS调度算法:
平均进程周转时间T = (20+30+30+35)/4 = 28.75
平均带权进程周转时间W = (20/20+30/15+30/5+35/10)/4 = 3.13
-
施行SPF算法:
SPF的进程调度顺序为进程1、3、4、2,
平均进程周转时间T = (20+15+20+45)/4 = 25
平均带权进程周转时间W = (20/20+15/5+20/10+45/15)/4 = 2.25
定义进程结构体 定义PCB,包括一个进程的相关信息。如进程名称、到达时间、服务时间、开始时间、完成时间、周转时间和平均周转时间等。
struct pcb{
char name[10];
float arrivetime;
float servicetime;
float starttime;
float finishtime;
float zztime;
float dqzztime;
};
先来先服务调度:
算法描述:按照进程进入的先后次序来分配处理器。先进入就绪队列的进程优先被挑选,运行进程一旦占有处理器将一直运行下去,直到运行结束或被阻塞,这是非抢占式调度。
短进程优先: 算法描述:每次选出最短的进程进行调度,调度完毕则淘汰,直到所有进程都调度完毕。
时间片轮转:
算法描述:将所有就绪进程按FCFS策略排成一个就绪队列,每次把CPU分配给队首进程,令其执行一个时间片。一个时间片用完时进程尚未运行完毕,将当前进程送至队列末尾。
包含的基本操作(main函数的流程)