java实现——最短寻道时间优先(SSTF)和扫描(SCAN)算法

模拟实现磁盘调度算法:最短寻道时间优先(SSTF)和扫描(SCAN)算法。

实验步骤:

理解各调度算法的工作原理

对给出的任意的磁盘请求序列、计算平均寻道长度;要求可定制磁盘请求序列长度、磁头起始位置、磁头移动方向。

测试:假设磁盘访问序列:98,183,37,122,14,124,65,67;读写头起始位置:53,方向:磁道增加的方向。输入此类数据后,程序按照选定的算法,自动给出访问序列,并且算出经过的磁道总数。

最短寻道时间优先(SSTF)算法

package 磁盘调度算法;
import java.util.List;  
import java.util.Scanner;

//最短寻道时间优先
public class SSTF{
	private int visit[];
	private int nearIndex=0;
	public int[] sstf(int queue[],int start){
		int nearNum=9999;
		visit=new int[queue.length];
		for(int i=0;iMath.abs(queue[j]-start)){
						nearNum=queue[j];
						nearIndex=j;
					}
				}
			}
			visit[i]=nearNum;
			queue[nearIndex]=-1;
			start=nearNum;
			nearNum=9999;
		}
	return visit;
	}	
	public void print(int visit[],int start){
		double sum=0;
		System.out.print("访问序列:");
		for(int i=0;i

实验结果:

java实现——最短寻道时间优先(SSTF)和扫描(SCAN)算法_第1张图片

扫描(SCAN)算法:

package 磁盘调度算法2;
import java.util.List;
import java.util.Scanner;

public class SCAN{
	private int visit[];
	private int nearIndex=0;
	public int[] scan(int queue[],int start,int direction){
		int nearNum=9999;
		int index=0;
		visit=new int[queue.length];
		for(int i=0;istart)&&(Math.abs(nearNum-start)>Math.abs(queue[j]-start))){
						nearNum=queue[j];
						nearIndex=j;
						index=0;
					}
					else if((direction==0)&&(queue[j]Math.abs(queue[j]-start))){
						nearNum=queue[j];
						nearIndex=j;
						index=0;
					}
				}
			}
			if((direction==1)&&(index==-1)){
				direction=0;
				i=i-1;
			}
			else if((direction==0)&&(index==-1)){
				direction=1;
				i=i-1;
			}
			if(index==0){
				visit[i]=nearNum;
				queue[nearIndex]=-1;
				start=nearNum;
				nearNum=9999;
			}
		}
		return visit;
	}
	
	public void print(int visit[],int start){
		double sum=0;
		System.out.print("访问序列:");
		for(int i=0;i

实验结果:

java实现——最短寻道时间优先(SSTF)和扫描(SCAN)算法_第2张图片

你可能感兴趣的:(java实现——最短寻道时间优先(SSTF)和扫描(SCAN)算法)