资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
实验报告学院(系)名称:计算机与通信工程学院姓名nasta学号nasta专业计算机科学与技术班级2010级2班实验项目实验一:处理机调度算法的实现课程名称操作系统课程代码0668036实验时间2012 年12月3日 第3、4节实验地点软件实验室7-216批改意见成绩教师签字: 实验内容:1 设定系统中有五个进程,每一个进程用一个进程控制块表示。2 输入每个进程的“优先数”和“要求运行时间”。3 为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列首进程,用指针指出队列的连接情况。4 处理机调度总是选队首进程运行。采用动态优先数算法,进程每运行一次优先数就减“1”,同时将运行时间减“1”。5 若某进程运行时间为零,则将其状态置为“结束”,且退出队列。6 运行所设计程序,显示或打印逐次被选中进程的进程名,以及进程控制块的动态变化过程。实验要求:1 详细描述实验设计思想、程序结构及各模块设计思路;2 详细描述程序所用数据结构及算法;3 明确给出测试用例和实验结果;4 为增加程序可读性,在程序中进行适当注释说明;5 认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等;6 实验报告撰写要求结构清晰、描述准确逻辑性强;7 实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。【实验过程记录(源程序、测试用例、测试结果及心得体会等)】设计思想:1. 模拟单CPU系统时间片切换、进程切换。2. 使用优先队列,让优先级高的进程位于队列顶端。在每次时钟周期时,从优先队列队首取出优先级最高的进程,并使其运行一个时钟周期,然后将其优先级减1,已运行时间加1。然后判断程序是否完成,如果未完成,则重新加入优先队列,参与时钟周期。数据结构:使用优先队列,以获得优先级最高程序。源代码:#include #include using namespace std;/ 进程控制块PCBstruct PCB unsigned int pid;/进程idunsigned int priority;/进程优先级unsigned int claimTime;/需要运行时间unsigned int runTime;/已经运行时间/构造函数PCB(unsigned int id, unsigned int p, unsigned int ct) pid=id;priority=p;claimTime=ct;runTime=0;/运行当前进程一个时钟周期,并使进程优先级减1,已运行时间加1void run() runTime+;if(priority0)priority-;/判断进程是否完成bool isFinished() if(claimTime=runTime)return true;else return false;/重载运算符,以使用STL中的priority_queuebool operator (const PCB& p)const if(priority!=p.priority)return priorityp.priority;/比较优先级else/优先级相同的话快完成的任务先执行return claimTime-runTimep.claimTime-p.runTime;int main(int argc, char *argv) int clock=0;priority_queue q;/优先队列for(int i=0; i5; i+) int p, t;printf(请输入pid=%u的进程的优先级(非负数):n, i);scanf(%u, &p);printf(请输入pid=%u的进程的要求运行时间(非负数):n, i);scanf(%u, &t);printf(pid = %u, 优先级 = %u, 要求运行时间 = %unn, i, p, t);q.push(PCB(i, p, t);while(!q.empty() /模拟单CPUprintf(当前时钟%2dt, clock+);PCB t = q.top();q.pop();printf(pid = %u进程运行, 优先级 = %u, 已运行时间 = %un, t.pid, t.priority, t.runTime);t.run();printf(执行过后:tpid = %u, 优先级 = %u, 已运行时间 = %un, t.pid, t.priority, t.runTime);if(!t.isFinished()q.push(t);elseprintf(pid=%d进程结束n, t.pid);printf(程序结束n);return 0;测试用例:进程pid优先级需要运行时间043114254336422执行结果:实验问题:1. 在进程优先级相同时,调度结果不确定。原因:在优先级相同时,未进行相关处理。解决:添加优先级相同时判断逻辑,快结束的进程先调度2. 程序陷入死循环。原因:当忘记判断进程是否结束就加入队列。解决:判断进程是否结束,如果未结束,则继续参与调度,否则不参与。实验总结:要根据调度算法,选择合适的数据结构,以实现相应的调度程序。在调度时,应明确:哪个程序被调度,调度后优先级有什么变化,该进程是否还参与调度等问题。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号