电梯调度算法---SCAN算法

请珍惜小编劳动成果,该文章为小编原创,转载请注明出处。


扫描(SCAN)调度算法:总是从磁臂当前位置开始,沿磁臂的移动方向去选择离当前磁臂最近的那个柱面的访问者。如果沿磁臂的方向无请求访问时,就改变磁臂的移动方向。采用这种调度算法,需要为访问者设置两个队列,根据磁头的移动方向,能访问到的访问者由近及远排队,背离磁头移动方向的访问者也由近及远排为另一队。先按磁头移动方向队列调度访问者访问磁盘,当该方向没有访问者时,再改变方向,选择另一个访问者队列访问磁盘。


java代码实现:

import java.util.Scanner;


public class SCAN {

	int visitAdd[];
	int visitSub[];
	int index=0;   //存放下标,已排序序列中找到比它大的最小值的下标
	public void scan(int data[],int begin,int direction){
		int temp=0;
		//从小到大排序
		for(int i=0;idata[j]){
					temp=data[i];
					data[i]=data[j];
					data[j]=temp;
				}
			}
		}

		for(int i=0;ibegin){   //在已排序序列中找到比它大的最小值的下标
				index=i;
				break;
			}
		}
		//比起始位置小的
		visitSub=new int[index];   //比他小的共有index个
		for(int i=0;i0;i--){
			lengthSub+=Math.abs(visitSub[i]-visitSub[i-1]);
		}
		length=lengthAdd+lengthSub+Math.abs(begin-visitAdd[0])+Math.abs(begin-visitSub[visitSub.length-1]);
		
		if(direction==0){   //找小的
			for(int i=visitSub.length-1;i>=0;i--){              
				System.out.print(visitSub[i]+"    ");
			}
			//回转
			for(int i=0;i=0;i--){              
				System.out.print(visitSub[i]+"    ");
			}
			length+=Math.abs(visitAdd[visitAdd.length-1]-begin);
		}
		System.out.println("平均寻道长度为"+length/data.length);
	}
	public static void main(String[] args) {
		SCAN scan=new SCAN();
		Scanner scanner=new Scanner(System.in);
		System.out.println("请输入数据个数");
        int num=scanner.nextInt();
        System.out.println("请一次输入数据,空格隔开");
        int data[]=new int[num];
        for(int i=0;i


测试:


电梯调度算法---SCAN算法_第1张图片

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/dingxiaoyue/p/4931789.html

你可能感兴趣的:(电梯调度算法---SCAN算法)