实现作业调度算法先来先服务+最短作业+最短剩余时间[精品].doc
文本预览下载声明
0956104 朱文君 操作系统 上机报告
一、实验目的:
1.学习处理器各种调度算法的基本思想;
2.通过上机实习,编写程序实现处理器的调度加深对各种算法的理解。
二、实验内容:
1.实验平台:Microsoft Visual C++ 6.0编程环境、Microsoft Office Word软件平台;
2.用C语言编程实现处理器的调度算法:
①先来先服务算法
②最短作业优先算法
③最短剩余时间优先算法;
三、实验步骤:
(一)先来先服务算法
1.说明:先来先服务算法(First Come First Served,FCFS)
2.算法实现:#includestdio.h
void main()
{
int i,a,T=0,N,add;
float sum=0;
printf(输入进程数:);
scanf(%d,N);
for(i=1;i=N;i++)
{
printf(\n第%d个进程所需的时间:,i);
scanf(%d,a);
T=T+a;
sum+=T;
printf(\n是否有新的进程进入,输入新的进程数:);
scanf(%d,add);
N=N+add;
}
printf(\n T=%f,sum/N);
}
3.运行结果演示:
(二)最短作业优先算法
1.说明:最短作业优先算法(Shortest Job First,SFJ)
2.算法实现:
#includestdio.h
int De_a(int x,int y,int a[])
{
int i;
if(x==y)
a[x]=0;
else
{
for(i=x;iy;i++)
{
a[i]=a[i+1];
}
a[i]=0;
}
return 1;
}
void main()
{
int N,M,i,j,k,add,flag,a[1000]={0};
float T=0.000,W=0.000,sum=0;
printf(输入进程数:);
scanf(%d,N);
for(i=1;i=N;i++)
{
printf(\n第%d个进程所需的时间:,i);
scanf(%d,a[i]);
}
M=N;
for(i=1;i=N;i++)
{
a[0]=a[1];
for(j=1;j=M;j++)
{
if(a[0]=a[j])
{
a[0]=a[j];
flag=j;
}
}
T=T+(float)a[flag];
sum+=T;
W=W+(float)T/a[flag];
printf( %f ,W);
De_a(flag,M,a);
printf(\n是否有新的进程进入,输入新的进程数:);
scanf(%d,add);
for(k=1;k=add;k++)
{
printf(\n第%d个进程所需的时间:,i);
scanf(%d,a[k+M-1]);
}
N=N+add;
M=M+add-1;
}
printf(平均作业周转时间T=%f\n,sum/N);
printf(平均带权作业周转时间W=%f\n,W/N);
}
3.运行结果演示:
(三)最短剩余时间优先算法
1.说明:最短剩余时间优先算法(Shortest Remaining Time First,SRTF)即当前某进程/线程正在运行,如果有新进程/线程移入就绪队列,若它所需要的CPU运行时间比当前运行进程/线程所需要的剩余CPU时间还短,抢占式最短作业优先算法强行剥夺当前执行者的控制权,调度新进程/线程执行。
2.算法实现:
#includestdio.h
#define N 100
void main()
{
int n,j,k,i,sum=0,flag=1,q,m,x;//sum时间总和
char p;
struct
{
int arrivetime;
int cputime;
int resttime;
}process[N]={{100,100,100},{100,100,100},{100,100,100},{100,100,100},{100,100,100},{100,100,100}};
printf(输入进程数:);
scanf(%d,n);
for(i=1;i=n;i++)
{
printf(\n第%d个进程到达时间:,i);
scanf(%d,process[i].arrivetime);
printf(\n第%d个所需CPU时间:,i);
显示全部