- 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 进程调度算法的模拟一、设计目的1、通过编程实现进程调度算法的模拟,了解进程调度的过程,理解进程调度各方法的特点。二、设计要求1.用语言来实现对n个进程采用不同调度算法的进程调度。2.每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:(1)进程优先数ID,其中0为闲逛进程,用户进程的标识数为1,2,3…。(2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,优先数越大,优先级越高。(3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。(4)进程总共需要运行时间Alltime,利用随机函数产生。(5)进程状态,0:就绪态;1:运行态;2:阻塞态。(6)队列指针next,用来将多个进程控制块PCB链接为队列。3.优先数改变的原则(1)进程在就绪队列中每呆一个时间片,优先数增加1。(2)进程每运行一个时间片,优先数减3。4.在调度前,系统中拥有的进程数PCB_number由键盘输入,经初始化后,所有的进程控制块PCB链接成就绪队列。三、设计说明初始化PCB,输入进程信息FCFS算法,按照进程先后顺序输出SJS算法,按照ALLTIME从小到大依次输出优先级算法,按照优先从大到小输出,进程执行依次P-3,就绪队列中的进程P+1RR算法,按照时间片依次执行进程,ALLTIME—=4.1 FCFS模块1.1功能 对于先到达的进程优先分配CPU,按照先来先服务的原则依次执行各进程。1.2 数据结构typedef struct PCB{ int ID; //进程优先数,用于标示不同的进程 int Priority; //进程优先级 int CPUTime; //进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4int ALLTime; //进程总共需要运行时间Alltimeint Status; //用于表示进程状态,0:就绪态;1:运行态;2:阻塞态}PCB;1.3算法void FCFS(){Node *p=head-next;while(p!=NULL){cout执行进程endlp-data.ID;p=p-next;}coutendl;cout所有进程都执行完成endl;}2.SJF模块2.1功能先找到运行时间最短的程序,然后执行,再从剩余的程序中找到运行时间最短的在执行,依次每次都执行运行时间最短的,直到程序执行完毕。2..2 数据结构typedef struct PCB{ int ID; //进程优先数,用于标示不同的进程 int Priority; //进程优先级 int CPUTime; //进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4int ALLTime; //进程总共需要运行时间Alltimeint Status; //用于表示进程状态,0:就绪态;1:运行态;2:阻塞态}PCB;2.3算法void SJF(){Node *p;Node *pmin;while(head2-next!=NULL){pmin=head2-next;for(p=head2-next;p!=NULL;p=p-next){if(pmin-data.ALLTimep-data.ALLTime)pmin=p;}cout执行剩余区间长度最短的进程endlpmin-data.ID;for(p=head2;p!=NULL;p=p-next){if(p-next==pmin){p-next=p-next-next;free(pmin);}}}printf(\n);printf(所有进程都执行完成。\n\n);}3 SearchMaxPRI模块3.1功能按照优先级从高到低依次执行程序3.2 数据结构q0指向q的前一个进程,便于删除进程;p返回优先级最大进程;q用于遍历链表3.3算法void SearchMaxPRI(int m){Node *p=head-next;Node *q=head-next;Node *q0=head;while(q!=NULL){if(q-data.ALLTime==0){cout进程已执行完成endlq-data.ID;n--; q0-next=q0-next-next; free(q); q=q0-next;} else{ if(q-data.Priorityp-data.Priority)p=q;q0=q0-next;q=q-next;}}if(n0)action(p);} ?按照轮转的次序分配给每个程序一定的时间执行,执行完成后执行后
文档评论(0)