操作系统-课程设计报告-处理机调度程序

上传人:luoxia****01803 文档编号:62422165 上传时间:2018-12-20 格式:DOC 页数:11 大小:352KB
返回 下载 相关 举报
操作系统-课程设计报告-处理机调度程序_第1页
第1页 / 共11页
操作系统-课程设计报告-处理机调度程序_第2页
第2页 / 共11页
操作系统-课程设计报告-处理机调度程序_第3页
第3页 / 共11页
操作系统-课程设计报告-处理机调度程序_第4页
第4页 / 共11页
操作系统-课程设计报告-处理机调度程序_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《操作系统-课程设计报告-处理机调度程序》由会员分享,可在线阅读,更多相关《操作系统-课程设计报告-处理机调度程序(11页珍藏版)》请在金锄头文库上搜索。

1、操作系统课程设计报告学校:广州大学学院:计算机科学与教育软件学院班级:计算机127班课题:处理机调度程序任课老师:陶文正、陈文彬姓名:黄俊鹏学号:1200002111班内序号:27成绩:日期:2015年1月6日一、设计目的 在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。二、设计要求1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。2)可选择进程数量3)本程序包括三种算法,用

2、C语言实现,执行时在主界面选择算法(可用函数实现)(进程数,运行时间,优先数由随机函数产生)执行,显示结果。三、设计思路及算法思想1. 界面菜单选项一级菜单提供2个选项: 自动生成进程数量 手动输入所需进程数量一级菜单选择完毕后进入二级菜单: 重新生成进程 时间片轮转法 短作业优先算法 动态优先级算法 退出程序2. 调度算法程序所用PCB结构体 需要用到的进程结构体如上图所示 1) 时间片轮转法 主要是设置一个当前时间变量,curTime和时间片roundTime。遍历进程组的时候,每运行一个进程,就把curTime += roundTime。进程已运行时间加roundTime2) 短作业优先

3、算法 遍历进程组,找到未运行完成并且运行时间最短的进程,让它一次运行完成,如此往复,直到所有进程都运行完成为止。3) 动态优先级算法 做法跟短作业优先算法类似,此处主要是比较进程的优先数,优先级高者,先执行。直到全部执行完毕。当一个进程运行完毕后,适当增减其余进程的优先数,以达到动态调成优先级的效果。3. 程序流程图四、运行截图1)启动后输入5,生成5个进程2) 输入1,选择时间片轮转法。自动输出结果,分别是时间片为1和4的结果3) 输入2,选择短作业优先算法4) 输入3,选择动态优先级算法5) 输入0,重新生成进程,再输入3,生成3个进程,选择2.短作业优先算法6) 输入q,退出五、心得体会

4、通过这次实验,让我对操作系统的进程调度有了更进一步的了解。这个实验的模拟程度跟真实系统相比只是冰山一角,由此可见操作系统是何其复杂的软件产品,仅进程调度就有那么丰富和内涵的知识需要掌握。但是再复杂的系统,都是由小部件构成的。古语云:不积跬步,无以至千里。不积小流,无以成江海。掌握这些基础的知识,可以为以后打下扎实的基础。六、附录(源代码)/ main.c/ ProcessDispatch/ Created by Jeans on 1/5/15./ Copyright (c) 2015 Jeans. All rights reserved./#include #include /最小进程数#de

5、fine MIN_PROCESS 2/最大进程数#define MAX_PROCESS 20/最小优先数#define MIN_PRIORITY 0/最大优先数#define MAX_PRIORITY 10/最小运行时间#define MIN_RUNNING_TIME 1/最大运行时间#define MAX_RUNNING_TIME 20typedef struct PCB char name; /进程名 int priority; /优先数 int runningTime; /运行时间 int arriveTime; /到达时间 int beginTime; /开始时间 int finish

6、Time; /完成时间 int cyclingTime; /周转时间 double weigthCyclingTime; /带权周转时间 int hadRunTime; /已经运行时间 int finish; /是否完成PCB;/获取随机数int GetRandomNumber(int min,int max) return arc4random()%(max-min) + min;/初始化PCB组void InitPCBGroup(PCB p,int num) char name = A; for (int i = 0;i num;i+) pi.name = name; pi.priorit

7、y = GetRandomNumber(MIN_PRIORITY, MAX_PRIORITY); pi.runningTime = GetRandomNumber(MIN_RUNNING_TIME,MAX_RUNNING_TIME); name+; void PrintResult(PCB p,int num) double avgCycTime = 0,avgWeiCycTime = 0; printf(|进程名 到达时间 运行时间 开始时间 完成时间 周转时间 带权周转时间 优先数 |n); for (int i = 0;i num;i+) printf(|%3c %-4d %-4d %-

8、4d %-4d %-4d %-6.2f %-4d|n,pi.name,pi.arriveTime,pi.runningTime,pi.beginTime,pi.finishTime,pi.cyclingTime,pi.weigthCyclingTime,pi.priority); avgCycTime += pi.cyclingTime; avgWeiCycTime += pi.weigthCyclingTime; /还原 pi.arriveTime = 0; pi.beginTime = 0; pi.finishTime = 0; pi.cyclingTime = 0; pi.weigthC

9、yclingTime = 0; pi.hadRunTime = 0; pi.finish = 0; avgWeiCycTime /= num; avgCycTime /= num; printf(平均周转时间:%.2f 平均带权周转时间:%.2fn,avgCycTime,avgWeiCycTime);/时间片轮转法void RealRoundRobin(PCB p,int num,int roundTime) printf(nn-时间片:%d-n,roundTime); int finishNum = 0; int curTime = 0; while (finishNum != num) f

10、or (int i = 0;i = pi.runningTime) pi.finishTime = curTime + pi.runningTime - pi.hadRunTime; pi.cyclingTime = pi.finishTime - pi.arriveTime; pi.weigthCyclingTime = pi.cyclingTime/(double)pi.runningTime; pi.finish = 1; finishNum +; curTime += pi.runningTime - pi.hadRunTime; else pi.hadRunTime += round

11、Time; curTime += roundTime; PrintResult(p, num);void RoundRobin(PCB p,int num) RealRoundRobin(p, num, 1); /时间片为1的结果 RealRoundRobin(p, num, 4); /时间片为4的结果/短作业优先算法void ShortestJobFirst(PCB p,int num) printf(nn-短作业优先算法-n); int finishNum = 0; int curTime = 0; while (finishNum != num) int min = 0; /查找短作业下标 for (int i = 1;i

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 小学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号