您好,欢迎访问三七文档
测量实习报告姓名班级学号指导教师2015年01月12日实验一进程管理1.目的和要求加强对进程概念的理解。2.实验内容至少包括:创建新的进程,查看运行进程,换出某个进程,强制暂停运行进程,以及进程之间通信等功能。3.实验环境PC、Windows、TC语言4.实验提示PCB结构通常包括以下信息;进程名,进程优先级,轮转时间片,进程所占用的CPU时间,进程的状态,当前队列指针等。根据实验的不同,可对PCB结构的内容做适量增删。5.主体程序#includestdio.h#includestdlib.h#includestring.hstructprocess_type{intpcbid;intpriorityNum;intdaxiao;charxiaoxi[100];};structprocess_typezhucun[20];intshumu=0,pcbid_1=0;voidcreate()/*创建一个进程的示例*/{if(shumu=20){printf(\n内存已满,请先结束或换出进程);}else{printf(请输入新的进程pcbid:);scanf(%d,&zhucun[shumu].pcbid);printf(请输入新进程的优先级:);scanf(%d,&zhucun[shumu].priorityNum);printf(请输入新进程的大小:);scanf(%d,&zhucun[shumu].daxiao);printf(请输入新进程的消息:);scanf(%s,&zhucun[shumu].xiaoxi);shumu++;}}voidclrscr()/*清屏*/{system(cls);}voidrun(){if(shumu==0)printf(当前没有进程运行\n);else{printf(当前运行进程的情况为\n);printf(\t进程标识符:%d\n,zhucun[pcbid_1].pcbid);printf(\t优先级:%d\n,zhucun[pcbid_1].priorityNum);printf(\t大小:%d\n,zhucun[pcbid_1].daxiao);printf(\t消息:%s\n,zhucun[pcbid_1].xiaoxi);}}voidkill()/*终止进程*/{if(shumu==0)printf(当前没有进程运行\n);else{inti;for(i=shumu-1;ipcbid_1;i--){zhucun[i-1].pcbid=zhucun[i].pcbid;zhucun[i-1].priorityNum=zhucun[i].priorityNum;zhucun[i-1].daxiao=zhucun[i].daxiao;strcpy(zhucun[i-1].xiaoxi,zhucun[i].xiaoxi);}shumu--;}}intxunzhao(intpcbid){inti;for(i=0;ishumu;i++){if(zhucun[i].pcbid==pcbid)returni;}return-1;}voidtongxun()/*进程间通信*/{intfasong,jieshou;inti,j;printf(请输入发送信息的进程编号:);scanf(%d,&fasong);if((i=xunzhao(fasong))==-1){printf(该进程编号不存在\n);return;}printf(请输入接受信息的进程编号:);scanf(%d,&jieshou);if((j=xunzhao(jieshou))==-1){printf(该进程编号不存在\n);return;}strcpy(zhucun[j].xiaoxi,zhucun[i].xiaoxi);}voidchakan()/*查看当前所有进程运行状况*/{inti;if(shumu==0)printf(当前没有进程运行\n);elseprintf(pcbid优先级大小消息\n);for(i=0;ishumu;i++){printf(%-8d,zhucun[i].pcbid);printf(%-10d,zhucun[i].priorityNum);printf(%-9d,zhucun[i].daxiao);printf(%s,zhucun[i].xiaoxi);printf(\n);}}voidShowMenu()/*显示屏幕菜单*/{printf(\n进程演示系统\n);printf(\n1.创建新进程2.查看运行进程\n);printf(\n3.查看所有进程4.终止所有进程\n);printf(\n5.进程之间通信6.退出系统\n);printf(请选择(1~6):);}voidmain()/*主程序*/{charc;clrscr();while(1){ShowMenu();fflush(stdin);//清空缓存c=getchar();switch(c){case'1':create();break;case'2':run();break;case'3':chakan();break;case'4':kill();break;case'5':tongxun();break;case'6':exit(0);}}}结果如下:实验二进程调度算法1.目的和要求通过程序设计语言来模拟处理机管理中几种常见进程调度算法。2.实验内容(1)时间片轮转调度算法:所有就绪队列按照先来先服务的原则,排成一个队列,每次调度时,分配CPU给队首进程,并令其执行一个时间片,当时间片用完时,停止该进程的执行,并将它送入就绪队列的末尾等待下一个时间片的到来,然后把CPU分配给下一个队首进程。(2)先来先服务调度算法:该算法总是从后备队列中选择一个或者多个最先进入该队列的作业,将其调入内存,为它们分配资源、创建进程,然后放入就绪队列中。3.实验环境PC、Windows、TC语言4.主体程序#includefstream.h#includeiostream.h#includestdio.h#includemath.h#includestring.h#includestdlib.henumSTATUS{RUN,READY,WAIT,FINISH};structPCBNode{intprocessID;//进程IDenumSTATUSstatus;intpriorityNum;//优先级intreqTime;//总的需要运行时间intremainTime;//剩下需要运行时intarriveTime;//进入就绪队列时intstartTime;//开始运行时间intfinishTime;//结束运行时间inttotalTime;//周转时间floatweightTotalTime;//带权周转时间};structQueueNode{intID;//进程IDstructQueueNode*next;//队列中下一个进程指针};structLinkQueue{structQueueNode*head;//队首};voidFcfs(LinkQueue&Q,int&totalTimeSum,int&weightTotalTimeSum,PCBNode*ProcessTable){totalTimeSum=0;weightTotalTimeSum=0;//平均周转时间structQueueNode*p;structQueueNode*q;p=Q.head-next;if(p!=NULL){ProcessTable[p-ID].startTime=ProcessTable[p-ID].arriveTime;ProcessTable[p-ID].finishTime=ProcessTable[p-ID].arriveTime+ProcessTable[p-ID].reqTime;}for(q=p-next;q!=NULL;q=q-next){if(ProcessTable[q-ID].arriveTimeProcessTable[p-ID].finishTime){ProcessTable[q-ID].startTime=ProcessTable[p-ID].finishTime;ProcessTable[q-ID].finishTime=ProcessTable[p-ID].finishTime+ProcessTable[q-ID].reqTime;}p=q;}for(q=Q.head-next;q!=NULL;q=q-next){ProcessTable[q-ID].totalTime=ProcessTable[q-ID].finishTime-ProcessTable[q-ID].arriveTime;ProcessTable[q-ID].weightTotalTime=ProcessTable[q-ID].totalTime/ProcessTable[q-ID].reqTime;totalTimeSum+=ProcessTable[q-ID].totalTime;weightTotalTimeSum+=ProcessTable[q-ID].weightTotalTime;}intt=0;for(q=Q.head-next;q!=NULL;q=q-next){cout***********************endl;while(tProcessTable[q-ID].finishTime){cout时刻t:进程q-ID活动endl;t++;}if(q-next!=NULL){cout时刻t:进程q-ID结束活动,开始下一个进程.endl;cout进程q-ID的周转时间为:ProcessTable[q-ID].totalTimeendl;cout进程q-ID的带权周转时间为:ProcessTable[q-ID].weightTotalTimeendlendl;}else{cout时刻t:进程q-ID结束活动.endlendl;cout进程q-ID的周转时间为:ProcessTable[q-ID].totalTimeendl;cout进程q-ID的带权周转时间为:ProcessTable[q-ID].weightTotalTimeendlendl;}}cout所有进程结束活动.endlendl;p=Q.head;for(q=p-next;q!=NULL;q=q-next){deletep;p=q;}}boolRR_Run(LinkQueue&Q,QueueNode*q,QueueNode*p,constintRound,int¤tTime,PCBNode*ProcessTable){if(ProcessTable[q-ID].remainTime=Round)//在此时间片内能够执行完毕之后退出进程调度{ProcessTable[q-ID].finishTime=currentTime+ProcessTable[q-ID].remainTime;ProcessTable[q-ID].totalTime+=ProcessTable[q-ID].remainTime;ProcessTable[q-ID].weightTotalTime=ProcessTable[q-ID].totalTime/ProcessTable[q-ID].reqTime;currentTime=ProcessTable[q-ID].finishTime;p-next=q-next;coutendl;cout进程q-ID
本文标题:报告封面
链接地址:https://www.777doc.com/doc-3126449 .html