当前位置:编程学习 > C#/ASP.NET >>

操作系统调度算法实现(FCFS,AND SJF)模拟-(0)

该程序是操作系统实验作业的模拟其中有不足之处望提出宝贵的意见.
#include
float t,d; /*定义两个全局变量*/
struct /*定义一个结构体数组,包括进程的信息*/
{
int id;
float arrivetime;
float servertime;
float starttime;
float finishtime;
float Turnovertime;
float bili;
int flags;
}pro[4]; /*定义初始化的结构体数组*/
Create () /*给结构体数组赋值,输入到达,服务时间*/
{ int i;
float a;
for(i=0;i<4;i++)
{ pro[i].id=i+1;
printf("input the the arrivetime of %d Progress:",i+1); /*用户输入进程的时间,初始为零 */
scanf("%f",&a);
pro[i].arrivetime=a;
printf("input the servertime of %d Progress:",i+1);
scanf("%f",&a);
pro[i].servertime=a;
pro[i].starttime=0;
pro[i].finishtime=0;
pro[i].Turnovertime=0;
pro[i].flags=0; /*开始默认的标志位零*/
}
}
int Serach_fcfs() /*定义FCFS中寻找未执行的进程的最先到达时间*/

int i,j,s=0; /*在结构体数组中找到一个未执行的进程*/ 
for(i=0;i<4;i++) 

if(pro[i].flags==0) 

t=pro[i].arrivetime; 
s=1; 

if(s==1) 
break; 

for(i=0;i<4;i++) /*查找数组中到达时间最小未执行的进程*/ 

if(pro[i].arrivetimet=pro[i].arrivetime; 
} /*返回最小到达时间的数组的下标*/ 
for(i=0;i<4;i++) 

if (pro[i].arrivetime==t&&pro[i].flags==0)
return i; 


