2-时间片轮转RR算法.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2-时间片轮转RR算法

操作系统实验报告 一、实验题目 时间片轮转算法(RR算法) 二、实验目的 模拟实现时间片轮转调度算法。 理解时间轮转算法的处理机调度的基本思想。 三、实验要求 1.初始化函数,输入各个进程的到达时间以及需要的运行的时间。 2.设置时间片大小,实现进程有等待到运行状态的转换。 3.进程运行时间结束后从进程列表中删除该进程。 四、实验内容 在时间片调度算法的模拟实现中,时间片就是分配给进程运行的一段时间。在轮转法中,系统将所有的可运行(即就绪)进程按先来先服务的原则,排成一个队列,每次调度时把CPU分配给队首进程,并令其执行一个时间片。当某进程执行的时间片用完时,系统发出信号,通知调度程序,调度程序便据此信号来停止该进程的执行,并将刚运行的进程送到运行队列的末尾,等待下一次执行;然后,把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证运行队列中的所有进程,在一个给定的时间内,均能获得一时间片的处理机执行时间。 本实验设计一个有N个进程并发的进程调度程序,采用时间片轮转算法。 每一个进程用一个进程控制块PCB表示。PCB包含信息有:进程名name,进程号id,进程状态state,进程所需运行时间need_time,进程运行时间run_time。进程运行时间以时间片为单位进行计算。(程序中以按任意键表示运行一次CPU时间片)每个进程的状态有就绪W,运行R,和完成F(撤销进程)。就绪的进程获得CPU后只能运行一个时间片,运行完运行时间run_time+1。如果运行一个时间片后,进程的run_time等于need_time(即已经达到所需运行时间),则撤销该进程并提示,如果还未达到,则将其放到队尾,进入就绪状态等待下一次时间片分配。每一次调度程序都打印一次运行情况,包括:运行的进程,就绪队列的进程,已经所有进程的PCB(不包括已经撤销的进程)。 q = (PCB*)malloc(sizeof(PCB)),清屏语句的使用system(“cls”);等。然而,实验的运行结果还不是很完美,每个进程在最后一个时间片的运行过程中,进程列表的更新总是修改错误。不过在在本次试验中学到了不少东西,一点点的在进步。 附录: #include stdio.h #include stdlib.h #include conio.h #include windows.h static int id = 0; int process_num; int current_process; struct pcb {char name[20]; int id; char state; int need_time; int run_time; struct pcb *next; }*p, *q, *first_pcb = NULL; typedef struct pcb PCB; /* 排序输出各个进程PCB */ void printSort() { int i; q = first_pcb; for(i = 0; i process_num;) { if(i == q - id) { printf(|%s\t\t|%d\t\t|%c\t\t|%d\t\t|%d\n, q - name, q - id, q - state, q - need_time, q - run_time); i++; q = first_pcb; } else { q = q - next; if(q == NULL) { q = first_pcb; i++; } } } } /* 调度一次PCB并显示 */ void showPCB() { //int i; first_pcb - run_time++; first_pcb - state = r; /* 进程执行完毕,将其清除出链表 */ if((first_pcb - run_time) == (first_pcb - need_time)) { current_process--; printf(进程%s已经运行完毕, first_pcb - name); system(pause); first_p

您可能关注的文档

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档