进程调度模拟算法

409 阅读2分钟

「这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战」。

目前比较常见的几种进程调度算法有:

  1. 先到先服务(FCFS)
  2. 短进程优先(非抢占和抢占)算法(SPF)
  3. 高响应比优先算法
  4. 时间片轮转算法

内容

编写并调试一个模拟的进程调度程序,采用如下算法对多个进程进行调度:

先来先服务

短进程优先

时间片轮转算法

分别计算平均周转时间和平均带权周转时间。

例如,以下四个进程先后到达系统进入调度:

进程名到达时间所需CPU时间
进程1020
进程2515
进程3105
进程41510
  • 施行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;
}; 

先来先服务调度:

算法描述:按照进程进入的先后次序来分配处理器。先进入就绪队列的进程优先被挑选,运行进程一旦占有处理器将一直运行下去,直到运行结束或被阻塞,这是非抢占式调度。

image.png

短进程优先: 算法描述:每次选出最短的进程进行调度,调度完毕则淘汰,直到所有进程都调度完毕。

image.png

时间片轮转:

算法描述:将所有就绪进程按FCFS策略排成一个就绪队列,每次把CPU分配给队首进程,令其执行一个时间片。一个时间片用完时进程尚未运行完毕,将当前进程送至队列末尾。

image.png

包含的基本操作(main函数的流程)

image.png