c语言实现作业调度先来先服务和短进程优先,先来先服务和高响应比优先调度算法C语言实现...

先来先服务和高响应比优先调度算法C语言实现

1、进程调度与作业调度的区别:

作业调度:根据作业控制块(JCB)中的信息,检查系统中的资源是否满足作业对资源的需求,以及按照一定的调度算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程,分配必要的资源。然后再将新创建的进程排在就绪队列上等待调度。

进程调度:保存当前进程的处理机的现场信息,如程序计数器、多个通用寄存器中的内容等,然后按某种算法从就绪队列中选取一个进程,将其状态转换为运行状态,再把进程控制块内有关处理机现场的信息装入处理器相应的各个寄存器中,把处理器的控制权交予该进程,让它从上次的断点处恢复运行。

进程调度时让某个就绪状态的进程到处理机上运行,而作业调度只是使作业具有了竞争处理机的机会。

2、单道批处理系统与多道批处理系统的区别:

(1)单道批处理系统(Simple Batch Processing System):系统对作业的处理是成批进行的,但在内存中始终只保持一道作业。

特点:自动性、顺序性、单道性

主要问题:CPU与I/O设备忙闲不均,对计算为主的作业,外设空闲;对I/O为主的作业,CPU空闲。

多道批处理系统(Multiprogrammed Batch Processing System):在内存中同时存放几个作业,宏观上并行运行——都处于运行状态,但都没运行完;微观上串行运行——各作业交替使用CPU

特点:调度性、无序性、多道性

主要问题:①作业平均周转时间长:短作业的周转时间显著增长;

②无交互能力:整个作业完成后或者中间出错时,才与用户交互,不利于调试和修改。

3、用到的公式:

完成时间 = 开始时间 +需要运行时间

周转时间 = 完成时间 -到达时间

带权周转时间 = 需要运行时间/周转时间

等待时间 = 当前时间 -到达时间

优先权 = (等待时间 +需要运行时间) /需要运行时间

4、高响应比优先算法特点:

①当等待时间相同时,短进程的优先权高;

②当需要运行时间相同时,作业的优先权又取决于等待时间,相当于先到先服务;

③长作业的优先级可以随着等待时间的增加而提高,因此长作业等待一段时间后仍能得到调度。

5、源代码:

#include

#include

#include

#define WAIT "Wait"//就绪状态

#define RUN "Run"//运行状态

#define FINISH "Finish"//完成状态

#define JOBNUMBER 5 //设置进程测试数为5

typedef struct JCB{

char jobName[10];//作业名

int arriveTime;//到达时间

int runTime;//需要运行时间

int startTime;//开始时间

int endTime;//完成时间

int turnoverTime;//周转时间

float useWeightTurnoverTime;//带权周转时间

char processStatus[10];//进程状态

};

static int currentTime = 0;//当前时间

static int finishNumber = 0;//进程完成数量

char JobArray[JOBNUMBER][10];//存放数组名信息的二元数组

float priority[JOBNUMBER];//存放进程优先级的一元数组

//创建JCB

