基于Python的进程调度算法实验

最近操作系统的实验课老师要求我们来实现进程调度算法,加之最近又在学习Python。于是就用Python实现进程调度的几个经典算法:先来先服务、短进程优先、时间片轮转。

算法解析

先简单的介绍一下三种进程调度算法

FCFS先来先服务

讲道理这个算法是最简单的调度算法,就是判断谁先来,先来的就先服务。没啥道理可讲

SJF短进程优先

这个只是FCFS的改进版,防止长进程过长时间占用CPU,因此将CPU设置为优先服务短进程

时间片轮转法

为了应对上述两种方法在,进程并发上的缺陷,将CPU的服务量化为时间片,将CPU的计算资源分配改为按时间片分配。每个进程拥有一定的时间片,从而让每个进程都可以得到相应。当然对于时间片轮转算法可以有很多改进,例如给每个进程加上优先级,优先服务优先级高的程序

算法实现

依据上面说的算法原理,采用OOP的思想(虽然超级不严谨)来进行实现

PCB

众所周知,PCB是进程控制块,也就是计算机中标识程序的那个部分。我们既然要调度进程就需要建立进程,而进程调度肯定不止一个进程,所以我们应该建立一个进程队列。当然只有一个进程队列还是不够的,我们还应该定义进程队列的相关操作。根据上面的三种算法,我们需要具备队列的基本操作要求,还要能找到最先到的程序,找到短进程,找到优先级最高的程序

其中priority代表优先级,arriveTime代表到达时间,allTime表示程序运行需要的时间,cpuTime代表已经使用了多久的CPU,startBlock表示多久后发生阻塞,startTime表示阻塞后多久就绪,innerTime内部计数器,status表示进程当前状态

CPU

既然有了PCB,下面我们就要来实现CPU的进程调度功能了。

因为涉及到阻塞和就绪,所以阻塞队列和就绪队列是标配。在我写程序的时候我就在想,如何把控CPU的基本单位时间片。最后采用了一个函数来处理时间,即函数运行一次就认为是一个时间片也就是代码中的dealTime负责。其实只要解决的如何模拟CPU的运行后面的算法实现就很简单了

About the author

NOBUG.IN

1 comment

By NOBUG.IN

Your sidebar area is currently empty. Hurry up and add some widgets.