最高级优先调度算法

这是一个C语言程序,用于模拟短作业优先(SJF)调度算法。程序接收用户输入的进程信息,包括进程名、优先级、到达时间和服务时间,然后通过排序和计算完成进程的调度过程,并输出执行顺序和各种时间指标。
#include<stdio.h>
struct sjf {
char name[10]; //进程名
int arrivetime; //到达时间
int servicetime;//服务时间
    int starttime; //开始时间
int finishtime;//完成时间
float zztime;//周转时间
float dqzztime;//带权周转
int super;//优先级
};
sjf p[100];
void Sinput(sjf *p, int N) {


int i;
printf("输入进程名称,优先级,到达时间,服务时间:\n");
for (i = 0; i<N; i++) {
printf("输入第%d进程的名称,优先级,到达时间,服务时间:", i + 1);
scanf("%s%d%d%d", &p[i].name,&p[i].super, &p[i].arrivetime, &p[i].servicetime);
}
}
void Sprint(sjf *p, int N) {

int k;
printf("执行顺序\n");
printf("%s", p[0].name);
for (k = 1; k <= N; k++) {


printf(" %s", p[k].name);
}
printf("\n进程名 \t优先级 \t到达时间    服务时间\t开始时间\t完成时间\n");
for (k = 0; k <= N-1 ; k++) {
printf("  %s       %d       %d            %d           %d               %d \n\n",
p[k].name,p[k].super, p[k].arrivetime, p[k].servicetime, p[k].starttime, p[k].finishtime);
}
}
void Ssort(sjf *p, int N) {

for (int i = 1; i < N; i++) {
for (int j = 1; j <= i; j++) {
if (p[i].super > p[j].super) {
sjf temp;
temp = p[i];
p[i] = p[j];
p[j] = temp;
}
}
}
}
void Sdeal(sjf *p,int N,float arrivetime,float servicetime,float finishtime){
int k;


for(k=0;k<=N;k++){
if(k==0){
p[k].starttime=p[k].arrivetime;
p[k].finishtime=p[k].arrivetime+p[k].servicetime;
}
else {
p[k].starttime=p[k-1].finishtime;
p[k].finishtime=p[k-1].finishtime+p[k].servicetime;
}
}
}
void SJF(sjf *p, int N) {
    float arrivetime=0,
servitime=0,
finishtime=0;
Ssort(p, N);
Sdeal(p,N,arrivetime,servitime,finishtime);
Sprint(p, N);
}
int main() {
int M;
printf("短作业优先调度算法\n");
printf("输入进程数:");
scanf("%d", &M);
Sinput(p, M);
SJF(p, M);


/*Sprint(p,M);
Ssort(p,M);
Sdeal(p,M,arrivetime,servitime,finishtime);*/
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值