您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 计算机操作系统课程设计
景德镇陶瓷学院计算机操作系统课程设计学院:信息工程学院专业:计算机科学与技术班级:13级二班学号:201310510112姓名:张旸任务一、进程创建、控制与撤消一、实验目的:通过进程的创建和控制的设计来达到如下目的:1、加深对进程概念的理解,明确进程和程序的区别2、进一步认识并发执行的概念,区别顺序执行和并发执行3、分析进程争用临界资源的现象,学习解决进程互斥的方法二、实验内容:在WINDOWS环境下模拟实验:1、编写一程序,来模拟进程的创建和撤消,要求通过终端键盘输入三、四作业的名称、大小、优先级等。系统为它创建进程,并把进程控制块PCB的内容送到终端显示器上输出2、同时模拟内存空间为作业分配内存空间,并把结果用图形形象地表示出来,同样通过终端输出3、按进程的优先级的顺序撤消进程,同时通过终端显示PCB的撤消过程和内存的释放过程三、结构框图:四、实验代码:#includeconio.h#includestdio.h#includestdlib.hstructjincheng{intpid;开始主函数main()查看进程viewrun()撤销进程kill()创建进程create()替换进程huanchu()结束退出exit(0)intyouxian;intdaxiao;intmsg;intlive;};structjinchengneicun[20],waicun;intshumu=1;create(){if(shumu=20){printf(\n内存已满,请先结束或换出进程\n);}else{printf(\n请创建第%d个进程,shumu);printf(\n请输入新进程的pid\n);scanf(%d,&neicun[shumu].pid);printf(\n请输入新的进程的优先级\n);scanf(%d,&neicun[shumu].youxian);printf(\n请输入新的进程的大小\n);scanf(%d,&neicun[shumu].daxiao);printf(\n请输入新的进程的消息\n);scanf(%d,&neicun[shumu].msg);neicun[shumu].live=1;shumu++;}returnneicun[shumu-1].live;}voidviewrun(){intvpid;printf(\n请输入想显示第几个创建的进程\n);scanf(%d,&vpid);if(vpid0&&vpid=20&&neicun[vpid].live==1){printf(\n进程的pid是:%d\n,neicun[vpid].pid);printf(\n进程的优先级是:%d\n,neicun[vpid].youxian);printf(\n进程的大小是:%d\n,neicun[vpid].daxiao);printf(\n进程的消息是:%d\n,neicun[vpid].msg);}else{printf(\n所查看运行进程不存在\n);}printf(请按回车退出查看\n);vpid=getch();}voidhuanchu(){intpid1,pid2;charc;printf(\n请输入第一个替换进程是第几个创建的\n);scanf(%d,&pid1);printf(\n请输入第二个替换进程是第几个创建的\n);scanf(%d,&pid2);if(pid10&&pid1=20&&neicun[pid1].live==1){if(neicun[pid1].youxianneicun[pid2].youxian){waicun.pid=neicun[pid1].pid;waicun.youxian=neicun[pid1].youxian;waicun.daxiao=neicun[pid1].daxiao;waicun.msg=neicun[pid1].msg;neicun[pid1].pid=neicun[pid2].pid;neicun[pid1].youxian=neicun[pid2].youxian;neicun[pid1].daxiao=neicun[pid2].daxiao;neicun[pid1].msg=neicun[pid2].msg;neicun[pid2].pid=waicun.pid;neicun[pid2].youxian=waicun.youxian;neicun[pid2].daxiao=waicun.daxiao;neicun[pid2].msg=waicun.msg;printf(\n替换完成\n);printf(\n被替换进程的pid是:%d\n,waicun.pid);printf(\n被替换进程的youxian是:%d\n,waicun.youxian);printf(\n被替换进程的daxiao是:%d\n,waicun.daxiao);printf(\n被替换进程的msg是:%d\n,waicun.msg);}else{printf(\n进程优先级不够大);}}else{printf(所查看运行进程不存在);}printf(请按回车退出换出进程\n);c=getche();}voidkill(){intkpid;printf(\n请输入要撤销第几个创建的进程\n);scanf(%d,&kpid);if(kpid0&&kpid20&&neicun[kpid].live==1){neicun[kpid].live=0;printf(\n已撤销第%d个创建的进程,kpid);}else{printf(\n所查看运行进程不存在\n);}printf(请按回车退出查看\n);kpid=getch();}voidmain(){intn,m,i;chara;n=1;while(n==1){system(cls);printf(\n***********************************);printf(\n*进程演示系统*);printf(\n***********************************);printf(\n1.创建新的进程2.查看运行进程);printf(\n3.换出某个进程4.杀死运行进程);printf(\n5.退出);printf(\n***********************************);printf(\n请选择(1~5));a=getch();switch(a){case'1':create();break;case'2':viewrun();break;case'3':huanchu();break;case'4':kill();break;case'5':exit(0);default:n=0;}}}五:实验结果:任务二、单处理机系统的进程调度一、实验目的:1、加深对进程概念的理解,明确进程和程序的区别2、深入了解系统如何组织进程,创建进程3、进一步认识如何实现处理机调度二、实验内容:从下面四个调度算法中,选择一个调度算法来实现进程调度:1、先来先服务调度算法2、优先数调度算法3、时间片轮法调度算法4、多级反馈队列轮转调度算法三、结构框图:While循环遍历就绪调用check()函数,打印所有队列将就绪队列中的首进程由“就绪状态”转为执行状态调用running()函数调用destroy()函数,释放进程调用input()函数;用户输入测试数据输入的同时建立好就绪序列初始运行时间是否等于服务开始结束四、实验代码:#includestdio.h#includestdlib.h#includeconio.h#definegetpch(type)(type*)malloc(sizeof(type))#defineNULL0structpcb{/*定义进程控制块PCB*/charname[10];charstate;intsuper;intntime;intrtime;structpcb*link;}*ready=NULL,*p;typedefstructpcbPCB;voidsort()/*建立对进程进行优先级排列函数*/{PCB*first,*second;intinsert=0;if((ready==NULL)||((p-super)(ready-super)))/*优先级最大者,插入队首*/{p-link=ready;ready=p;}else/*进程比较优先级,插入适当的位置中*/{first=ready;second=first-link;while(second!=NULL){if((p-super)(second-super))/*若插入进程比当前进程优先数大,*/{/*插入到当前进程前面*/p-link=second;first-link=p;second=NULL;insert=1;}else/*插入进程优先数最低,则插入到队尾*/{first=first-link;second=second-link;}}if(insert==0)first-link=p;}}voidinput()/*建立进程控制块函数*/{inti,num;printf(\n请输入进程数量:);scanf(%d,&num);for(i=1;i=num;i++){printf(\n进程号No.%d:\n,i);p=getpch(PCB);printf(\n输入进程名:);scanf(%s,p-name);printf(\n输入进程优先数:);scanf(%d,&p-super);printf(\n输入进程运行时间:);scanf(%d,&p-ntime);printf(\n);p-rtime=0;p-state='w';p-link=NULL;sort();/*调用sort函数*/}}intspace(){intl=0;PCB*pr=ready;while(pr!=NULL){l++;pr=pr-link;}return(l);}voidshow(){printf(\nqname\tstate\tsuper\tndtime\truntime\n);}voiddisp(PCB*pr)/*建立进程显示函数,用于显示当前进程*/{printf(%s\t,pr-name);printf(%c\t,pr-state);printf(%d\t,pr-super);printf(%d\t,pr-ntime);printf(%d\t,pr-rtime);printf(\n);}voidcheck()/*建立进程查看函数*/{PCB*pr;printf(\n****当前正在运行的进程是:%s,p-name);/*显示当前运行进程*/show();disp(p);pr=ready;if(pr==NULL)printf(\n****当前就绪队列为空!);else{printf(\n****当前就绪队列状态为:);/*显示就绪队列状态*/show();while(pr!=NULL){disp(pr);pr=pr-link;}}}voiddestroy()/*建立进程撤消函数(进程运行结束,撤消进程)*/{printf(\n进程[%s]已完成.\n,p-name);free(p);}voidrunning()/*建立进程就绪函数(进程运行时间到,置就绪状态*/{(p-rtime)++;if(p-rtime==p-ntime)destroy();/*调用destroy函数*/else{(p-super)--;p-state='w';sort();/*调用sort函数*/}}voidmain()/*主函数*/{intlen,h=0;charch;input();len=space();while((len!=0)&&(ready!=NULL)){ch=getchar();h++;printf(\n当前运行次数为:%
本文标题:计算机操作系统课程设计
链接地址:https://www.777doc.com/doc-6773327 .html