一、要求
(1)先来先服务算法,短进程优先算法,高优先级优先算法,时间片轮转调度算法;
(2)有录入界面,动态录入进程个数,进程标识符,进入时间,服务时间,优先级,系统时间片长短等信息;
(3)有算法选择界面,能够选择不同的调度算法;
(4)有输出界面,输出不同调度算法下诸进程的进程标识符,进入时间,服务时间,开始时间,完成时间,周转时间,带权周转时间及一组进程的平均周转时间及平均带权周转时间。
二、原理
定义一个进程控制块PCB,包含进程标识符,进入时间,服务时间,开始时间,完成时间,周转时间,带权周转时间等一系列将会用到的数据成员,再利用构造函数对进程标识符,进入时间,服务时间,优先级赋值。
用courseQueue类来定义不同算法调度下队列的变化(即进程进出队情况),enterQueue()进程进队的方法,在先来先服务算法,短作业优先算法和高优先级优先算法中使用outQueue()出队方法,在时间片轮转算法中使用outQueueRoundRubin(double sliceTime)出队方法。
ContrastArrivetime类对到达时间由先到后进行排序,ContrastPriority类对不同优先级的进程进行排序,ContrastServetime类对服务时间由短到长排序。
Course类中的init()方法动态录入进程个数及各进程信息,Select()方法中包含算法选择页面,用switch ,case语句进行不同算法的选择。
三、主要内容及步骤
1、 算法流程
(1)主要函数:
- Course.Init():对进程个数及各进程的信息进行初始化;
- Course.Select():包含算法选择目录,输入不同序号,调用不同算法;
- courseQueue.enterQueue():使到达进程入队;
- courseQueue.outQueue():基本的出队操作;
- courseQueue.outQueueRR():时间片轮转算法下的出队操作。
(2)核心算法及解析:
public void enterQueue()//进程入队函数
{
while (nowIndex < storage.size()) {
if (storage.get(