操作系统进程管理.doc_第1页
操作系统进程管理.doc_第2页
操作系统进程管理.doc_第3页
操作系统进程管理.doc_第4页
操作系统进程管理.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

长 沙 学 院课程设计说明书题目进程管理仿真程序设计系(部)计算机科学与技术系专业(班级)软件工程姓名李杰学号2009022315指导教师刘刚钦起止日期2011.5.30-2011.6.8长沙学院课程设计鉴定表姓名李杰学号2009022315专业软件工程班级3班设计题目进程管理仿真程序设计指导教师刘刚钦指导教师意见:评定等级: 教师签名: 日期: 答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名: 日期: 系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;课程设计任务书课程名称:操作系统课程设计设计题目:进程管理仿真程序设计已知技术参数和设计要求:1. 设计任务设计一个仿真程序,仿真进程管理的五大功能,包括创建进程,用新进程替换当前进程映像,进程状态转换,进程调度,上下文切换。2. 问题描述2.1 系统组成系统由4种程序组成,它们是进程管理程序(kernel)、命令解释程序(commander)、系统信息程序( reporter)、用户程序(Application)。 系统内有3种进程(下称模拟进程),它们是: 命令解释进程(commander),系统信息进程( reporter),用户进程(Application)。Kernel程序首先运行。Kernel启动后,创建commander进程。Kernel程序根据需要创建reporter进程和Application进程。Kernel负责维护6个数据结构,包括时间 (Time), 处理器状态(CPUstate),进程表 (PCBTable), 就绪队列(ReadyState),等待队列(BlockedState),运行进程(RunningState)。Time是系统时间的。CPUstate包括程序计数器PC和累加器A的值。PCBTable的每一项是一个进程的进程控制块(PCB)。commander程序、reporter程序、Application程序是用下列CPU伪指令书写的程序: CPU伪指令MOV n /把整数n赋给累加器AADD n /累加器A的值与整数n相加,结果送到累加器A。SUB n /从累加器A的值减去整数n,结果送到累加器A。JMP addr /跳转到地址addrOUT port /累加器的内容输出到端口port。port为0,指显示器;为1,指扬声器。 伪系统调用fork() /创建子进程,子进程为父进程的复制品。exec() /用新进程替换当前进程映像。exit() /进程终止block() /进程等待print() /在屏幕上打印信息printk() /在屏幕上打印系统信息scanf() /从键盘输入一字符串msg() /向内核发送消息2.2命令解释程序命令解释程序从标准输入重复读入用户命令,然后以消息形式发送给内核。命令解释程序处理的命令有:Q pid n /把进程pid的时间片置位nP pid n /把进程pid的优先数置位nL /打印系统当前进程的状态。T /打印平均周转时间,终止系统。U /唤醒阻塞队列中第一个模拟进程。2.3 调度算法采用时间轮转和优先级调度混合算法。优先级以优先数表示,优先数越大则优先级越高。调度时,就绪队列中优先数最大的进程优先运行,相同优先数进程按FIFO方式调度。进程运行一个时间片以后,其优先数数减1(即降低一级);进程在就绪队列中等待3个时间片以后,其优先数加1。优先数范围031。3. 功能要求 进程管理仿真程序实现下列功能:(1)能接收用户提交的命令并执行该命令。(2)创建模拟进程,执行用户程序 (3)管理模拟进程状态转换、 (4)用优先级调度算法调度模拟进程的运行,能处理上下文切换。4. 界面要求用户界面设计不做统一规定,但应做到界面友好,易于操作。5. 其他要求 在设计中须使用make工具建立工程。6.课程设计时间:2周(2011.5.302011.6.8)7.课程设计的考核方式及评分方法(1)考核方式 教师提供测试数据,在实验室当场验收。教师提问,学生回答。 学生提交课程设计文档(A4打印件),教师评阅。(2) 评分方法上机检查:书面报告:答辩=6:3:1,没有通过上机检查的或不提交课程设计报告的,其成绩直接记为不及格。指导教师签名:日期:教研室主任签名: 日期:系主任签名: 日期:摘 要采用c+语言模仿进程轮回运算和优先级优先调度算法来运行进程,创建paixu()来对进程优先级进行排序,reporter()来输出各个进程的情况,delay()来延迟reporter()输出,kernel()来调用各个函数以及采用各个算法,initial()来初始化全部变量。关键字:算法 初始化 调用 进程管理目录第一章 问题分析71.1解题思路71.2算法与数据结构7第二章 设计说明72.1问题描叙与功能设计72.1.1 程序设计流程图72.2函数定义92.2.1排序函数92.2.2输出函数92.2.3延迟函数92.2.4算法调用函数92.2.5初始化函数9第三章 调试及运行10总结13附录B.程序代码15第一章 问题分析1.1解题思路对于优先级排序问题,首先解决比较优先级的问题。为此定义了paixu()函数用冒泡排序来对优先级进行排序,定义了优先数组youxian100记录哪个进程优先,定义了一个reporter()函数来输出各个进程的运行情况,delay()来延迟reporter()输出,用while来循环延迟输出时间,kernel()是主要的运行函数,它用来联系各个函数采用优先级优先算法和轮回算法来运行各个进程,initial()来初始化全部变量。1.2算法与数据结构在程序中,主要是用了一个模拟和搜索算法。采用模拟将各个运行过程数字化来模仿进程运算。搜索主要是搜出各个进程的执行情况。第二章 设计说明2.1问题描叙与功能设计让用户输入进程的创建个数和轮回的时间片,然后程序会自动随机生成进程的进程号、运行时间和优先级。并在运行过程中按要求来执行,因此定义了reporter()、delay()、kernel()和initial()。2.1.1 程序设计流程图开始输入命令初始化变量和进程优先数排列运行kernel()函数结束图1.1 main()函数开始优先级排序,将各个优先级高的4个进程调入就序列判断进程运行结束?判断等待列存在进程?判断就序列存在进程?结束采用轮回运算法运行进程NYY将程序采用优先级优先调入就绪列NNY图1.2 kernel()函数2.2函数定义2.2.1排序函数函数paixu()用两个for循环用冒泡排序算法来比较各个进程优先级。并用youxian数组记录优先顺序。2.2.2输出函数函数reporter()用for语句来输出那program数组的各个变量。2.2.3延迟函数函数delay()定义一个大的整型变量,赋给大的值,用while循环变量值的次数,以此来延缓程序执行的速度以便观察其运行情况。2.2.4算法调用函数函数kernel()用来执行各个函数的调用及进程算法的运作。通过函数kernel()对进程的三态进行转换。2.2.5初始化函数函数initial()用for来对各进程赋初值。初值设为随机,用rand()来赋予随值,为防止第二次执行该程序的值一样,因此再调用头文件函数srand(time(O)。同时用%来限制随机数的范围。第三章 调试及运行输入想要创建的进程数和时间轮回片段,如图3.1所示:图 2.1系统会自动随机生成6个不同的进程,并排序运行最高优先级的进程一个时间片,使他的优先级减一,如图3.2所示:图2.2在进程1113运行期间,每运行一个时间片,处于就绪列的进程就等待次数加一,如图3.3、3.4和3.5所示:图2.3图2.4图2.5进程运行3个时间片,就绪列的进程优先数加一,如图3.6、3.7和3.8:图2.6图2.7图2.8进程运行20个时间片段后1113进程未运行结束,所以用轮回运算算法将1113进程会进入就绪态,1114进程进入运行态,如图3.9和3.10:图2.9图2.10直到进程1114运行结束,选用优先级调度算法将等待列的进程1116调入就绪列,如图3.11和3.12:图2.11图2.12依照此规律运行,直到所有进程运行完毕,如图3.13:图2.13总结通过这次课程设计,使我对操作系统有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的实践才能更好地学习它,我也发现我的好多不足之处,通过学习也有所改进;再有对操作系统的一些系统调用不太了解,还有对操作系统中经常出现的错误也不了解,所以后在学习过程中,我会更加注视实践操作。 在课程设计过程中,收获知识,提高能力的同时,我也懂得怎么样去制定、实现计划,课程设计是培养学生综合运用所学知识发现提出分析和解决实际问题锻炼实践能力的重要环节是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,自从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,在设计中我们遇到了很多编程问题,最后在各位老师的辛勤指导下,我们慢慢的进入状态,我做的是一个进程调用的设计,内容包括很多。函数设计也是非常的复杂,所以设计程序一定要仔细,不容一点的马虎。当然也有大问题,关于文件的操作,是我们最大的问题。要有模块化思维能力 ,化思维就是编程任何一个功能模块或函数的时候,要多想一些,不要局限在完成当前任务的简单思路上,想想看该模块是否可以脱离这个系统存在,是否可以通过简单的修改参数的方式在其他系统和应用环境下直接引用,这样就能极大避免重复性的开发工作。附录A.参考文献1 孙仲秀.操作系统教程(第4版).北京:高等教育出版社,2010.1 Abraham Silberschatz. 操作系统概念(第7版 影印版). 北京:高等教育出版社,2007.2 Gary Nutt(著),潘登(译).Linux操作系统内核实习.北京:机械工业出版社,2004.附录B.程序代码#include #includeusing namespace std;struct PCB int pid;/进程号 int time;/程序时间片 int worktime;/ 程序运行时间。 int waittime;/等待次数 int priority;/进程优先数 string status;/进程状态 program100;int n,m,youxian100;void paixu(int a) int b=0; for(int i=0;ia-1;i+) if(programyouxiani.status!=结束) for(int j=i+1;ja;j+) if(programyouxianj.status!=结束) if(programyouxiani.priorityprogramyouxianj.priority) b=youxiani; youxiani=youxianj; youxianj=b; else for(int j=i+1;j4;j+) if(programyouxianj.status!=结束) b=youxiani; youxiani=youxianj; youxianj=b; i-; break; void reporter(int a)/系统信息 cout进程号t进程时间片t进程运行时间 t等待次数t进程优先数t进程状态; for(int i=0;ia;i+) coutprogrami.pidtprogrami.timettprogrami.worktimett programi.waittimettprogrami.priorityttprogrami.statusendl; void delay() int i=30000000; while(i-); system(cls); reporter(n); void kernel()/进程管理程序 int k=0,Y=0,number=0; for(int i=0;in;i+) if(i=0) programyouxian0.status=运行态; number+; else if(i4) programyouxiani.status=就绪态; number+; else break; delay(); cout调用进程号programyouxian0.pid进入运行态n; while(1) for(int i=0;im;i+) for(int j=0;jnumber;j+) if(j!=k) if(programyouxianj.status=就绪态) if(+programyouxianj.waittime=3) programyouxianj.waittime=0; programyouxianj.priority+; delay(); cout进程号programyouxianj.pid等待三次,优先级自增一n; system(pause); else delay(); cout进程号programyouxianj.pid等待次数加一n; system(pause); else programyouxianj.worktime+; programyouxianj.priority-; delay(); cout进程号programyouxianj.pid优先级减一n; system(pause); if(programyouxiank.worktime=programyouxiank.time) Y=1; number-; programyouxiank.status=结束; delay(); cout进程号programyouxiank.pid运行结束n; system(pause); break; if(Y) for(int i=number;in;i+) if(programyouxiani.status=等待态) youxiank=youxiani; number+; programyouxiani.status=就绪态; delay(); cout将优先级最高的等待列的进程号programyouxiani.pid调入就绪列n; system(pause); break; k=0; Y=0; paixu(4); if(numbe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论