.
天津理工大学
计算机与通信工程学院
实验报告
2011 至 2012 学年 第 二 学期
课程名称 实验( 1 ) 实验时间 学号姓名 主讲教师 辅导教师 实验名称 操作系统 处理机调度算法的实现 2012 年 5月 5日 第 1 节 至 第 6 节 ****** 专业 软件环境 VC++6 精选文档
.
硬件环境 PC机 实验目的 了解操作系统处理机调度的基本概念,处理机调度程序的功能,常用的处理机调度算法。C或C++编程方法与语句格式,提前初步编好实验程序。 实验内容(应包括实验题目、实验要求、实验任务等) 实验题目:处理机调度算法的实现 实验要求:学生应正确地设计有关的数据结构与各个功能模块,画出程序的流程图,编写程序,程序执行结果应正确。 实验任务: 1.设定系统中有五个进程,每一个进程用一个进程控制块表示。 2. 输入每个进程的“优先数”和“要求运行时间”, 3.为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列首进程,用指针指出队列的连接情况。 4. 处理机调度总是选队首进程运行。采用动态优先数算法,进程每运行一次优先数就减“1”,同时将运行时间减“1”。 5.若要求运行时间为零,则将其状态置为“结束”,且退出队列。 6.运行所设计程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程 精选文档
.
实验过程与实验结果(可包括实验实施的步骤、算法描述、流程、结论等) 精选文档
.
实验步骤: 1. 根据实验任务,先进行算法构思。因为是采取高优先权调度算法,因此在编写程序之前,先构思算法。具体算法见下面算法描述。 2. 根据上一步骤写好的算法。 3. 编写程序。 4. 采用VC++进行程序的编写,并对编写的程序进行测试 (1)初始化进程信息。 (2)将各个进程按优先数从高到低排列成就绪队列。 (3)检查所有队列是否为空,若空则结束,否则将队首进程调入执行。 (4)检查该运行进程是否运行完毕,若运行完毕,将此进程状态改为完成,插入另一个完成进程队列;否则,将该进程的优先数减1,然后重新对它进行排序,插入就绪队列适当位置后等待CPU。 (5)重复步骤(3)、(4),直到就绪队列为空。 算法描述: 将每个进程抽象成一个控制块PCB, PCB用一个结构体描述。 构建一个进程调度类。将进程调度的各种算法分装在一个类中。类中存在三个容器,一个保存正在或未进入就绪队列的进程,一个保存就绪的进程,另一个保存已完成的进程。还有一个PCB实例。主要保存正在运行的进程。类中其他方法都是围绕这三个容器可以这个运行中的PCB展开。 主要用到的技术是STL中的vector以维护和保存进程容器、就绪容器、完成容器。 当程序启动时,用户可以选择不同的调度算法。然后用户从控制台输入各个进程的信息,这些信息保存到进程容器中。进程信息输入完毕后,就开始了进程调度,每调度一次判断就绪队列是否为空,若为空则系统时间加一个时间片。判断进程容器中是否有新的进程可以加入就绪队列。 函数描述: 精选文档 struct proc /*定义结构体内部包含进程的信息*/ 附 实验代码: #include 精选文档