fcfs调度算法代码c语言linux,进程调度之FCFS算法(先来先运行算法)(示例代码)...

#include

#define PNUMBER 5//进程个数

#define SNUMBER 3//资源种类个数

//资源的种类,三种

char stype[SNUMBER]={‘A‘,‘B‘,‘C‘};//各种资源的总数量,a种资源总10,b种资源总5,c种资源总7

int avalable[SNUMBER]={10,5,7};//每个进程对应的完成进程需要的各种类型的资源需求量,静态值

int pmax[PNUMBER][SNUMBER]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};//每个进程已经分配的资源情况,动态值

int allocation[PNUMBER][SNUMBER]={{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}};//每一个进程还需要的资源

int pneed[PNUMBER][SNUMBER]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};//临时的数组

intrequest[SNUMBER];//当前正在分配资源的进程

int pindex=0;//显示每一个进程对资源拥有的现状

voidshowdate();//接受进程分配的请求

voidaccepetRequest();//模拟分配

void SimMllocation(intpindex);//回滚

void rollback(intpindex);//安全性检查

intcheckIsSafe();intmain()

{//主逻辑

int exit=0;//显示每一个进程现状

showdate();do{//接受进程分配的请求

accepetRequest();//模拟分配资源

SimMllocation(pindex);//显示现在资源现状

showdate();//检查是否存在安全序列,数据要保证至少一个进程能完成分配

if(checkIsSafe()==0)

{//当前进程不存在安全序列,当前进程数据回滚

rollback(pindex);

}

printf("是否继续0/1\n");

scanf("%d",&exit);

}while(exit==1);return 0;

}//显示每一个进程对资源拥有的现状

voidshowdate()

{int index=0;int index_=0;

printf("当前资源情况.....\n");

printf("资源类类型\t资源数量\n");for(index=0;index

{

printf("%c\t\t%d\n",stype[index],avalable[index]);

}

printf("\n\n每一个进程所需要资源的最大值.........\n\n");

printf("进程编号\t资源类型A\t资源类型B\t资源类型C\n");for(index=0;index

{

printf("%d\t\t",index);for(index_=0;index_

{

printf("%d\t\t",pmax[index][index_]);

}

printf("\n");

}

printf("\n\n每一个进程所分配的情况......\n\n");

printf("进程编号\t资源类型A\t资源类型B\t资源类型C\n");for(index=0;index

{

printf("%d\t\t",index);for(index_=0;index_

{

printf("%d\t\t",allocation[index][index_]);

}

printf("\n");

}

printf("\n\n每一个进程还需要的资源的情况......\n\n");

printf("进程编号\t资源类型A\t资源类型\t资源类型C\n");for(index=0;index

{

printf("%d\t\t",index);for(index_=0;index_

{

printf("%d\t\t",pneed[index][index_]);

}

printf("\n");

}

printf("---------------------------------------------------------------------------------------------\n");

}voidaccepetRequest()

{int index=0;

printf("请输入你要分配资源的进程编号(0~%d)\n",PNUMBER-1);//需要分配资源的进程

scanf("%d",&pindex);//输入需要各种资源的具体数量

for(index=0;index

{

printf("请输入%c类资源的数量\n",stype[index]);

scanf("%d",&request[index]);//小于进程对资源的最大要求

if(request[index]<=pmax[pindex][index]&&request[index]<=avalable[index])

{

index++;

}

}

}//模拟分配

void SimMllocation(intpindex)

{int index=0;for(index=0;index

{//总资源减少

avalable[index]-=request[index];//当前进程已经分配的资源

allocation[pindex][index]+=request[index];//还需要的资源

pneed[pindex][index]-=request[index];

}

}//回滚

void rollback(intpindex)

{int index=0;for(index=0;index

{

avalable[index]+=request[index];

allocation[pindex][index]-=request[index];

pneed[pindex][index]+=request[index];

}//回滚与模拟分配刚好相反

}intcheckIsSafe()

{int index=0;int index_=0;int count=0;int k=0;inttemp[PNUMBER];//余下的资源要保证每一个进程都能得到资源

int finish[PNUMBER]={0,0,0,0,0};//资源

intwork[SNUMBER];for(index=0;index

{

work[index]=avalable[index];

}//所有进程找到

for(index=0;index

{

count=0;if(finish[index]==1)continue;//余下的资源是否能满足某一进程的需要

for(index_=0;index_

{if(pneed[index][index_]<=work[index_])

{

count++;

}if(count==SNUMBER)

{//余下的资源如果满足一个进程的需要,也就能回收

finish[index]=1;for(index_=0;index_

{

work[index_]+=allocation[index][index_];

}//记下此进程的编号

temp[k]=index;

k++;//因为有资源回收,所以让所有进程试试看能不能重新分配

index=-1;

}

}

}//判断所有进程理论上是否能分配到资源

for(index=0;index

{//只要有一个进程分配不到资源,则不存在安全序列

if(finish[index]==0)

{

printf("***不存在安全序列***");return 0;

}

}

printf("安全序列............\n");for(index=0;index

{

printf("%d--->",temp[index]);

}

printf("\n");return 1;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的 FCFS 调度算法代码示例,用 C 语言编写: ```c #include <stdio.h> void main() { int n, i, j; float wait_time = 0, turnaround_time = 0, avg_wait_time, avg_turnaround_time; printf("Enter total number of processes:"); scanf("%d", &n); int burst_time[n], arrival_time[n], start_time[n], completion_time[n]; for(i = 0; i < n; i++) { printf("\nEnter Arrival Time and Burst Time for Process %d:", i+1); scanf("%d%d", &arrival_time[i], &burst_time[i]); } start_time[0] = arrival_time[0]; for(i = 1; i < n; i++) { start_time[i] = start_time[i-1] + burst_time[i-1]; } for(i = 0; i < n; i++) { completion_time[i] = start_time[i] + burst_time[i]; turnaround_time = turnaround_time + (completion_time[i] - arrival_time[i]); wait_time = wait_time + (start_time[i] - arrival_time[i]); } avg_wait_time = wait_time / n; avg_turnaround_time = turnaround_time / n; printf("\nProcess\t Arrival Time\t Burst Time\t Start Time\t Completion Time\t Turnaround Time\t Waiting Time"); for(i = 0; i < n; i++) { printf("\n%d\t\t %d\t\t %d\t\t %d\t\t %d\t\t\t %d\t\t\t %d", i+1, arrival_time[i], burst_time[i], start_time[i], completion_time[i], completion_time[i] - arrival_time[i], start_time[i] - arrival_time[i]); } printf("\nAverage Waiting Time: %f", avg_wait_time); printf("\nAverage Turnaround Time: %f\n", avg_turnaround_time); } ``` 这个程序首要求输入进程的数量和每个进程的到达时间和运行时间。然后计算出每个进程的开始时间、完成时间、周转时间和等待时间,并计算平均等待时间和平均周转时间。最后打印出所有进程的详细信息和平均值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值