void createJCB(struct JCB* jcb){

freopen("input.txt","

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
服务调度算法C语言代码: ``` #include<stdio.h> int main(){ int n,p[20],bt[20],wt[20],tat[20],i,j; float avwt=0,avtat=0; printf("Enter total number of processes(maximum 20):"); scanf("%d",&n); printf("\nEnter Process Burst Time\n"); for(i=0;i<n;i++){ printf("P[%d]:",i+1); scanf("%d",&bt[i]); p[i]=i+1; } for(i=0;i<n;i++){ for(j=0;j<n-i-1;j++){ if(bt[j]>bt[j+1]){ int temp=bt[j]; bt[j]=bt[j+1]; bt[j+1]=temp; temp=p[j]; p[j]=p[j+1]; p[j+1]=temp; } } } wt[0]=0; for(i=1;i<n;i++){ wt[i]=0; for(j=0;j<i;j++) wt[i]+=bt[j]; avwt+=wt[i]; } avwt/=n; printf("\nProcess\t Burst Time\tWaiting Time\tTurnaround Time"); for(i=0;i<n;i++){ tat[i]=bt[i]+wt[i]; avtat+=tat[i]; printf("\nP[%d]\t\t%d\t\t%d\t\t%d",p[i],bt[i],wt[i],tat[i]); } avtat/=n; printf("\n\nAverage Waiting Time:%.2f",avwt); printf("\nAverage Turnaround Time:%.2f",avtat); return 0; } ``` 作业优先算法C语言代码: ``` #include<stdio.h> int main(){ int n,i,j,p[20],bt[20],wt[20],tat[20],temp; float avwt=0,avtat=0; printf("Enter total number of processes(maximum 20):"); scanf("%d",&n); printf("\nEnter Process Burst Time\n"); for(i=0;i<n;i++){ printf("P[%d]:",i+1); scanf("%d",&bt[i]); p[i]=i+1; } for(i=0;i<n;i++){ for(j=i+1;j<n;j++){ if(bt[i]>bt[j]){ temp=bt[i]; bt[i]=bt[j]; bt[j]=temp; temp=p[i]; p[i]=p[j]; p[j]=temp; } } } wt[0]=0; for(i=1;i<n;i++){ wt[i]=0; for(j=0;j<i;j++) wt[i]+=bt[j]; avwt+=wt[i]; } avwt/=n; printf("\nProcess\t Burst Time\tWaiting Time\tTurnaround Time"); for(i=0;i<n;i++){ tat[i]=bt[i]+wt[i]; avtat+=tat[i]; printf("\nP[%d]\t\t%d\t\t%d\t\t%d",p[i],bt[i],wt[i],tat[i]); } avtat/=n; printf("\n\nAverage Waiting Time=%.2f",avwt); printf("\nAverage Turnaround Time=%.2f",avtat); return 0; } ``` 时间片轮转算法C语言代码: ``` #include<stdio.h> int main(){ int n,i,j,p[20],bt[20],wt[20],tat[20],tq; int avwt=0,avtat=0; printf("Enter total number of processes(maximum 20):"); scanf("%d",&n); printf("\nEnter Process Burst Time\n"); for(i=0;i<n;i++){ printf("P[%d]:",i+1); scanf("%d",&bt[i]); p[i]=i+1; } printf("\nEnter Time Quantum:"); scanf("%d",&tq); int rt[n]; for(i=0;i<n;i++) rt[i]=bt[i]; int time=0,flag=0; while(1){ flag=0; for(i=0;i<n;i++){ if(rt[i]>0){ flag=1; if(rt[i]>tq){ time+=tq; rt[i]-=tq; } else{ time=time+rt[i]; wt[i]=time-bt[i]; rt[i]=0; } } } if(flag==0) break; } printf("\nProcess\t Burst Time\tWaiting Time\tTurnaround Time"); for(i=0;i<n;i++){ tat[i]=bt[i]+wt[i]; avwt+=wt[i]; avtat+=tat[i]; printf("\nP[%d]\t\t%d\t\t%d\t\t%d",p[i],bt[i],wt[i],tat[i]); } avwt/=n; avtat/=n; printf("\n\nAverage Waiting Time:%d",avwt); printf("\nAverage Turnaround Time:%d",avtat); return 0; } ``` 优先调度算法C语言代码: ``` #include<stdio.h> int main(){ int n,i,j,p[20],bt[20],wt[20],tat[20],pr[20],temp; float avwt=0,avtat=0; printf("Enter total number of processes(maximum 20):"); scanf("%d",&n); printf("\nEnter Process Burst Time and Priority\n"); for(i=0;i<n;i++){ printf("\nP[%d]\n",i+1); printf("Burst Time:"); scanf("%d",&bt[i]); printf("Priority:"); scanf("%d",&pr[i]); p[i]=i+1; } for(i=0;i<n;i++){ for(j=i+1;j<n;j++){ if(pr[i]>pr[j]){ temp=pr[i]; pr[i]=pr[j]; pr[j]=temp; temp=bt[i]; bt[i]=bt[j]; bt[j]=temp; temp=p[i]; p[i]=p[j]; p[j]=temp; } } } wt[0]=0; for(i=1;i<n;i++){ wt[i]=0; for(j=0;j<i;j++) wt[i]+=bt[j]; avwt+=wt[i]; } avwt/=n; printf("\nProcess\t Burst Time\t Priority\tWaiting Time\tTurnaround Time"); for(i=0;i<n;i++){ tat[i]=bt[i]+wt[i]; avtat+=tat[i]; printf("\nP[%d]\t\t%d\t\t%d\t\t%d\t\t%d",p[i],bt[i],pr[i],wt[i],tat[i]); } avtat/=n; printf("\n\nAverage Waiting Time=%.2f",avwt); printf("\nAverage Turnaround Time=%.2f",avtat); return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值