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

上传人:w**** 文档编号:72374769 上传时间:2023-02-10 格式:PDF 页数:12 大小:418.30KB
返回 下载 相关 举报
操作系统-课程设计报告-处理机调度程序.pdf_第1页
第1页 / 共12页
操作系统-课程设计报告-处理机调度程序.pdf_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《操作系统-课程设计报告-处理机调度程序.pdf》由会员分享,可在线阅读,更多相关《操作系统-课程设计报告-处理机调度程序.pdf(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、操作系统操作系统课程设计报告学校:广州大学学校:广州大学学院:计算机科学与教育软件学院学院:计算机科学与教育软件学院班级:计算机班级:计算机 127127 班班课题:处理机调度程序课题:处理机调度程序任课老师:陶文正、陈文彬任课老师:陶文正、陈文彬姓名:黄俊鹏姓名:黄俊鹏学号:学号:12000021111200002111班内序号:班内序号:2727成绩:成绩:日期:日期:20152015 年年 1 1 月月 6 6 日日一、设计目的一、设计目的在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用

2、某种调度策略,选择一进程占用处理机。要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。二、设计要求二、设计要求1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。2)可选择进程数量3)本程序包括三种算法,用 C 语言实现,执行时在主界面选择算法(可用函数实现)(进程数,运行时间,优先数由随机函数产生)执行,显示结果。三、设计思路及算法思想三、设计思路及算法思想1.界面菜单选项一级菜单提供 2 个选项:自动生成进程数量 手动输入所需进程数量一级菜单选择完毕后进入二级菜单:重新生成进程 时间片轮转法 短作业优先算法 动态优先级算法 退出程序2.调度算法程序所用 PC

3、B 结构体需要用到的进程结构体如上图所示1)时间片轮转法主要是设置一个当前时间变量,curTime和时间片 roundTime。遍历进程组的时候,每运行一个进程,就把curTime+=roundTime。进程已运行时间加roundTime2)短作业优先算法遍历进程组,找到未运行完成并且运行时间最短的进程,让它一次运行完成,如此往复,直到所有进程都运行完成为止。3)动态优先级算法做法跟短作业优先算法类似,此处主要是比较进程的优先数,优先级高者,先执行。直到全部执行完毕。当一个进程运行完毕后,适当增减其余进程的优先数,以达到动态调成优先级的效果。3.程序流程图四、运行截图四、运行截图1)启动后输入

4、 5,生成 5 个进程2)输入 1,选择时间片轮转法。自动输出结果,分别是时间片为 1 和 4 的结果3)输入 2,选择短作业优先算法4)输入 3,选择动态优先级算法5)输入 0,重新生成进程,再输入 3,生成 3 个进程,选择 2.短作业优先算法6)输入 q,退出五、心得体会五、心得体会通过这次实验,让我对操作系统的进程调度有了更进一步的了解。这个实验的模拟程度跟真实系统相比只是冰山一角,由此可见操作系统是何其复杂的软件产品,仅进程调度就有那么丰富和内涵的知识需要掌握。但是再复杂的系统,都是由小部件构成的。古语云:不积跬步,无以至千里。不积小流,无以成江海。掌握这些基础的知识,可以为以后打下

5、扎实的基础。六、附录(源代码)六、附录(源代码)/main.c/ProcessDispatch/Created by Jeans on 1/5/15./Copyright(c)2015 Jeans.All rights reserved./#include#include/最小进程数#define MIN_PROCESS2/最大进程数#define MAX_PROCESS20/最小优先数#define MIN_PRIORITY0/最大优先数#define MAX_PRIORITY10/最小运行时间#define MIN_RUNNING_TIME1/最大运行时间#define MAX_RUNNI

6、NG_TIME20typedef struct PCBchar 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-

7、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(|进程名

8、到达时间运行时间开始时间完成时间周转时间带权周转时间优先数|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.begi

9、nTime=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

10、;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;elsepi.hadRunTime+=roundTime;curTim

11、e+=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;els

12、e 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.finishT

13、ime;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.fini

14、shTime=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;/进程数whi

15、le(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;elseif(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;

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

当前位置:首页 > 应用文书 > 工作报告

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