优先级调度算法c语言实现,进程调度--动态优先数法(C语言实现)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

ready=s;

}

}

//优先数创建初始PCB信息

void create1(char alg)

{

PCB *p;

int i,time;

char na[10];

ready=NULL; //就绪队列头文件

finish=NULL; //完成队列头文件

run=NULL; //运行队列头文件

printf("输入进程号和运行时间:\n"); //输入进程标志和所需时间创建PCB

for(i=1;i<=N;i++)

{

p=(PCB *)malloc(sizeof(PCB));

scanf("%s",na);

scanf("%d",&time);

strcpy(p->name,na);

p->cputime=0;

p->needtime=time;

p->state='w';

p->prio=50-time;

if(ready!=NULL) //就绪队列不空,调用插入函数插入

insert1(p);

else

{

p->next=ready; //创建就绪队列的第一个PCB

ready=p;

}

}

//clrscr();

printf(" 优先数算法输出信息:\n");

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

prt(alg); //输出进程PCB信息

run=ready; //将就绪队列的第一个进程投入运行

ready=ready->next;

run->state='R';

}

//优先数调度算法

void priority(char alg)

{

while(run!=NULL) //当运行队列不空时,有进程正在运行

{

run->cputime=run->cputime+1;

run->needtime=run->needtime-1;

run->prio=run->prio-3; //每运行一次优先数降低3个单位

if(run->needtime==0) //如所需时间为0将其插入完成队列

{

run->next=finish;

finish=run;

run->state='F'; //置状态为完成态

run=NULL; //运行队列头指针为空

if(ready!=NULL) //如就绪队列不空

firstin(); //将就绪队列的第一个进程投入运行

}

else //没有运行完同时优先数不是最大,则将其变为就绪态插入到就绪队列

if((ready!=NULL)&&(run->prioprio))

{

run->state='W';

insert1(run);

firstin(); //将就绪队列的第一个进程投入运行

}

prt(alg); //输出进程PCB信息

}

}

//主函数

void main()

{

char algo; //算法标记

//clrscr();

printf("输入进程数:\n");

scanf("%d",&N); //输入进程数

create1(algo); //优先数算法

priority(algo);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优先数调度算法(Priority scheduling algorithm)是一种基于作业的优先级进行调度的算法。每个作业都有一个优先级,优先级越高的作业会被先调度执行。在实现时,可以采用多种方式来表示作业的优先级,例如数字越小表示优先级越高,或者数字越大表示优先级越高。 下面是一个简单的C语言实现示例,其中使用了一个结构体来表示作业的信息,包括作业名、执行时间和优先级。 ``` #include <stdio.h> struct job { char name[20]; int time; int priority; }; void swap(struct job *a, struct job *b) { struct job temp = *a; *a = *b; *b = temp; } void sort_jobs(struct job jobs[], int n) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - 1 - i; j++) { if (jobs[j].priority > jobs[j+1].priority) { swap(&jobs[j], &jobs[j+1]); } } } } void run_jobs(struct job jobs[], int n) { int time = 0; for (int i = 0; i < n; i++) { printf("Running job %s...\n", jobs[i].name); time += jobs[i].time; printf("Job %s finished at time %d.\n", jobs[i].name, time); } } int main() { struct job jobs = { {"job1", 5, 2}, {"job2", 2, 3}, {"job3", 3, 1}, {"job4", 4, 4} }; int n = sizeof(jobs) / sizeof(jobs); sort_jobs(jobs, n); run_jobs(jobs, n); return 0; } ``` 在这个示例中,我们首先定义了一个`struct job`结构体,用于表示作业信息。然后我们实现了一个`swap`函数,用于交换两个作业的位置。接下来实现了一个`sort_jobs`函数,用于按照作业的优先级进行排序。最后实现了一个`run_jobs`函数,用于执行所有的作业并输出结果。 在主函数中,我们定义了一个包含4个作业的`jobs`数组,并计算出作业数量`n`。然后我们调用`sort_jobs`函数对作业按照优先级进行排序。最后调用`run_jobs`函数执行所有的作业并输出结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值