时间片轮转调度算法_第1页
时间片轮转调度算法_第2页
时间片轮转调度算法_第3页
时间片轮转调度算法_第4页
时间片轮转调度算法_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统课程实验报告实验名称:时间片轮转调度算法班 级: * 学 号: * 姓 名:* 指导老师: * 成 绩: 一、 实验目的:1、测试数据可以随即输入或从文件中读入。2、必须要考虑到进程的到达时间3、最终能够计算每一个进程的周转时间的带权周转时间。4、时间片大小可以不为1,但至少实现时间片大小为1的RR调度。二、实验内容:模拟实现时间片轮转调度算法,具体如下:设置进程体:进程名,进程的到达时间,服务时间,进程状态(W等待,R运行,F完成),进程间的链接指针进程初始化:由用户输入进程名、服务时间进行初始化,同时,初始化进程的状态为W。显示函数:在进程调度前、调度中和调度后进行显示。排序函数:

2、对就绪状态的进程按照进入就绪队列的时间排序,新到达的进行应优先于刚刚执行过的进程进入就绪队列的队尾。调度函数:每次从就绪队列队首调度优一个进程执行,状态变化。并在执行一个时间片后化,服务时间变化,状态变化。当服务时间为0时,状态变为F。删除函数:撤销状态为F的进行。三、实验代码#include#include#includetypedefstruct PCB2 char name10;/进程名int runtime;/要求运行时间intfrist;/定义优先数 char zhuangtai; /定义状态,R为就绪,F为完成;structshijian /定义时间片的结构体char name;

3、/定义进程名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;iname,&p-daodatime,&p-fuwutime);p-shengyutime

4、=p-fuwutime; p-state=就绪; if(rear=NULL) /当输入结束时,把P的数据放到队首,以便执行下一步head=p;p-next=NULL;rear=p;else /否则执行时间就为空,队首变成Qt=NULL; q=head;while(q&q-daodatimedaodatime)/当Q和Q的到达时间小于P的到达时间时,把执行时间给Qt=q; q=q-next;if(q=head) /而当Q是队首时,则下一个队首变成P,以便每个进程都能够得到时间片p-next=head;head=p;else if(t=rear) /当执行时间片到达队尾时(执行完时),返回给队首P

5、rear-next=p;p-next=NULL;rear=p;else /否则给队首P占用执行时间,P执行完后到Qt-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

6、的剩余时间=剩余时间-时间片 p-state=运行; /状态变成运行态 if(p-shengyutimeshengyutime=0;printf(n*程序开始运行*n);printf(进程到达时间服务时间剩余时间当前状态n);while(t!=NULL) /时间不为空时,输出当前进程的信息,并把时间片交给下一个进程printf(%2c%8d%8d%14d%10sn,t-name,t-daodatime,t-fuwutime,t-shengyutime,t-state); t=t-next;getchar(); /按住回车键观看if(p-shengyutime=0)/当队首的剩余时间为0时,先把

7、队首改成P的下一个,然后释放内存,删除队首节点if(p=head)head=p-next;free(p); p=head;else /否则返回执行,把队尾的下一个指针变成P的下一个指针,队尾的位置移动到队首r-next=p-next; p=r-next; r=p;else /否则把队首的位置给队尾,把队首的状态显示为“就绪”状态r=p;p-state=就绪; p=p-next; void main() int N;int number; char Tishikuang;/提示框doprintf( *n);printf(*嵌入式软件14-01班*51*杨霖*n);printf( * 输入 1时间

8、片轮转法 *n);printf( * 输入 0退出该程序 *n);printf( *n);printf(n注:请根据自己的需求选择相应的操作数:n);scanf(%d,&number);/*提示输入字母,用switch语句存入到case中,最后增加提示框是否继续*/switch(number) case 0:break;case 1:printf(n您选择的是“时间片轮转法项目”nn);structshijian *head; /定义时间片的队首结构体 head=time(); /队首执行的时间 output(head) ;/输出函数break; printf(n是否继续操作(y/n) ?);fflush(stdin);Tishikuang=getchar();while(Tishi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论