- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
时间片轮转调度算法 RR
#includestdio.h#includestdlib.h#define MAX 5 //进程数量#define RR 1 //时间片大小 /*时间片轮转算法*/struct pro{int num;int arriveTime;int burst;int rt; //记录进程被运行的次数struct pro *next;};int TOTALTIME; //记录所有进程的总时间//函数声明struct pro* creatList();void insert(struct pro *head,struct pro *s); struct pro* searchByAT(struct pro *head,int AT); void del(struct pro* p);int getCount(struct pro *head,int time);struct pro* searchEnd(struct pro *head);void move(struct pro *headF,struct pro *headT,int n);struct pro* creatList() //创建链表,按照进程的到达时间排列,记录所有进程的信息{struct pro* head=(struct pro*)malloc(sizeof(struct pro));head-next=NULL; struct pro* s;int i;TOTALTIME=0;for(i=0;iMAX;i++){ s=(struct pro*)malloc(sizeof(struct pro)); printf(请输入进程名:\n); scanf(%d,(s-num)); printf(请输入到达时间:\n); scanf(%d,(s-arriveTime)); printf(请输入运行时间:\n); scanf(%d,(s-burst)); TOTALTIME+=s-burst; //计算总时间 s-rt=1; //rt的初始值为1 s-next=NULL; insert(head,s);}return head; //到达队列中的进程按照其到达时间的先后顺序排列}void insert(struct pro *head,struct pro *s) //插入节点{struct pro *p=searchByAT(head,s-arriveTime);s-next=p-next;p-next=s;return;}struct pro* searchByAT(struct pro *head,int AT) //查找第一个到达时间大于等于AT的节点,返回其前一个指针{struct pro *p,*q;p=head;q=head-next;while(q!=NULLq-arriveTime=AT){ p=q; q=q-next;}return p;}void del(struct pro* p) //删除p的下一个节点{struct pro *tmp;tmp=p-next;p-next=tmp-next;free(tmp);return;}int getCount(struct pro *head,int time) //察看在time之前到达但未移动到运行队列的进程数量{int count=0;struct pro *s,*t;s=head;t=s-next;while(t!=NULLt-arriveTime=time){ s=t; t=t-next; count++; //count记录当前时刻到达的进程数}return count;}struct pro* searchEnd(struct pro *head) //查找并返回循坏队列的尾节点的前一个节点{struct pro *p,*q;p=head;q=head-next;while(q-next!=head){ p=q; q=q-next;}return p;}void move(struct pro *headF,struct pro *headT,int n) //将headF后的n个节点移动到循环队列headT中{struct pro *r,*s,*t;s=headF;t=s-next;r=t; //r记录要移动的第一个节点while(n1){ t=t-next; n--;}s-next=t-next; //以上完成从原队列中摘除相关节点,r,t分别为第一个和最后一个节点 s=searchEnd(headT);t-next=s-next;s-next=r;}void run(struct pro *head){int tim
文档评论(0)