*******************实践教学*******************兰州理工大学计算机与通信学院2012年秋季学期操作系统原理课程设计题目:进程的控制系统专业班级:软件工程(1)班姓名:锋学号:10240506指导教师:朱红蕾成绩:目录摘要 (1)正文 (2)1. 设计思想 (2)2. 相关的各模块的伪码算法 (2)3. 函数的调用关系 (8)4. 测试结果 (9)总结 (12)参考文献 (13)致谢 (14)摘要进程是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行分配和保护的基本单位。
进程的组成之一是PCB,它是进程控制块,是系统为描述进程而设计的一种数据结构。
进程由创建而产生,由调度而执行,由撤销而消亡的生命周期,因此操作系统要有对进程生命周期的各个环节进行控制的的功能,所谓进程控制,是指系统使用一些具有特定功能的程序段来创建进程、撤销进程以及完成进程各状态间的转换。
进程的控制包括:创建进程、撤销进程、阻塞进程、唤醒进程、激活进程等,这些控制和管理功能是由操作系统中的原语来实现的,而进程控制原语是对进程生命周期控制和进程状态转换的原语,基于进程的基本状态,他们是创建进程原语、撤销进程原语、阻塞进程原语和唤醒进程原语。
原语是在管态下执行、完成系统特定功能的过程。
系统对进程的控制若不使用原语,就会造成其状态的不确定性,从而达不到进程控制目的。
原语的一种实现方法是系统调用方式,采用访管指令实现,原语在使用中不可中断。
现在操作系统设计中,操作系统内核是基于硬件的第一次软件扩充,它为操作系统的进程控制及管理提供了良好环境,而进程的控制及调度体现了操作系统的运行速度及运行频率,所以说进程控制在靠近硬件的软件层次中占据着重要地位。
关键词: 进程、控制、原语正文1.设计思想进程控制是操作系统对进程进行管理所提供的控制操作。
进程控制至少应该包括进程创建、进程撤销、进程阻塞、进程唤醒、进程执行等操作,它们都使用原语实现。
所谓原语是指在执行过程中不允许中断,它属于操作系统内核的一部分,以系统调用的形式提供给用户和操作系统使用。
因此,我们通过进程的创建原语、撤销原语、阻塞原语以及唤醒原语等,再结合大量的资料,最终完成了进程控制系统源程序。
2.相关的各模块的伪码算法进程控制通过四个原语实现:即(1)创建原语(2)撤销原语(3)阻塞原语(4)唤醒原语。
PCB的常用数据项:i.status:进程状态,包括Running、Readya、Readys、Blockeda、Blockeds等。
i.state:队列指针,所在队列的首指针。
i.addr:队列中进程的PCB间的链接指针,又可分为向前、向后两种指针。
i.priority:进程的优先级。
i.CPU-state:CPU的状态保护区。
i.mainstore:分配的主存区域。
i.resource:资源清单。
i.parent:父进程指针。
i.progeny:后代进程指针。
EP:运行指针。
RQ:就绪队列指针。
1.创建原语:过程:先寻找一个空闲的PCB,然后填写PCB初值,赋值完后,将PCB插入相应的队列中。
创建原语流程图:创建原语算法:void create(n,S0,K0,M0,R0,acc) { i=getinternal name(n); /*获得进程n 的内部名*/ i.id=n; /*填写进程的外部名*/ i.priority=K0; /*填写进程的优先级*/ i.cpu state=S0; /*填写CPU 的初始状态*/ i.mainstore=M0; /*填写内存区域*/i.resources=R0; /*填写资源清单*/查PCB 链表有空PCB?取空表PCB (i )将有关参数填入PCB (i )相应项PCB (i )入就绪队列PCB (i )入进程家族或进程链返回创建失败有无入口i.status="就绪"; /*设置“就绪”状态*/ j=EP; /*获得调用者内部名*/i.parent=j; /*填入调用者进程内部名,即进程i 的父进程*/ i.progeny=0; /*i 的子进程为空,刚被创建,还没有子进程*/ j.progeny=i; /*把i 填入其父进程PCB 中家族指针处*/ i.state=RQ; /*指示i 进程属于就绪队列*/ insert(RQ,i); /*把i 进程PCB 插入就绪RQ 队列*/}2.撤销原语:过程:首先要找到要终止进程的PCB ,若该进程正在运行,则终止它的运行,并置重新调度标识,终止属于该进程的子孙进程,释放终止进程所拥有的全部资源,将终止进程移出它所在队列并收回PCB 。
撤销流程图:撤销原语算法:入口查进程链表或进程家族有此PCB 吗?该PCB 有子进程吗?出错处理 释放该进程所占有的资源释放该PCB 结构本身无 有有无void destroy(n){sched=false;i=getinternal name(n); /*获得进程n的内部名*/kill(i); /*撤销进程*/if(sched==true)scheduler; /*需要调度时转进程调度程序重新调度*/}void kill(i){if(i.status=="执行状态"){stop(i);sched=true;}remove(i.state); /*将该进程的PCB从相应队列中移去*/for all s∈i.progeny do kill(s); /*若有子进程s,递归调用kill(s)撤销之*/for all r∈(i.main store||i.resources)doif(owend(r)) insert(r.semaphore,r.data); /*属于父进程资源归还,且插入资源清单*/for all R∈created resources(i)doremove descriptor(R);/*撤销自己的资源清单,归还清单*/remove process concrol block(i); /*释放进程PCB*/}3.阻塞原语:过程:首先中断PCB,停止进程运行,将CPU的现行状态存放到PCB的CPU状态保护中,然后将该进程置阻塞状态,并把它插入等待队列中,然后系统执行调度程序,将CPU分配给另一个就绪的进程。
阻塞原语流程图:入口保存当前进程的CPU 现场置该进程的状态被阻塞进程入等待队列转进程调度阻塞原语算法:void block(void){i=EP;stop(i); /*阻塞调用进程自己*/i.status="阻塞";/*设置阻塞状态*/i.state=WQ(r);/*填写阻塞队列名称*/insert(WQ(r),i); /*把调用进程的PCB插入相应等待队列WQ(r)*/scheduler; /*转进程调度程序重新调度*/}4.唤醒原语:过程:执行时,首先找到被唤醒进程的内部标识,让该进程脱离阻塞队列,将现行状态改为就绪态,然后插入就绪队列中,等待调度运行。
唤醒原语流程图:入口从等待队列中摘下被唤醒进程将被唤醒进程置为就绪态将被唤醒进程送人就绪队列转进程调度或返回唤醒原语算法:void wakeup(n){i=getinternal name(n); /*获得进程n内部名*/remove(WQ(r),i); /*把进程i的PCB从相应阻塞队列中移出*/i.status="就绪";/*将进程置为就绪态*/i.state=RQ; /*指示i进程属于就绪队列RQ*/insert(RQ,i); /*把进程i的PCB插入就绪队列RQ*/}3.函数的调用关系Main()PCB定义进程控制块并赋值Sort()进程优先级排列函数Check()进程查看函数Input()进程控制块函数Disp()进程显示函数Destroy()进程撤销函数Running()进程就绪函数完成进程控制4测试结果输入所需进程:请输入进程数:2进程号No.1:输入进程名:进程1输入进程优先级:2输入进程运行时间:3进程号No.2:输入进程名:进程2输入进程优先级:1输入进程运行时间:2显示所输出进程信息:经过五次运行后进程控制完成:总结不知不觉中为期2个星期的课程设计结束了,我的设计结果终于出来了,仔细想来,有喜有忧。
通过课程设计我学到了很多东西,也提高了我的动手能力。
经过这次课设我学到了很多。
通过此次课程设计加深理解了什么是进程,熟悉了LINUX/WINDOWS支持的进程的控制方式。
熟悉了/LINUX/WINDOWS 的常用基本命令。
这次课设的题目是进程控制系统,而经过查阅的大量资料,我发现进程控制系统主要包括进程的创建,进程的撤销,进程阻塞以及进程的唤醒,然后分模块完成。
而且通过此次课程设计使我懂得了思考的重要性,学到了严谨的学习态度、刻苦的探索精神,也增加了去面对更大挑战的信心和勇气,同时也培养了把学到的知识用于解决实际问题,培养了我们的独立动手能力。
如果仅靠一个人要完成所有的工作是非常困难的,所以在以后的学习中我会更加注意各个方面的能力的协调发展。
在课程设计时遇到了很多的问题,在老师的帮助,同学的帮助以及对各种资料的查阅中,将问题解决,培养了我自主动手,独立研究的能力,也告诉我合作的重要性,为今后在学习工作中能更好的发展作下了很好的铺垫。
两周的课程设计很短暂,但其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力。
并学会了如何将所学的各课知识融汇组织来配合学习,两周中我受益匪浅。
参考文献1. 汤子瀛,哲凤屏.《计算机操作系统》.西安电子科技大学学出版社.2. 王清,李光明.《计算机操作系统》.冶金工业出版社.3.孙钟秀等. 操作系统教程. 高等教育出版社4.曾明. Linux操作系统应用教程. 陕西科学技术出版社.5. 张丽芬,刘利雄.《操作系统实验教程》. 清华大学出版社.6. 孟静,操作系统教程--原理和实例分析. 高等教育出版社7. 周长林,计算机操作系统教程. 高等教育出版社8. 张尧学,计算机操作系统教程,清华大学出版社9. 任满杰,操作系统原理实用教程,电子工业出版社致谢为期两个星期的课程设计结束了,说实话我从中学到了很多课本上没有的东西,让我受益匪浅。
在此,我要向我的指导老师朱红蕾老师致以最诚挚的谢意。
她在我的课程设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在不熟悉的领域中仍能迅速掌握新的技术。
在这段时间内老师一直认真的指导我们,才使设计圆满完成!我还要再次感谢我的操作系统老师王旭阳老师,在以往的基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。