时间片调度算法
来源:互联网 发布:死而有知 其几何离 编辑:程序博客网 时间:2024/04/29 03:29
实验:进程调度算法——时间片轮转算法
1.实验设计说明
用时间片轮转算法模拟单处理机调度。
(1) 建立一个进程控制块PCB来代表。PCB包括:进程名、到达时间、服务时间,状态,和指向本身结构体的指针。
进程状态分为运行(R)和成功(C)
(2) 为每个进程任意确定一个要求服务时间和到达时间。
(3) 按照进队连接成一个队列,再设链表的头指针head.
(4)执行处理机调度时,开始选择对首的第一个进程运行。
(5)(a)让这个进程的剩余时间减去一个时间片;
(b)时刻加一,并且状态为R
(c)让已经运行的时间加一。
(6) 进程执行一次后,若该进程的运行时间为零或小于零,则删除该结点,并将该进程的状态置为C;反之,继续运行对首的第一个进程。
(7) 诺链表不为空,继续执行(5)(6),直至链表为空。
实验代码
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
typedefint datatype;
typedefstruct pcb /*进程控制块定义*/
{
char pname[5]; /*进程名*/
int arrivetime; /*到达时间*/
int runtime; /*服务时间*/
char state; /*进程状态*/
struct pcb *next;/*联接指针*/
}PCB;
floatx;
PCB*create()//尾插入法建立链表
{
PCB *head,*r,*p;
int i;
head=r=NULL;
printf("请输入进程的总数:");
scanf("%f",&x);
for(i=0;i<x;i++)
{
p=(PCB*)malloc(sizeof(PCB));
printf("进程名 到达时间 要求服务的时间\n");
scanf("%s%d%d",&p->pname,&p->arrivetime,&p->runtime);
p->state='W';
if(head==NULL)//链表为空
{
head=p;
p->next=NULL;
r=p;
}
else {
p->next=r->next;
r->next=p;
}
r=p;
}
if(r) r->next=NULL;
return head;
}
voidRun(PCB*head)
{
PCB *p,*r,*t,*s,*f;
int h,n=0;
static int d;
float m=0,k=0;
printf("时间片大小为:");
scanf("%d",&h);
p=head;
t=head;
f=head;
while(t->next)
{
t=t->next;
}
d=t->arrivetime;
while(head!=NULL)//链表不为空
{
p->runtime=p->runtime-h;
n++;
p->state='R';
if(p->runtime<=0)
{
p->runtime=0;
p->state='C';
m=m+n-p->arrivetime;
k=k+m/p->runtime;
}
printf("time\tpname\tarrivetime\truntime\tstate\t\n");
printf("%d\t%s\t%d\t%d\t%c\n",n,p->pname,p->arrivetime,p->runtime,p->state);
if(p->runtime==0)/*判断是否删除结点*/
{
s=p;
head=p->next;
p=head;
free(s);
}
else
{
head=p->next;
if(n<d)
{
r=head;
while(r)
{
if(n==r->arrivetime)
{
p->next=r->next;
r->next=p;
break;
}
else r=r->next;
}
}
else
{
while(f->next)
f=f->next;
p->next=f->next;
f->next=p;
}
p=head;
}
}
printf("平均周转时间为:%f\n",m/x);
printf("平均带权周转时间为:%f",k/x);
}
intmain()
{
PCB *head;
head=create();
Run(head);
return 0;
}
- 时间片调度算法
- 时间片轮转调度算法
- 时间片轮转调度算法
- 内核调度-时间片算法
- 时间片轮转调度算法
- 时间片轮转调度算法
- 进程调度:时间片轮转调度算法
- 进程调度算法--时间片轮转算法
- 时间片轮转进程调度算法
- 进程调度-时间片轮转算法
- 操作系统 时间片轮转调度算法
- 进程调度算法–时间片轮转调度算法
- 进程调度之时间片轮转调度算法(实验三)
- cpu优先级调度算法和时间片算法模拟程序
- 时间片轮转算法和优先级调度算法
- 时间片轮转调度算法(C++代码)
- UCOS 时间片轮转调度算法详解 (1)
- linux内核调度算法--CPU时间片如何分配
- linux【Shell脚本】逐行处理文本文件
- Hadoop之MapReduce的程序开发(二)---WordCount
- 文本相似性检测---词语权重计算
- Android中getX和getRawX和event.getX还有getTop的区别
- shell 通过IP 掩码 获取网络号
- 时间片调度算法
- 手游的巨头时代,中小厂商该何去何从?
- 204. Count Primes
- 基于vue2.0+vuex+localStorage开发的本地记事本
- Quartz时间表达式
- Mac下如何搭建Tomcat服务器模拟数据请求
- JAX-WS webservice报超时错误的解决
- Bootstrap学习-图片
- PAT甲级1061. Dating (20)