磁盘调度算法代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
#include
#include
int i,a[20];
void ran(){
srand((int)time(0));
for(i=0;i<20;i++)
{
a[i]=1+(int)(100.0*rand()/(RAND_MAX+1.0));
printf(" %d ",a[i]);
}
printf("\n");
}
void fcfs(){
int i,j=0,sum=0,x=23;
float s=0.0;
printf("先来先服务算法(FCFS)\n\n");
printf("\n 从%d号磁道开始 \n\n",x);
printf(" 被访问的下一个磁道号 ");
printf("移动距离(磁道数)\n");
for(i=0;i<20;i++){
if(xelse j=x-a[i];
sum=sum+j;
x=a[i];
printf(" %d %d \n",a[i],j);
}
s=(float)sum/20;
printf("\n平均寻道长度为:%.2f\n\n",s);
}

void sstf(){
int i,j=0,sum=0,b[20],x=23,min,mnum;
float s=0.0;
printf("最短寻道时间优先算法(SSTF)\n\n");
printf("\n 从%d号磁道开始 \n\n",x);
printf(" 被访问的下一个磁道号 ");
printf("移动距离(磁道数)\n");
for(i=0;i<20;i++){
b[i]=0;
}
for(j=0;j<20;j++){
for(i=0;i<20;i++){
if(b[i]==-1) continue;
else{
if(xelse b[i]=x-a[i];
}
}
min=100;
mnum=0;
for(i=0;i<20;i++){
if(b[i]==-1) continue;
else{
if(min>b[i]){
mnum=i;
min=b[i];
}
}
}
printf(" %d %d \n",a[mnum],b[mnum]);
x=a[mnum];
sum=sum+b[mnum];
b[mnum]=-1;
}
s=(float)sum/20;
printf("\n平均寻道长度为:%.2f\n\n",s);
}
void scan(){
int i,j=0,k=0,t,e,sum=0,b[20],c[20],x=23;
float s=0.0;
printf("扫描算法(SCAN)\n\n");
printf("\n 从%d号磁道开始 \n\n",x);
printf(" 被访问的下一个磁道号 ");
printf("移动距离(磁道数)\n");
for(i=0;i<20;i++){
b[i]=0;
c[i]=0;
}
for(i=0;i<20;i++){
if(a[i]>=x){
c[j]=a[i];
j++;
}
else{
b[k]=a[i];
k++;
}
}
for(e=1;efor(i=0;iif(c[i]>c[i+1]){
t=c[i+1];
c[i+1]=c[i];
c[i]=t;
}
}
}
for(e=1;efor(i=0;iif(b[i]>b[i+1]){
t=b[i+1];
b[i+1]=b[i];
b[i]=t;
}
}
}
for(i=0;iprintf(" %d %d \n",c[i],c[i]-x);
x=c[i];
}
for(i=k-1;i>=0;i--){
printf(" %d %d \n",b[i],x-b[i]);
x=b[i];
}
sum=c[j-1]-23+c[j-1]-b[0];
s=(float)sum/20;
printf("\n平均寻道长度为:%.2f\n\n",s);
}
void cscan(){
int i,j=0,k=0,t,e,sum=0,b[20],c[20],x=23;
float s=0.0;
printf("循环扫描算法(CSCAN)\n\n");
printf("\n 从%d号磁道开始 \n\n",x);
printf(" 被访问的下一个磁道号 ");
printf("移动距离(磁道数)\n");
for(i=0;i<20;i++){
b[i]=0;
c[i]=0;
}
for(i=0;i<20;i++){
if(a[i]>=x){
c[j]=a[i];
j++;
}
else{
b[k]=a[i];
k++;
}
}
for(e=1;efor(i=0;iif(c[i]>c[i+1]){
t=c[i+1];
c[i+1]=c[i];
c[i]=t;
}
}
}
for(e=1;efor(i=0;iif(b[i]>b[i+1]){
t=b[i+1];
b[i+1]=b[i];
b[i]=t;
}
}
}

for(i=0;iprintf(" %d %d \n",c[i],c[i]-x);
x=c[i];
}
for(i=0;iif(i==0){
printf(" %d %d \n",b[i],x-b[i]);
}
else{
printf(" %d %d \n",b[i],b[i]-x);
}
x=b[i];
}
sum=c[j-1]-23+c[j-1]-b[0]+b[k-1]-b[0];
s=(float)sum/20;
printf("\n平均寻道长度为:%.2f\n\n",s);
}
void nstepscan(){
int i,j,k,t,e,d=0,y=0,sum=0,x=23,z[4][5],b[5],c[5];
float s=0.0;
for(i=0;i<4;i++){
for(j=0;j<5;j++){
z[i][j]=a[i*5+j];
}
}
printf("N步扫描算法(NStepScan)\n\n");
printf("\n 从%d号磁道开始 \n\n",x);
printf(" 被访问的下一个磁道号 ");
printf("移动距离(磁道数)\n");
for(y=0;y<4;y++){
d=x;
j=0;
k=0;
for(i=0;i<5;i++){
b[i]=0;
c[i]=0;
}
for(i=0;i<5;i++){
if(z[y][i]>=x){
c[j]=z[y][i];
j++;
}
else{
b[k]=z[y][i];
k++;
}
}
for(e=1;efor(i=0;iif(c[i]>c[i+1]){
t=c[i+1];
c[i+1]=c[i];
c[i]=t;
}
}
}
for(e=1;efor(i=0;iif(b[i]>b[i+1]){
t=b[i+1];
b[i+1]=b[i];
b[i]=t;
}
}
}
for(i=0;iprintf(" %d %d \n",c[i],c[i]-x);
sum=sum+c[i]-x;
x=c[i];
}
for(i=k-1;i>=0;i--){
printf(" %d %d \n",b[i],x-b[i]);
sum=sum+x-b[i];
x=b[i];
}
//sum=sum+c[j-1]-d+c[j-1]-b[0];
}
s=(float)sum/20;
printf("\n平均寻道长度为:%.2f\n\n",s);
}
int main(){
int in;
while(1){
printf(" *******************************************************************\n");
printf(" ************* 请选择要使用的算法 ***********\n");
printf(" ********** ********\n");
printf(" ***** 1、先来先服务算法(FCFS) *****\n");
printf(" ***** 2、最短寻道时间优先算法(SSTF) *****\n");
printf(" ***** 3、扫描算法(SCAN) *****\n");
printf(" ***** 4、循环扫描算法(CSCAN) *****\n");
printf(" ***** 5、N步扫描算法(NStepScan) *****\n");
printf(" ***** 6、调用五种算法,进行比较 *****\n");
printf(" ***** 7、退出 *****\n");
printf(" ********** ********\n");
printf(" ************* ***********\n");
printf(" *******************************************************************\n\n");
printf("enter your choice:");
scanf("%d",&in);
if(in==7) {printf("程序已退出\n");break;}
switch(in){
case 1:ran();fcfs();break;
case 2:ran();sstf();break;
case 3:ran();scan();break;
case 4:ran();cscan();break;
case 5:ran();nstepscan();break;
case 6:ran();fcfs();sstf();sca

n();cscan();nstepscan();break;
}
}
return 1;
}

相关文档
最新文档