时间片轮转算法.docx

上传人:数据九部 文档编号:9972073 上传时间:2021-04-07 格式:DOCX 页数:12 大小:310.52KB
返回 下载 相关 举报
时间片轮转算法.docx_第1页
第1页 / 共12页
时间片轮转算法.docx_第2页
第2页 / 共12页
时间片轮转算法.docx_第3页
第3页 / 共12页
时间片轮转算法.docx_第4页
第4页 / 共12页
时间片轮转算法.docx_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《时间片轮转算法.docx》由会员分享,可在线阅读,更多相关《时间片轮转算法.docx(12页珍藏版)》请在三一文库上搜索。

1、 操作系统 A 课程综合性实验报告开课实验室:基础七2011年 5 月 29 日实验题目一、实验目的进程调度算法程序设计通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度 过程、调度算法的理解。二、设备与环境1. 硬件设备:PC 机一台2. 软件环境:安装 Windows 操作系统或者 Linux 操作系统,并安装相关的程序开发环境, 如 C C+Java等编程语言环境。三、实验内容(1) 用 C 语言(或其它语言,如 Java)实现对 N 个进程采用某种进程调度算法(如动态优先权 调度)的调度。(2) 每个用来标识进程的进程控制块 PCB 可用结构来描述,包括以

2、下字段:进程标识数 ID 。进程优先数 PRIORITY ,并规定优先数越大的进程,其优先权越高。进程已占用 CPU 时间 CPUTIME 。进程还需占用的 CPU 时间 ALLTIME 。当进程运行完毕时,ALLTIME进程的阻塞时间 STARTBLOCK ,表示当进程再运行 STARTBLOCK 入阻塞状态。变为 0。个时间片后,进程将进进程被阻塞的时间 BLOCKTIME ,表示已阻塞的进程再等待 BLOCKTIME 转换成就绪状态。进程状态 STATE 。队列指针 NEXT ,用来将 PCB 排成队列。(3)优先数改变的原则:进程在就绪队列中呆一个时间片,优先数增加 1。进程每运行一个

3、时间片,优先数减 3。个时间片后,将(4) 为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包 括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。(5) 分析程序运行的结果,谈一下自己的认识。华北科技学院计算机系综合性实验报告四、实验结果及分析1.实验设计说明用时间片轮转算法模拟单处理机调度。(1) 建立一个进程控制块 PCB 来代表。PCB 包括:进程名、到达时间、运行时间和进程后的 状态。进程状态分为就绪(R)和删除(C)。(2) 为每个进程任意确定一个要求运行时间和到达时间。(3) 按照进程到达的先后顺序排成一个队列。再设一个指针指向队首和队尾。(

4、4) 执行处理机调度时,开始选择对首的第一个进程运行。(5) 执行: a)输出当前运行进程的名字;b)运行时间减去时间片的大小。(6) 进程执行一次后,若该进程的剩余运行时间为零,则删除队首,并将该进程的状态置为 C;若不为空,则将向后找位置插入。继续在运行队首的进程。(7) 若进程队列不空,则重复上述的(5)和(6)步骤直到所有进程都运行完为止。在所设计的调度程序中,要求包含显示或打印语句。以便显示或打印每次选中进程的名称及 运行一次后队列的变化情况。2.实验代码/*时间片轮转调度算法*/#include#include#includetypedef struct pcb定义/进程控制块 c

