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

下载本文档

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

文档简介

1、计算机操作系统1实验:进程调度算法一一时间片轮转算法 实验:进程调度算法一一时间片轮转算法实验设计说明用时间片轮转算法模拟单处理机调度。(1)建立一个进程控制块PCB来代表。PCB包括:进程名、到达时间、 运行时间和进程后的状态。进程状态分为就绪(R)和删除(C)。(2)为每个进程任意确定一个要求运行时间和到达时间。(3)按照进程到达的先后顺序排成一个队列。再设一个指针指向队首和 队尾。(4)执行处理机调度时,开始选择对首的第一个进程运行。(5)执行:a)输出当前运行进程的名字;b)运行时间减去时间片的大小。(6)进程执行一次后,若该进程的剩余运行时间为零,则删除队首,并 将该进程的状态置为C

2、;若不为空,则将向后找位置插入。继续在 运行队首的进程。(7)若进程队列不空,则重复上述的(5)和(6)步骤直到所有进程都 运行完为止。在所设计的调度程序中,要求包含显示或打印语句。以便显示或打印每次选 中进程的名称及运行一次后队列的变化情况。实验代码#include#include#includetypedef struct pcb 定义进程控制块 char pname5;进程名int arrivetime; 到达时间int runtime;运行时间char state;运行后的状态struct pcb *next;PCB;typedef struct /封装头结点,指针分别指向队头和队尾

3、PCB *front,*rear;queue;queue *init() 进程队列置空 queue *head;head=(queue*)malloc(sizeof(queue);head-front=NULL;head-rear=NULL;return head;int empty(queue *head) /检验进程队列是否为空 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

4、(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 *creat(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(p

5、name=%s arrivetime=%d runtime=%d state= %c,p-pname,p-arrivetime,p-runtime,p-state);printf(n);p=p-next;void RR(queue *head,int q) 时间片轮转调度算法的实现int n=0;static int m;PCB *p,*s,*t,*r,*h;m=head-rear-arrivetime;p=head-front;while(!empty(head)p-runtime=p-runtime-q;n+;p-state=R;if(p-runtimeruntime=0;p-state=

6、C;printf(运算时刻七运行的进程七运行后的状态n);printf(%d t%s t%cn,n,p-pname,p-state);if(p-runtime=0)s=p;head-front=p-next;p=head-front;free(s);elsehead-front=p-next;if(nfront;while(r)if(n=r-arrivetime)p-next=r-next;r-next=p;break;else r=r-next;elsehead=append(head,p-pname,p-arrivetime,p-runtime,p-stat e);p=head-front

7、;int main() queue *head;int q;head=init();head=creat(head);printf(n您输入的时间片轮转进程队列为:n);print(head);printf(n请输入时间片轮转调度的时间片为:); scanf(%d,&q);RR(head,q); 时间片轮转调度实验结果输入进程的数量,每个进程的名称、到达时间和服务时间,以及时间片:RRRRRstate =state =state =state =state =0 4 1 3 2 5 3 2 4 4 A 可.可 B 司可 C 可司 D 可.可 E 可可 .1.1 .1.1 .1.1 .1.1 .

8、1.1 名曹名甚名其名曹名曹 程达畚达蓄达塞达塞达务 S进蘸进反进斛进蘸进蘸 3B-1,- - - 1- - - 1- - - 1- - - 1- - - 1- - - 1- - - 1- - - 1- - - 1- - - 1- - - 1- - - 1- - - 1- - - 1- - hr 二.1二.-1- - hl-二.1二.1二.-1- - hl-二.1二.1二.1- - hl-二.1二.1二.1二 r 喽进fifila进fifila进fifila进fifi 业个个个个个个个个个个个个个个个 壬 111222333444555 进 wmwwwwwww 1A1A1A1A1A1A1A1A

9、1A1A1A1A1A1A1A1A 请请请请请请请请请请请请请请请请您输入的时间片轮转进程队列为: pname=A pname=B pname=C pname=D pname=Eruntime=4 runtime=3 runtime=5 runtime=2runtime=4arriuetime=0 airiuet ime=l arriuetime=2 arriuetime=3 arriuetime=4的时间片为H请输入时恒得到的结果为:实验结果分析RR算法:每次调度时,把CPU分配给队首进程,并且令其执行一个时间片, 时间片的大小从几个ms到几百ms。当执行的时间片用完时,由一个计时器发出 时钟中断请求,调度程序便依据此信号来停止该进程的执行;并且把它送往就绪 队列的队尾;然后,再把处理剂分配给就绪队列中的新队首进程,同时也让它执 行

温馨提示

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

评论

0/150

提交评论