ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:266.71KB ,
资源ID:10613226      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10613226.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统课程设计报告处理机调度程序.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、操作系统课程设计报告处理机调度程序操作系统课程设计报告学校:广州大学学院:计算机科学与教育软件学院班级:计算机127班课题:处理机调度程序任课老师:陶文正、陈文彬姓名:*学号:*班内序号: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 /最小进程数#define

5、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;

6、 /完成时间 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 = G

7、etRandomNumber(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 %-

8、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.weigthCyclin

9、gTime = 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 (i

10、nt 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;

11、 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

12、 (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.cyclingTi

13、me/(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

14、; 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.finis

15、h = 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-%

16、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@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1