今天给大家带来的是关于C 模拟进程调度时间片轮转算法,大家可以看一下,评论一下哪些地方有不足之处或者哪里有问题
#include"stdio.h"
#include"stdlib.h"
#include<iostream>
using namespace std;
#define ready 1
#define run 2
struct PCB
{
char name[10];
int priority; /*进程的优先级*/
int state; /*进程的状态:可以有运行和就绪*/
int needtime; /*进程需要运行的时间*/
int runtime;
int time; /*进程已运行的时间*/
struct pcb *next; /*指向下一个进程PCB的指针*/
};
typedef struct pcb PCB;
PCB *head=NULL;
void create() /*此函数用于创建进程队列*/
{
PCB *p, *q;
int n,i;
printf("请输入要创建的进程的数量:");
scanf("%d",&n);
head=(PCB *)malloc(sizeof(PCB));
p=head;
for(i=1;i<=n;i )
{
q=(PCB*)malloc(sizeof(PCB));
p->next=q;
p=q;
printf(" 请输入 NO.%d 个进程的标识符:",i);
scanf("%s",&p->name);
printf("请输入进程的优先级:");
scanf("%d",&p->priority);
printf("请输入进程所需的时间:");
scanf("%d",&p->needtime);
p->state=ready;
p->runtime=0;
p->next=NULL;
}
}
void lunzhuan () /*时间片轮转*/
{
PCB *p,*q,*r;
int time;
printf("请输入时间片大小: ");
scanf("%d",&time);
for(p=head->next;p->next;p=p->next)
r=p;
while(head->next)
{
p=head->next; /*选出就绪队列的第一个进程*/
p->state=run;
printf(" 正在运行的进程是: "); /*输出该进程的信息*/
printf("%s ",p->name);
printf("state: 运行 ");
printf("needtime: %d ",p->needtime);
printf("runtime: %d ",p->needtime);
q=head->next;
if(p->needtime-p->runtime<=p->time) /*时间片内,进程运行结束否*/
{
p->runtime=p->needtime;
printf("runtime:%d ",p->runtime);
}
else
{
p->runtime=p->runtime p->time;
printf("runtime:%d ",p->runtime);
}
q=p->next;
if(q!=NULL) /*输出就绪队列中的进程信息*/
printf("就绪队列是: ");
else
printf("就绪队列为空! ");
while(q)
{
printf("%s ",q->name);
printf("state: 就绪 ");
printf("needtime:%d ",q->needtime);
printf("runtime:%d ",q->runtime);
printf(" ");
q=q->next;
}
if(p->runtime==p->needtime)
{
delete(head,p);
}
else
{
head->next=p->next;
r->next=p;
r=p;
r->state=ready;
r->next=NULL;
}
}
}
void main()
{
cout<<"开始创建进程:"<<endl;
create();
if(head==NULL || head->next==NULL)
printf("就绪队列没有进程,请先创建进程 ");
else
lunzhuan();
}
想要一起学习C 的可以加裙248-894-430,群内有各种资料满足大家
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至123456@qq.com 举报,一经查实,本站将立刻删除。