int Search_sjf() /*定义SJF中寻找未执行的进程的最先到达时间*/
{
int i,x=0,a=0,b=0; /*判断是不是第一个执行的进程*/
float g;
for(i=0;i<4;i++)
{
if(pro[i].flags==1)
{g=pro[i].finishtime;
x=1;
}
}
if(x==0) /*第一个执行的进程按FCFS*/
{
t=pro[0].arrivetime;
for(i=0;i<4;i++)
{
if(pro[i].arrivetime{ t=pro[i].arrivetime;
a=i;
}
}
return a;}
else
{
for(i=0;i<4;i++)
{if(pro[i].finishtime>g)
g=pro[i].finishtime;
}
for(i=0;i<4;i++)
{if(pro[i].flags==0&& pro[i].arrivetime<=g)
{t=pro[i].servertime;
a=i;
b=1;} /*判断有没有进程在前个进程完成前到达*/
}
if(b==1) /*有进程到达则按SJF*/
{for(i=0;i<4;i++)
{
if(pro[i].flags==0&&pro[i].arrivetime<=g&&pro[i].servertime{t=pro[i].servertime;
a=i;}
if(pro[i].flags==0&&pro[i].arrivetime<=g&&pro[i].servertime==t)
  {
    if(pro[i].arrivetime    {t=pro[i].servertime;
      a=i;
   }
   }
}
return a;}
else{ /*否则按FCFS*/
for(i=0;i<4;i++)
{if(pro[i].flags==0)
t=pro[i].arrivetime;
}
for(i=0;i<4;i++)
{
if(pro[i].flags==0&&pro[i].arrivetime{t=pro[i].arrivetime;
a=i;
}
}
return a;}
}
}
Begin(int s) /*定义执行进程后相关数据的修改*/

int i,g=0;
for(i=0;i<4;i++)
{
if(pro[i].flags==0)
continue;
else
{
g=1;
break;
}
}
if(g==0) /*当处理的是第一个未执行的进程时执行*/
{
pro[s].starttime=pro[s].arrivetime;
pro[s].finishtime=pro[s].servertime+pro[s].arrivetime;
pro[s].Turnovertime=pro[s].servertime;
pro[s].flags=1;
g=2;
}
if(g==1) /*当处理的不是第一个未执行的进程时执行*/
{
pro[s].flags=1;
for(i=0;i<4;i++)
{
if(pro[i].flags==1)
d=pro[i].finishtime;
}
for(i=0;i<4;i++) /*查找最后执行的进程的完成时间*/
{
if(pro[i].finishtime>d&&pro[i].flags==1)
d=pro[i].finishtime;
}
if(pro[s].arrivetimepro[s].starttime=d;
else
pro[s].starttime=pro[s].arrivetime;
pro[s].finishtime=pro[s].starttime+pro[s].servertime;
pro[s].Turnovertime=pro[s].finishtime-pro[s].arrivetime;
}
pro[s].bili=pro[s].Turnovertime/pro[s].servertime;
}
Printresult(int j) /*定义打印函数*/

printf("%dt",pro[j].id);
printf("%5.2ft",pro[j].arrivetime);
printf("%5.2ft",pro[j].servertime);
printf("%5.2ft",pro[j].starttime);
printf("%5.2ft",pro[j].finishtime);
printf("%5.2ft",pro[j].Turnovertime);
printf("%5.2fn",pro[j].bili);
}
main()
{ int i,b,k,a,g=0,c=0;
int d[4];
clrscr();
printf("t|---------------------------------------------|n");
printf("t|                \\\|//////                   |n ");
printf("t|                \\ ~~  ///                   |n");
printf("t|                 ( ~@ @~ )                   |n");
printf("t+-------oOOo---------(_)-----------oOOo-----+ |n");
printf("t| *********************************           |n");
printf("t|Operate System Experiment                    |n");
printf("t|Author:XiongGuoQing                          |n");
printf("t|Run Environment:Win-TC                       |n");
printf("t|-------------------------------------------  |n");
printf("t| 1. FCFS *************************           |n");
printf("t| 2. SFJ  *************************           |n");
printf("t| 0. EXIT *************************           |n");
printf("t|-------------------------------------------  |n");
printf("t|   Bigbone 2005.5.19                         |n");
printf("t|+------------------------------------------+ |n");
printf("t|---------------------------------------------|n");
for(i=0;;i++)
{if(c)
break;
printf("******************************************************************n");
printf("if a=1,FCFS,;t ifa=2,SJF;t if a=0,EXIT;telse RETURN INPUTn");
printf("******************************************************************n");
printf("Please input a:n");
scanf("%d",&a);
switch(a)
{
case 0: c=1;
break;
case 1:
  if(g==0) 
  {
  Create();
  }
  else
  {for(i=0;i<4;i++)
    {pro[i].flags=0;
    pro[i].starttime=0;
    pro[i].finishtime=0;
    pro[i].Turnovertime=0;
}
}

printf("*****************************the result of fcfsn");
printf("NumbertArrivetServertStarttFinishtTurnovetTake power turnover timen");
for(b=0;b<4;b++) /*调用两个函数改变结构体数的值*/
{
k=Serach_fcfs();
d[b]=k;
Begin(k);
}
for(b=0;b<4;b++)
Printresult(d[b]);/*调用打印函数打出结果*/
printf("*******************************************************n");
printf("if g!=1 return input the number.else input the number a:n");
printf("*******************************************************n");
printf("please input a number g:n");
  scanf("%d",&g);
continue;
case 2: 
 if(g==0) 
  {
  Create();
  }
  else
  {for(i=0;i<4;i++)
    {pro[i].flags=0;
    pro[i].starttime=0;
    pro[i].finishtime=0;
    pro[i].Turnovertime=0;
}
}
printf("******************************the result of sjfn");
printf("NumbertArrivetServertStarttFinishtTurnovetTake power turnover timen");
for(b=0;b<4;b++)
{
k=Search_sjf();
d[b]=k;
Begin(k);
}
for(b=0;b<4;b++)
Printresult(d[b]);
printf("*******************************************************n");
printf("if g!=1return input the number.else input the number a:n");
printf("*******************************************************n");
printf("please input a number g:n");
  scanf("%d",&g);
continue;
default:printf("the number Error.please input another number!n");
}
} 补充:asp.net教程,C语言
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,