linux进程cpu时间片的大小,C语言实现时间片轮转法的cpu调度模拟

/*这是实验课题目,上课时写的,不是很完整,仅当留着做个纪念,有问题大家一起学习讨论。*/

/*废话不多说,直接上代码!*/

/*****时间片轮转法进行CPU调度算法********/

#include

#include

#include

#define N 10  //定义最大进程数

#define TIME 2//定义时间片大小

typedef struct pcb{

char id[10];//进程标识数

int arrivetime;//到达时间

int runtime;//进程已经占用的cpu时间

int needtime;//进程还需要的时间

char state[12];//进程运行状态:wait or runing

struct pcb *next;

}pcb,*PCB;

PCB head;//设置全局变量用来修改就绪队列

PCB tail;

int count=0;//记录就绪队列中进程数

void CreatProcess(){

//创建进程

PCB p,q;//进程的头尾指针都有

int num;//记录要创建的进程数

int i,j;

int arrive[N];

head=tail=(PCB)malloc(sizeof(pcb));

head->next=NULL;

p=head;

printf("输入你要创建的进程数:");

scanf("%d",&num);

count=num;

printf("********按照进程到达时间从小到大创建就绪队列******\n");

//初始对其排序来创建就绪队列

for(i=1;i<=num;i++){

p->next=(PCB)malloc(sizeof(pcb));

p=p->next;

tail=p;

printf("输入进程%d的标示符:",i);

scanf("%s",p->id);

printf("输入进程%d的到达时间:",i);

scanf("%d",&p->arrivetime);

printf("输入进程%d已占用的cpu时间:",i);

scanf("%d",&p->runtime);

printf("输入进程%d还需要的cpu时间:",i);

scanf("%d",&p->needtime);

printf("输入进程%d当前状态:(run 或者wait):",i);

scanf("%s",p->state);

}

tail->next=p->next=NULL;

}

void RR_RunProcess(){

//运行进程,简单轮转法Round Robin

PCB p,q,temp;

p=head->next;

while(1){

if(head->next==NULL)

{

printf("此时就绪队列中已无进程!\n");

return ;

}

else

{

while(p){

if((p->needtime>0)&&!(strcmp(p->state,"wait"))){

printf("进程%s开始,\n",p->id );

strcpy(p->state,"run");

p->runtime+=TIME;

p->needtime-=TIME;

if(p->needtime<0)

p->needtime=0;

}

temp=p;//把该时间片内运行完的进程存到临时temp中

//把temp接到链表尾部,销毁P;

if(temp->needtime>0){//把该时间片内运行完的进程接到就绪队列的尾部

if(count>1){

head->next=temp->next;

tail->next=temp;

tail=tail->next;

strcpy(tail->state,"wait");

tail->next=NULL;

}

else if(count==1){//当只有一个进程等待时,分开讨论

head->next=temp;

tail=temp;

strcpy(tail->state,"wait");

tail->next=NULL;

}

}

if(temp->needtime==0){//销毁就绪队列中已经结束的进程

count--;//此时就绪队列中进程数减1

printf("进程%s结束.\n",p->id);

head->next=temp->next;

free(temp);//撤销就绪队列中已经结束的进程

}

p=head->next;

}

}

}

}

void main(){

printf("**************进程的初始状态!**************\n");

CreatProcess();

printf("*******************************************\n\t\t程序运行结果如下:\n\n");

printf("*******************************************\n");

RR_RunProcess();//简单轮转法Round Robin

}

运行结果如下附件:

0c754d60200929259f1ef6658b30f19e.png

将C语言梳理一下,分布在以下10个章节中:

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值