预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

一、实验目的:用高级语言编写和调试一个有N个进程并行的进程调度程序,以加深对进程的概念及进程调度算法的理解。二、实验环境:PC机、windows20操作系统、VC++6.0三、实验要求实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写、实验中认真调试所编代码并进行必要的测试、记录并分析实验结果。实验后认真书写符合规范格式的实验报告,按时上交。四、实验内容及过程:设计一个有N个进程并行的进程调度程序。进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。具体描述如下:每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。分析:进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后按照优先数的大小把它插入就绪队列等待CPU。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。调度算法的参考流程图如下:五、实验步骤编写一个有N个进程并行的进程调度程序(程序详见附录)。在上机环境中输入程序,调试,编译。设计输入数据,写出程序的执行结果。根据具体实验要求,填写好实验报告。六、实验结果及分析:1、分析:初始化队列。输入进程数为3个进程,各个进程的进程名、优先级、需要时间片设置分别如下:ProcessNameProcessPriortyProcessRunningTimeaa22bb21cc12根据最高优先数优先的调度算法,我们可以得出理论结果如下:进程aa的优先数和bb一样都为2,根据先来先服务原则,进程aa优先插入队列,此时队列排序为aa>bb>cc。就绪进程获得CPU后都只能运行一个时间片。1)执行第1个时间片时,进程aa得到CPU,进程状态为R,bb、cc则状态为W。当一个时间片结束,进程aa的优先数减1,变为1,按照优先数的大小把它插入就绪队列等待CPU。此时队列排序为bb>cc>aa。2)执行第2个时间片时,进程bb得到CPU,进程状态为R,cc、aa则状态为W。当一个时间片结束,进程bb的已占用CPU时间已达到所需要的运行时间,撤消进程bb,此时队列排序为cc>aa。3)执行第3个时间片时,进程cc得到CPU,进程状态为R,aa、bb则状态为W。当一个时间片结束,进程cc的优先数减1,变为0,此时队列为aa>bb。4)执行第4个时间片时,进程aa得到CPU,进程状态为R,cc则状态为W。进程aa的已占用CPU时间已达到所需要的运行时间,撤消进程aa,此时队列排序为cc。5)执行第5个时间片时,进程cc得到CPU,进程状态为R。进程cc的已占用CPU时间已达到所需要的运行时间,撤消进程cc。程序运行结束。2、实验结果截图如下:1)初始化队列:1)执行第1个时间片,aa执行,bb、cc等待。NouIsThe1Times:***CurrentlyRunningProcess:ProcessName!Status!PriorityNumber!NeedRunTime!HasBeenRunningTimeaaR220***CurrentReadpQueueStatus:ProcessName!Status!PriorityNumber!NeedRunTime!HasBeenRunningTimebbU210ProcessName!Status!PriorityNumber!NeedRunTime!HasBeenRunningTimeccU120PressAnvKeyToContinue2)执行第2个时间片,bb执行,cc、aa等待。bb结束进程。NouIsThe2Times:***CurrentlyRunningProcess:ProcessName!Status!PriorityNumber!NeedRunTime!HasBeenRunningTimebbR210***CurrentRead^QueueStatus:ProcessName!Status!Priorit