操作系统课程设计--进程管理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

#includestdio.h#includestdlib.h#includestring.h#defineNULL0intshumu=0;//进程的内容结构体structnode{inta;charch;};//进程PCB结构体structjincheng{intpid;intyouxian;floatluntime;floatzhantime;charzhuangtai;//a表示执行,b表示动态就绪node*neirong;structjincheng*next;};structjincheng*neijin,*neizhi,*p,*q;//换出进程函数voidhuanchu(inta){p=neijin;while(p-pid!=a&&p!=NULL){q=p;p=p-next;}if(p==NULL){printf(该进程不在内存里!\n);return;}if(p==neijin){neijin=neijin-next;}else{q-next=p-next;}}//杀死正在运行进程函数voidshasi(){neizhi-next=NULL;printf(运行的进程已经杀死!\n);return;}//创建新进程后与正在运行进程比较优先级并根据优先级判断谁该占用处理机intbijiao(){inti,j;p=neijin;while(p!=NULL){q=p;p=p-next;}i=q-youxian;j=neizhi-next-youxian;if(ij){p=neijin;if(p==q){neijin=neizhi-next;p-neirong=(node*)malloc(sizeof(node));p-neirong-a=9;p-neirong-ch='c';neizhi-next=p;return1;}else{while(p-next!=q){p=p-next;}p-next=neizhi-next;q-neirong=(node*)malloc(sizeof(node));q-neirong-a=9;q-neirong-ch='c';neizhi-next=q;neizhi-next-next=NULL;return1;}}elsereturn-1;}voidmain(){intzhixing();voidshasi();voidchakan();voidtongxing(int);neizhi=(jincheng*)malloc(sizeof(jincheng));neizhi-next=NULL;neijin=(jincheng*)malloc(sizeof(jincheng));neijin-next=NULL;neijin-pid=1;neijin-youxian=6;neijin-luntime=3.5;neijin-zhantime=3;neijin-neirong=(node*)malloc(sizeof(node));neijin-neirong=NULL;neijin-zhuangtai='b';shumu++;p=(jincheng*)malloc(sizeof(jincheng));p-next=neijin-next;neijin-next=p;p-pid=2;p-youxian=5;p-luntime=3.5;p-zhantime=3;p-neirong=(node*)malloc(sizeof(node));p-neirong=NULL;p-zhuangtai='b';shumu++;q=(jincheng*)malloc(sizeof(jincheng));q-next=p-next;p-next=q;q-pid=3;q-youxian=4;q-luntime=3.5;q-zhantime=3;q-neirong=(node*)malloc(sizeof(node));q-neirong=NULL;q-zhuangtai='b';shumu++;inti,n=1;intk,j,s;j=zhixing();intcreat();while(n==1){printf(********************************************\n);printf(*进程演示系统*\n);printf(********************************************\n);printf(1.创建新的进程2.查看运行进程\n);printf(3.换出某个进程4.杀死运行进程\n);printf(5.进程之间通信6.退出系统\n);printf(********************************************\n);printf(请选择(1~6)\n);scanf(%d,&i);switch(i){case1:k=creat();if(k==1)printf(进程创建成功!\n);if(neijin-next==NULL){printf(由于只有一个进程所以为它分配处理机.\n);neizhi-next=neijin;neijin-neirong=(node*)malloc(sizeof(node));neijin-neirong-a=3;neijin-neirong-ch='c';neijin=NULL;continue;}k=bijiao();if(k==1){printf(由于新进程的优先级高于正在执行的进程所以正在执行的\n);printf(进程让出处理机交给新进程,而它变为活动就绪!\n);}if(k!=1)printf(新进程的优先级低于正在运行的进程所以它只有等待!\n);break;case2:if(neizhi-next==NULL){printf(没有进程处于执行状态!\n);continue;}chakan();break;case3:if(neijin==NULL){printf(内存中已经没有处于活动就绪的进程了请创建!\n);continue;}printf(已有处于活动就绪进程的名字为:\n);p=neijin;printf(();while(p!=NULL){printf(%d,p-pid);p=p-next;}printf()\n);printf(请输入要换出的处于活动就绪进程的名字\n);scanf(%d,&s);huanchu(s);if(neijin==NULL)printf(内存中已经没有活动就绪进程!\n);else{printf(已有处于活动就绪进程的名字为:\n);p=neijin;printf(();while(p!=NULL){printf(%d,p-pid);p=p-next;}printf()\n);}break;case4:if(neizhi-next==NULL){printf(没有处于执行状态的进程!\n);continue;}shasi();if(neijin==NULL){printf(已经没有处于活动就绪的进程请创建!\n);continue;}j=zhixing();if(j==1){printf(已为一个动态就绪进程中优先级最高的进程分配处理器!\n);}break;case5:if(neijin==NULL){printf(内存中已经没有处于活动就绪的进程了请创建!\n);continue;}if(neizhi-next==NULL){printf(没有处于执行状态的进程!\n);continue;}printf(请输入要与正在运行的进程进行进程通讯的进程名字\n);scanf(%d,&s);tongxing(s);break;case6:exit(0);default:n=0;}}}//创建新的进程函数intcreat(){inti;if(shumu20){printf(内存已满请先换出进程!\n);i=-1;returni;}else{if(neijin==NULL){p=(jincheng*)malloc(sizeof(jincheng));printf(请输入新进程的名字(数字):\n);scanf(%d,&p-pid);printf(请输入新进程的优先级:(数字)\n);scanf(%d,&p-youxian);p-luntime=3.5;p-zhantime=3;p-neirong=(node*)malloc(sizeof(node));p-neirong=NULL;p-zhuangtai='b';p-next=NULL;neijin=p;shumu++;i=1;}else{p=neijin;while(p-next!=NULL){p=p-next;}q=(jincheng*)malloc(sizeof(jincheng));q-next=p-next;p-next=q;printf(请输入新进程的名字(数字):\n);scanf(%d,&q-pid);printf(请输入新进程的优先级:(数字)\n);scanf(%d,&q-youxian);q-luntime=3.5;q-zhantime=3;q-neirong=(node*)malloc(sizeof(node));q-neirong=NULL;q-zhuangtai='b';shumu++;i=1;}}returni;}//从活动就绪进程队列中找到一个优先级最高的进程并为它分配处理机intzhixing(){inti,j;p=neijin;if(neizhi-next!=NULL){return-1;}i=neijin-youxian;p=neijin-next;while(p!=NULL){j=p-youxian;if(i=j){p=p-next;}if(ij){i=p-youxian;p=p-next;}}if(neijin-youxian==i){neijin-neirong=(node*)malloc(sizeof(node));neijin-neirong-a=9;neijin-neirong-ch='c';neizhi-next=neijin;neijin=neijin-next;neizhi-next-next=NULL;}else{p=neijin;while(i!=p-youxian){q=p;p=p-next;}p-neirong=(node*)malloc(sizeof(node));p-zhuangtai='a';p-neirong-a=9;p-neirong-ch='c';neizhi-next=p;q-next=p-next;}return1;}voidchakan(){p=neizhi-next;printf(该执行进程的名字为:%d\n,p-pid);printf(该执行进程的的优先级:%d\n,p-youxian);printf(该执行进程的轮转时间为:%f\n,p-luntime);printf(该执行进程占用cpu的时间为:%f\n,p-zhantime);printf(该执行的进程内容为:\n);printf(%d,p-neirong-a);printf(%c,p-neirong-ch);printf(\n);p-luntime--;if(p-luntime=0)shasi();zhixing();}voidtongxing(inta){q=neijin;while(q-pid!=a&&q!=NULL){q=q-next;}if(q==NULL){printf(所输入的进程不在内存中!\n);return;}p=neizhi-next;

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功