您好,欢迎访问三七文档
..目录一、设计系统目的.........................................1.......................................1三、系统分析............................................1四、系统设计.............................................1五、程序设计流程图.......................................5六、源程序清单..........................................5七、调试过程中的问题及系统测试情况......................121..................................................122、系统测试结果................................................12八、系统设计总结.......................................14..一、设计系统目的本设计的目的是加深对进程概念及进程管理各部分内容的理解,熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构、同步机构及通讯机构实施。设计一个允许n个进程并发运行的进程管理模拟系统。该系统包括有简单的进程控制、同步与通讯机构,其进程调度算法可任意选择。每个进程用一个PCB表示,其内容根据具体情况设置。各进程之间有一定的同步关系可选。系统在运行过程中应能显示或打印各进程的状态及有关参数的变化情况,以便观察诸进程的运行过程及系统的管理过程。三、系统分析1、进程控制和同步等可以控制进程的就绪执行和阻塞三种状态等基本功能。2、进程调度调度算法采用的是先来先服务算法。3输出的内容包括—就绪的进程队列,当前cup正在执行的进程,被阻塞的进程队列。四、系统设计本系统所包括的数据结构是对列类本系统由于需要输出就绪队列,执行队列,阻塞对列,故需要利用对列来实现。最好利用队列类来实现,这样可以充分利用类的继承来简化程序。classqueue{public:..queue():rear(NULL),front(NULL){};~queue();voidenqueue(char&item);chardequeue();voiddel(charitem);voiddisplay();intfind(charitem);intisempty(){returnfront==NULL;}private:queuenode*front,*rear;};queue::~queue(){queuenode*p;while(front!=NULL){p=front;front=front-link;deletep;}队列类的成员函数的定义如下:voidqueue::enqueue(char&item){if(front==NULL)front=rear=newqueuenode(item,NULL);elserear=rear-link=newqueuenode(item,NULL);}charqueue::dequeue(){..queuenode*p=front;charf=p-data;front=front-link;deletep;returnf;}voidqueue::display(){queuenode*p;p=front;while(p!=NULL){coutp-data-;p=p-link;}coutNULL;}queue::find(charitem){queuenode*w;w=front;M:while(w!=NULL){if(item==w-data){return1;break;}else{..w=w-link;gotoM;}}if(w==NULL)return0;}voidqueue::del(charitem){queuenode*q,*b;q=front;while(q-data!=item){b=q;q=q-link;}if(q==front){front=front-link;deleteq;}elseif(q==rear){rear=b;rear-link=NULL;deleteq;}else{b-link=q-link;deleteq;}}..五、程序设计流程图六、源程序清单#includeiostream.hclassqueue;classqueuenode{friendclassqueue;/*定义队列的友类*/private:chardata;queuenode*link;queuenode(chard=0,queuenode*l=NULL):data(d),link(l){}};..classqueue{/**//*阻塞队列的继承*/public:queue():rear(NULL),front(NULL){};/*构造函数*/~queue();voidenqueue(char&item);chardequeue();voiddel(charitem);voiddisplay();intfind(charitem);intisempty(){returnfront==NULL;}/*判断队列是否为空*/private:queuenode*front,*rear;/*队列的头指针和指向下一结点的指针*/};queue::~queue()/*定义析构函数*/{queuenode*p;while(front!=NULL){p=front;front=front-link;deletep;}}voidqueue::enqueue(char&item)/*定义入队列函数*/{if(front==NULL)front=rear=newqueuenode(item,NULL);elserear=rear-link=newqueuenode(item,NULL);}charqueue::dequeue()/*出队列函数*/{..queuenode*p=front;charf=p-data;front=front-link;deletep;returnf;}voidqueue::display(){queuenode*p;p=front;while(p!=NULL)/**//*下一数据*/{coutp-data-;p=p-link;}coutNULL;}queue::find(charitem)/*查找队列中是否包含某值*/{queuenode*w;w=front;M:while(w!=NULL){if(item==w-data){return1;break;}else{w=w-link;gotoM;}}if(w==NULL)..return0;}voidqueue::del(charitem)/*删除某值的函数*/{queuenode*q,*b;q=front;while(q-data!=item){b=q;q=q-link;}if(q==front){front=front-link;deleteq;}elseif(q==rear){rear=b;rear-link=NULL;deleteq;}else{b-link=q-link;deleteq;}}voidmain(){intn;chara;cout\n*********************进程管理小模拟系统********************\nendl;queuezhixing,jiuxu,zuse;cout\n**注意:***\n1.若想结束输R。\n2.的顺序即为到达cpu的顺序\nendl;charr;..r='R';for(inti=0;;i++){chare[100];cout输入进程名:;cine[i];if(e[i]!=r)jiuxu.enqueue(e[i]);/*将输入插入就绪队列*/elsebreak;}A:cout\n123、45、退出程序。;cinn;if(n==1){if(!zhixing.isempty()){cout,此操作不能执行\n;charw;coutendl;cout如果要继续请输入#endl;cout要选择的操作:;cinw;if(w=='#')gotoL;/*无条件转移至L*/elsegotoE;}else{..if(!jiuxu.isempty()){a=jiuxu.dequeue();if(a!=r)zhixing.enqueue(a);gotoL;}elsegotoL;}}elseif(n==2){if(!zuse.isempty()){a=zuse.dequeue();if(a!=r)jiuxu.enqueue(a);gotoL;}elsegotoL;}elseif(n==3){if(!zhixing.isempty()){a=zhixing.dequeue();..if(a!=r)zuse.enqueue(a);gotoL;}elsegotoL;}elseif(n==4){cout\n;cina;if(zhixing.find(a)||jiuxu.find(a)||zuse.find(a))/*查找所有队列中是否含*//*有aa*/{if(zhixing.find(a)){zhixing.del(a);}elseif(jiuxu.find(a)){jiuxu.del(a);}if(zuse.find(a)){zuse.del(a);}cout\n\nendl;gotoL;}elsecout没有此进程endl;gotoL;L:..if(n==1||n==2||n==3||n==4)/**/{cout执行队列endl;zhixing.display();coutendl;cout就绪队列endl;jiuxu.display();coutendl;cout阻塞队列endl;zuse.display();coutendl;gotoA;}elseif(n==5);elsegotoA;}E:;}七、调试过程中的问题及系统测试情况1调试时一开始老是出错,尤其是c语言和vc++有区别的地方。比如类的定义后要加分号,而函数的定义则不用。在调试时,有时候出现警告信息,有时候没有。可能是因为机房和宿舍的编译器的版本不同导致的吧。在调试的过程中,出现的问题不是很多,主要是因为本系统采用的数据结构比较少,而且进程调度算法是先来先服务算法,用程序比较容易实现。若用高响应比优先等算法,估计难度会比这大。2、系统测试结果进入系统,首先系统会有提示信息,提示信息如下:..按系统的提示输入数据以后,输入结束符按enter键后系统如下图所示:如上图所示,如果我们输入1按Enter键以后结果如下图所示,以此类推,按入其他的数字进行其他操作:..八、系统设计总结通过这次课程设计,使我们对操作系统有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的实践才能更好地学习它,我们也发现我们的好多不足之处,通过学习也有所改进;因为是亲自在做,所以每一步比起学习理论知识更管用多了。在做的过程中,不光是收获本课的知识,也了解了不少计算机的一些我们不太会关注的东西。如什么叫进程,它是如何工作的,为什么会有它的产生呢!平时,我们都知道计算机会莫名其妙的很卡,那是因为什么呢?就是因为进程,是因为我们打开的软件太多了,我们都知道计算机不是同时一起对所有运行界面一起实现,而是它在用很快速的速度对我们操作的那一块出现的执行,这种速度可以让我们感觉到是同时在运作的。作为学习这个专业的学生,我觉得这些认识都是我们最基本的,所以深入学习进程如何管理和工作
本文标题:进程管理系统设计
链接地址:https://www.777doc.com/doc-7199483 .html