5、har pname5; /进程名int arrivetime;/到达时间int runtime; /运行时间char state; /运行后的状态struct pcb *next;PCB;typedef struct封装/头结点,指针分别指向队头和队尾 PCB *front,*rear;queue;queue *init()进程/队列置空 queue *head;head=(queue*)malloc(sizeof(queue);head-front=NULL;head-rear=NULL;return head;第 1 页华北科技学院计算机系综合性实验报告int empty(queue *h

6、ead)检验/进程队列是否为空 return(head-front? 0:1);queue *append(queue *head,char c5,int a,int 进r,char程队列s)入队/,往后插入 PCB *p;p=(PCB*)malloc(sizeof(PCB);strcpy(p-pname,c);p-arrivetime=a;p-runtime=r;p-state=s;p-next=NULL;if(empty(head) head-front=head-rear=p;else head-rear-next=p;head-rear=p;return head;queue *cre

7、at(queue *head)创建/进程队列 char c5;char s=R;int a,r,i,n;printf(请输入进程的数量:);scanf(%d,&n);for(i=1;ifront;if(!p) printf(时间片轮转调度队列为空!n);while(p) printf(pname=%s arrivetime=%dstate= %c,p-pname,p-arrivetime,p-runtime,p-state);printf(n);p=p-next;void RR(queue *head,int 时q)间/片轮转调度算法的实现 int t=head-front-arrivetim

8、e,lt=head-rear-arrivetime;第 2 页runtime=%d华北科技学院计算机系综合性实验报告if(head-front-runtimefront-runtime;elset=t+q;while(!empty(head)进/程队列不为空才可调度 PCB *p1,*p2;printf(n运行的时刻 运行的进程 运行后的状态n);while(tfront;printf( %2d %s,t,p1-pname);p1-runtime=p1-runtime-q;if(p1-runtimestate=C;printf( %cn,p1-state);head-front=p1-next

9、;free(p1);else /2.运行时间大于 0,向后找位置插入 printf( %cn,p1-state);p2=p1-next;while(p2-next&p2-arrivetime!=t) p2=p2-next;/此时无新进入队列的进程时 ,有两种情况 :1.不用找位置往后插入 ,队首不变,不做操作 2.找位置往后插入if(p2-arrivetime!=t) PCB *p3=p1,*p4;while(p3-next&p3-arrivetimenext;if(p3-arrivetimet) if(p4!=p1) /p1插在p4 后,头为 p1-next head-front=p1-ne

10、xt;p1-next=p4-next;p4-next=p1;else 不/做操作p4=p3=p2=NULL;elsep4=p3=p2=NULL;/此时有新进入队列的进程时:p1插在新进入队列的进程 p2 后,队首为 p1-next else head-front=p1-next;p1-next=p2-next;p2-next=p1;第 3 页华北科技学院计算机系综合性实验报告if(head-front-runtimefront-runtime;elset=t+q;while(t=lt)第/二种情况:当前运行的时间大于最后一个进程到达的时间做以下操作 p1=head-front;printf(

11、%2d %s,t,p1-pname);p1-runtime=p1-runtime-q;if(p1-runtimestate=C;printf( %cn,p1-state);head-front=p1-next;free(p1);else /2.运行时间大于 0,直接插在队尾 printf( %cn,p1-state);if(!p1-next) 若原/队列只有一个进程,不必往队尾插head-front=p1;else 若/原队列有多个进程 head-front=p1-next;head-rear-next=p1;head-rear=p1;p1-next=NULL;if(empty(head)/时

12、刻变化,队列为空时不做时刻变化return;else if(head-front-runtimefront-runtime;elset=t+q;void main() queue *head;int q;head=init();head=creat(head);printf(n您输入的时间片轮转进程队列为:n);print(head);printf(n请输入时间片轮转调度的时间片为:);scanf(%d,&q);RR(head,q); 时/间片轮转调度第 4 页华北科技学院计算机系综合性实验报告3.实验结果输入进程的数量,每个进程的名称、到达时间和服务时间,以及时间片:得到的结果为:第 5 页

13、华北科技学院计算机系综合性实验报告4.实验结果分析RR 算法:每次调度时,把CPU 分配给队首进程,并且令其执行一个时间片,时间片的大小 从几个 ms 到几百 ms 。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便 依据此信号来停止该进程的执行;并且把它送往就绪队列的队尾;然后,再把处理剂分配给就绪 队列中的新队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一 个给定时间内均能获得一时间片的处理机执行时间。换言之,系统能在给定的时间内相应所有用 户的请求。成功实现了 RR 轮转调度算法,验证了算法实现程序的正确性。完成了实验要求的输入。 5.实验心得通过

14、这次课程设计,我的收获颇丰。课程设计之初我对时间片轮转法基本上没有什么深入的 研究,只是通过课堂的讲解大致了解其思想。经过这将近两周的学习后,我对时间片轮转算法的 理解有了更进一步的提高,并通过自己设计程序,自己试验,自己调试对算法的内容更进一步的 深刻认识。在课程设计初期,我仍处于懵懂阶段,老师让我们去图书馆自行查阅资料。在这期间,我不 仅重新学习了时间片轮转算法的相关知识,还在图书馆找到一些别人书写的程序段,这对我了解 程序大致框架起了很大的帮助。完成程序的调试工作后,我掌握了 RR 轮转调度算法的实质,对于进程调度算法有了更为深 入的理解和认识,收获很大。评定项目算法正确程序结构合理语法、语义正确实验结果正确A B C D评定项目界面美观,布局合理操作熟练解析完整文字流畅A B C D教师评价报告规范其他:题解正确评价教师签名:年 月 日第 6 页

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1