- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《操作系统》课程实验报告实验名称:时间片轮转调度算法班级: **************** 学号: ************* 姓名:************** 指导老师: *************** 成绩:实验目的:1、测试数据可以随即输入或从文件中读入。2、必须要考虑到进程的到达时间3、最终能够计算每一个进程的周转时间的带权周转时间。4、时间片大小可以不为1,但至少实现时间片大小为1的RR调度。二、实验内容:模拟实现时间片轮转调度算法,具体如下:设置进程体:进程名,进程的到达时间,服务时间,,进程状态(W——等待,R——运行,F——完成),进程间的链接指针进程初始化:由用户输入进程名、服务时间进行初始化,同时,初始化进程的状态为W。显示函数:在进程调度前、调度中和调度后进行显示。排序函数:对就绪状态的进程按照进入就绪队列的时间排序,新到达的进行应优先于刚刚执行过的进程进入就绪队列的队尾。调度函数:每次从就绪队列队首调度优一个进程执行,状态变化。并在执行一个时间片后化,服务时间变化,状态变化。当服务时间为0时,状态变为F。删除函数:撤销状态为F的进行。三、实验代码#includestdio.h#includestring.h#includestdlib.htypedefstruct PCB2{ char name[10];//进程名int runtime;//要求运行时间intfrist;//定义优先数 char zhuangtai; //定义状态,R为就绪,F为完成};structshijian {//定义时间片的结构体char name; //定义进程名intdaodatime;// 到达时间intfuwutime; //服务时间intshengyutime;//剩余时间char *state;//所处状态structshijian *next;};structshijian *time(){inta,i;structshijian *head, *rear,*p,*q,*t;//定义队首、队尾、P是队尾指针、Q是队首指针和执行时间head=rear=NULL;//初始化队首和队尾为空printf(请输入进程数目:);scanf(%d,a);for(i=0;ia;i++){p=(structshijian*)malloc(sizeof(structshijian)); //初始化一个空间给进程进入printf(输入第%d个进程的名字、到达时间、服务时间:\n,i+1);scanf(%s%d%d,p-name,p-daodatime,p-fuwutime);p-shengyutime=p-fuwutime; p-state=就绪; if(rear==NULL) //当输入结束时,把P的数据放到队首,以便执行下一步{head=p;p-next=NULL;rear=p;}else //否则执行时间就为空,队首变成Q{t=NULL; q=head;while(qq-daodatimep-daodatime)//当Q和Q的到达时间小于P的到达时间时,把执行时间给Q{t=q; q=q-next;}if(q==head) //而当Q是队首时,则下一个队首变成P,以便每个进程都能够得到时间片{p-next=head;head=p;}else if(t==rear) //当执行时间片到达队尾时(执行完时),返回给队首P{rear-next=p;p-next=NULL;rear=p;}else //否则给队首P占用执行时间,P执行完后到Q{t-next=p;p-next=q;}}}return head;//返回队首}void output(structshijian *head)//定义输出函数{structshijian *p,*t,*r;intnum;printf(请输入时间片:);scanf(%d,num);while(head!=NULL) //当队首不为空时,把P给队首{r=p=head;while(p!=NULL) //把执行时间给队首{t=head; p-shengyutime=p-shengyutime-num; //P的剩余时间=剩余时间-时间片 p-state=运行; //状态变成运行态 if(p-shengyutime0) //当P运行完,即剩余时间小于0时,仍然把它当做0处理p-shengyutime=0;printf(\n************程序开始运行*****************\n);prin
原创力文档


文档评论(0)