您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 给排水/暖通与智能化 > 进程控制系统设计说明书
*******************实践教学*******************兰州理工大学计算机与通信学院2012年秋季学期操作系统原理课程设计题目:进程控制系统专业班级:计算机科学与技术10级4班姓名:王泽学号:10240403指导教师:王燕成绩:目录摘要..............................................................1正文..............................................................2一、问题描述.......................................................2二、设计目的.......................................................3三、设计思想.......................................................4四、详细设计.......................................................4五、函数关系调用图................................................11六、调试分析......................................................12七、调试结果......................................................13总结.............................................................16参考文献..........................................................17致谢.............................................................18附件:源程序(带注释)............................................20摘要进程是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行分配和保护的基本单位。进程的组成之一是PCB,它是进程控制块,是系统为描述进程而设计的一种数据结构。进程由创建而产生,由调度而执行,由撤销而消亡的生命周期,因此操作系统要有对进程生命周期的各个环节进行控制的的功能,所谓进程控制,是指系统使用一些具有特定功能的程序段来创建进程、撤销进程以及完成进程各状态间的转换。进程的控制包括:创建进程、撤销进程、阻塞进程、唤醒进程、激活进程等,这些控制和管理功能是由操作系统中的原语来实现的,而进程控制原语是对进程生命周期控制和进程状态转换的原语,基于进程的基本状态,他们是创建进程原语、撤销进程原语、阻塞进程原语和唤醒进程原语。原语是在管态下执行、完成系统特定功能的过程。系统对进程的控制若不使用原语,就会造成其状态的不确定性,从而达不到进程控制目的。原语的一种实现方法是系统调用方式,采用访管指令实现,原语在使用中不可中断。关键词:进程、控制、原语正文一、问题描述进程是操作系统中最基本也是最重要的概念,而进程又由创建而产生,由调度而执行,由撤销而消亡的生命周期,因此操作系统要有对进程生命周期的各个环节进行控制的功能,这就是进程的控制。进程控制的职能是对操作系统中的全部进程实行有效的管理,主要对一个进程进行创建,撤销,阻塞,唤醒,以及在某些进程状态间进行状态转换控制。而进程的控制通常由原语完成,所谓原语,一般是指由若干条指令组成,用来实现某个特定功能,在执行过程中不可被中断的程序段。在进程控制中主要是由四个原语来实现所需功能,创建原语完成创建一个新进程的功能,撤销原语完成了进程所需功能后,应当退出系统而消亡,系统及时回收它所占有的全部资源,以便其他进程使用,阻塞原语因为其所申请的资源暂时无法满足而被迫处于阻塞状态。等待所需时间的发生,唤醒原语当所需要的资源出现时,由释放资源的进程调用唤醒原语,唤醒等待该资源的进程。二、设计目的课程设计是为了让我们能对操作系统有更进一步的了解所开设的实践课程,学会如何把学到的知识用于解决实际问题,进一步培养动手能力。所以这就要求我们在对课本主要内容熟练掌握的前提下,运用这些内容来解决实际问题。通过课程设计可以提高我们的实践动手能力,能让我们把课本上的知识真正在实际应用中得到实现,进而把它变成自己的东西,达到学以致用的效果。同时,还可以加深对理论知识的印象。这也可以为我们以后的工作奠定良好的基础。通过该题目的设计过程,可以初步掌握进程控制系统的原理、软件开发方法并提高解决实际问题的能力。三、设计思想进程控制是操作系统对进程进行管理所提供的控制操作。进程控制至少应该包括进程创建、进程撤销、进程阻塞、进程唤醒、进程执行等操作,它们都使用原语实现。所谓原语是指在执行过程中不允许中断,它属于操作系统内核的一部分,以系统调用的形式提供给用户和操作系统使用。因此,我们通过进程的创建原语、撤销原语、阻塞原语以及唤醒原语等,再结合大量的资料,最终完成了进程控制系统源程序。四、详细设计进程控制通过四个原语实现:即(1)创建原语(2)撤销原语(3)阻塞原语(4)唤醒原语。PCB的常用数据项:id[i]:是进程标识符。Id为外部标识符;i为内部标识符,被定义为结构体变量。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:就绪队列指针。WQ[r]:因事件r阻塞队列指针。1.创建原语:过程:先寻找一个空闲的PCB,然后填写PCB初值,赋值完后,将PCB插入相应的队列中。创建原语流程图:查PCB链表有空PCB?取空表PCB(i)将有关参数填入PCB(i)相应项PCB(i)入就绪队列PCB(i)入进程家族或进程链返回创建失败有无入口创建原语算法:voidcreate(n,S0,K0,M0,R0,acc){i=getinternalname(n);/*获得进程n的内部名*/i.id=n;/*填写进程的外部名*/i.priority=K0;/*填写进程的优先级*/i.cpustate=S0;/*填写CPU的初始状态*/i.mainstore=M0;/*填写内存区域*/i.resources=R0;/*填写资源清单*/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结构本身返回无有有无撤销原语算法:voiddestroy(n){sched=false;i=getinternalname(n);/*获得进程n的内部名*/kill(i);/*撤销进程*/if(sched==true)scheduler;/*需要调度时转进程调度程序重新调度*/}voidkill(i){if(i.status==执行状态){stop(i);sched=true;}remove(i.state);/*将该进程的PCB从相应队列中移去*/foralls∈i.progenydokill(s);/*若有子进程s,递归调用kill(s)撤销之*/forallr∈(i.mainstore||i.resources)doif(owend(r))insert(r.semaphore,r.data);/*属于父进程资源归还,且插入资源清单*/forallR∈createdresources(i)doremovedescriptor(R);/*撤销自己的资源清单,归还清单*/removeprocessconcrolblock(i);/*释放进程PCB*/}3.阻塞原语:过程:首先中断PCB,停止进程运行,将CPU的现行状态存放到PCB的CPU状态保护中,然后将该进程置阻塞状态,并把它插入等待队列中,然后系统执行调度程序,将CPU分配给另一个就绪的进程。阻塞原语流程图:阻塞原语算法:voidblock(void){i=EP;stop(i);/*阻塞调用进程自己*/i.status=阻塞;/*设置阻塞状态*/入口保存当前进程的CPU现场置该进程的状态被阻塞进程入等待队列转进程调度i.state=WQ(r);/*填写阻塞队列名称*/insert(WQ(r),i);/*把调用进程的PCB插入相应等待队列WQ(r)*/scheduler;/*转进程调度程序重新调度*/}4.唤醒原语:过程:执行时,首先找到被唤醒进程的内部标识,让该进程脱离阻塞队列,将现行状态改为就绪态,然后插入就绪队列中,等待调度运行。唤醒原语流程图:唤醒原语算法:voidwakeup(n){i=getinternalname(n);/*获得进程n内部名*/入口从等待队列中摘下被唤醒进程将被唤醒进程置为就绪态将被唤醒进程送人就绪队列转进程调度或返回remove(WQ(r),i);/*把进程i的PCB从相应阻塞队列中移出*/i.status=就绪;/*将进程置为就绪态*/i.state=RQ;/*指示i进程属于就绪队列RQ*/insert(RQ,i);/*把进程i的PCB插入就绪队列RQ*/}五、函数关系调用Main()PCB定义进程控制块并赋值Sort()进程优先级排列函数Check()进程查看函数Input()进程控制块函数Disp()进程显示函数Destroy()进程撤销函数Running()进程就绪函数完成进程控制六、调试分析在WINDOES系统中,使用一种数据结构—进程控制块(PCB)来标记进程,PCB是进程存在的唯一标志。进程控制块保存进程状态、进程性质(如优先程度)、与进程有关的控制信息(如参数、信号量和消息等)、相应队列和现场保护区域等。进程控制块随着进程的建立而产生,随着进程的完成而撤消,它是操作系统核心中最主要的数据结构之一,它既是进程存在的标志和调度的依据,又是进程可以被打断并能恢复运行的基础。操作系统核心通过PCB管理进程,一般PCB是常驻内存的,尤其是调度信息必须常驻内存。在操作系统中有许多进程,它们对应着不同的或相同的程序,竞争地使用着系统的资源。在编写程序过程中,我们遇到最大的问题是四个算法在总程序中的运用以及函数的定义,经过查阅资料后我们发现用C语言来编写我们的程序以及算法是最合理的,其后我们先把每一个算法用C语言先定义后编写,在借鉴网上以及书本有关操作系统进程控制系统源代码,把我们自己编写的算法运用到整个程序中,最终完成了本次操作系统进程控制系统的代码。七、调试结果输入所需进程:请输入进程数:2进程号No.1:输入进程名:进程1输入进程优先级:2输入进程运行时间:3进程号No.2:输入进程名:进程2输入进程优先级:1输入进程运行时间:2显示所
本文标题:进程控制系统设计说明书
链接地址:https://www.777doc.com/doc-3837227 .html