本实验可采用优先数调度算法或时间片轮转算法或两者相结合进行模拟程序的设计。
一、预备知识
- 进程管理。
- 优先数调度算法、时间片轮转算法。
二、目的
1.加深对进程、进程控制块及进程队列等概念的理解。
2.了解优先数和时间片轮转调度算法的具体实施办法,加深对进程管理各部分内容的理解。
三.要求
1.掌握进程管理中主要数据结构的设计。
2.熟悉进程调度算法、进程控制机构、同步机构、通讯机构的实施。
四、实验内容
进程调度模拟程序的设计,包括以下2种调度算法:采用优先数调度算法的模拟进程调度程序、采用时间片轮转调度算法的模拟进程调度程序。
要求如下:
(1)设计进程控制块PCB表结构,分别适用于优先权调度算法和时间片轮转调度算法。
PCB结构包括以下信息:进程名、进程优先数(或轮转时间片),进程所占用的CPU时间,进程的状态,当前队列指针等。根据调度算法的不同,PCB结构的内容可以作适当的增删。
(2)建立进程就绪队列。对两种不同算法编制入链子程序。
(3)设计的程序中能显示或打印进程控制块的动态变化过程。
五、思路
该进程调度我运用了c++来编写,用数组的方式存储和更改进程情况,本次实验主要实现俩个算法。我根据自己的理解进行解释
先来先服务算法:
按照作业到达的先后次序来进行调度,先到的作业可以先执行,后到的则放入就绪队列中。
时间片轮转算法:
先定义好时间片轮转的周期,假如周期为1,则每个作业执行1秒后看就绪是否有作业在等候,若有,则让出cpu位置,而当前的作业则进入就绪队列中,不断地循环,直至作业全部完成。
其中还包括了俩个重要的时间
周转时间
周转时间 = 完成时间 - 到达时间
带权周转时间
带权周转时间 = 周转时间 / 运行时间
先来先服务算法和时间片轮转算法的思路为:主要运用了队列的结构来完成,用while语句,内涵多个if——else语句来执行。为了更方便的理解,我已在下面的代码中做了注释。
六、代码
#include<iostream>
#include<queue>
#include<