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

上传人:wux****ua 文档编号:9414211 上传时间:2020-04-05 格式:DOC 页数:11 大小:301KB
返回 下载 相关 举报
操作系统-课程设计报告-处理机调度程序.doc_第1页
第1页 / 共11页
操作系统-课程设计报告-处理机调度程序.doc_第2页
第2页 / 共11页
操作系统-课程设计报告-处理机调度程序.doc_第3页
第3页 / 共11页
点击查看更多>>
资源描述
操作系统课程设计报告学校:广州大学学院:计算机科学与教育软件学院班级:计算机127班课题:处理机调度程序任课老师:陶文正、陈文彬姓名:黄俊鹏学号:1200002111班内序号:27成绩:日期:2015年1月6日一、设计目的 在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。二、设计要求1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。2)可选择进程数量3)本程序包括三种算法,用C语言实现,执行时在主界面选择算法(可用函数实现)(进程数,运行时间,优先数由随机函数产生)执行,显示结果。三、设计思路及算法思想1. 界面菜单选项一级菜单提供2个选项: 自动生成进程数量 手动输入所需进程数量一级菜单选择完毕后进入二级菜单: 重新生成进程 时间片轮转法 短作业优先算法 动态优先级算法 退出程序2. 调度算法程序所用PCB结构体 需要用到的进程结构体如上图所示 1) 时间片轮转法 主要是设置一个当前时间变量,curTime和时间片roundTime。遍历进程组的时候,每运行一个进程,就把curTime += roundTime。进程已运行时间加roundTime2) 短作业优先算法 遍历进程组,找到未运行完成并且运行时间最短的进程,让它一次运行完成,如此往复,直到所有进程都运行完成为止。3) 动态优先级算法 做法跟短作业优先算法类似,此处主要是比较进程的优先数,优先级高者,先执行。直到全部执行完毕。当一个进程运行完毕后,适当增减其余进程的优先数,以达到动态调成优先级的效果。3. 程序流程图四、运行截图1)启动后输入5,生成5个进程2) 输入1,选择时间片轮转法。自动输出结果,分别是时间片为1和4的结果3) 输入2,选择短作业优先算法4) 输入3,选择动态优先级算法5) 输入0,重新生成进程,再输入3,生成3个进程,选择2.短作业优先算法6) 输入q,退出五、心得体会通过这次实验,让我对操作系统的进程调度有了更进一步的了解。这个实验的模拟程度跟真实系统相比只是冰山一角,由此可见操作系统是何其复杂的软件产品,仅进程调度就有那么丰富和内涵的知识需要掌握。但是再复杂的系统,都是由小部件构成的。古语云:不积跬步,无以至千里。不积小流,无以成江海。掌握这些基础的知识,可以为以后打下扎实的基础。六、附录(源代码)/ main.c/ ProcessDispatch/ Created by Jeans on 1/5/15./ Copyright (c) 2015 Jeans. All rights reserved./#include #include /最小进程数#define 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 finishTime; /完成时间 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.priority = 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 %-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.weigthCyclingTime = 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) for (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 += roundTime; 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 = pi.runningTime) min = i; else if (pi.finish = 0 & pmin.finish = 1) min = i; pmin.beginTime = curTime; pmin.hadRunTime = pmin.runningTime; pmin.finishTime = pmin.beginTime + pmin.runningTime; pmin.cyclingTime = pmin.finishTime - pmin.arriveTime; pmin.weigthCyclingTime = pmin.cyclingTime/(double)pmin.runningTime; pmin.finish = 1; finishNum+; curTime = pmin.finishTime; PrintResult(p, num);/动态优先级算法void DynamicPriorityFirst(PCB p,int num) printf(nn-动态优先级算法-n); int finishNum = 0; int curTime = 0; while (finishNum != num) int min = 0; /查找优先级最高下标 for (int i = 1;i = pi.priority) min = i; else if (pi.finish = 0 & pmin.finish = 1) min = i; pmin.beginTime = curTime; pmin.hadRunTime = pmin.runningTime; pmin.finishTime = pmin.beginTime + pmin.runningTime; pmin.cyclingTime = pmin.finishTime - pmin.arriveTime; pmin.weigthCyclingTime = pmin.cyclingTime/(double)pmin.runningTime; pmin.finish = 1; finishNum+; curTime = pmin.finishTime; PrintResult(p, num);int main(int argc, const char * argv) PCB pcbGroup30; /pcb数组 int processNum = 0; /进程数 while (1) /选择进程数量 while (1) if (processNum != 0) break; printf(n-n); printf(当前默认进程数范围%d-%dn,MIN_PROCESS,MAX_PROCESS); printf(1)输入0可随机生成进程数目n2)输入%d-%d范围内数字,回车,可生成指定数目进程n,MIN_PROCESS,MAX_PROCESS); int num = 0; scanf(%d,&num); if (num = 0) processNum = GetRandomNumber(MIN_PROCESS, MAX_PROCESS); break; else if (num = MIN_PROCESS) & (num ); char ch; while (ch = getchar() = n); switch (ch) case 0:/0 重新生成进程 processNum = 0;break; case 1:/1 时间片轮转法 RoundRobin(pcbGroup, processNum);break; case 2:/2 短作业优先算法 ShortestJobFirst(pcbGroup, processNum);break; case 3:/3 动态优先级算法 DynamicPriorityFirst(pcbGroup,processNum);break; case q:/q 退出 exit(0); default: break; return 0;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!