操作系统 磁盘调度算法

——FCFS 先来先服务,即按照请求到来的顺序依次处理进程,优点是实现简单,缺点是平均寻道时间变长

public class fcfs {
	
	private Scanner x=new Scanner(System.in);
	
	private int num;
	private int[] position;
	public fcfs()
	{
        System.out.println("Enter the number of process:");
        num=x.nextInt();
        position=new int[num];
    } 
	 public void input()
	    {
	        int i=0;
	        for(i=0;i<num;i++)
	            position[i]=x.nextInt();
	    }
	    
	   
	    public void algo()
	    {
	        int i=1;
	        for(i=1;i<=num;i++)
	            System.out.println("Process Accessed "+i+" at "+position[i-1]);
	    }

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		fcfs demo=new fcfs();
		demo.input();
		demo.algo();
		

	}

}

——SSTF最短寻道时间算法,采取贪心策略,即每次总是寻找距离当前磁头最近的进程,进行处理,直到所有进程都被处理,但缺点是一开始距离磁头较远的进程可能始终得不到及时处理,出现“饥饿”现象。

public class SSTF {
	
	private int num;//请求磁盘访问的进程数目
	private int[] position;//存放进程请求位置
	private boolean[] visit;
	private int pos;// 磁头位置
	private int find_near()  //返回距离当前磁头最近的位置
	{
		int min=8000000;
		int index=-1;
		for(int i=0;i<num;i++)
		{
			if(visit[i]==false && (Math.abs(pos-position[i])<min))
			{
				min=Math.abs(pos-position[i]);
				index=i;
				
			}
				
		}
		return index;
		
	}
	public SSTF(int pos,int num)
	{
		this.pos=pos;
		this.num=num;
		position=new int[num];
		visit=new boolean[num];
		for(int i=0;i<num;i++)
			visit[i]=false;
	}
	public void input()
	{
		Scanner sc=new Scanner(System.in);
		for(int i=0;i<num;i++)
		{
			position[i]=sc.nextInt();
			
		}
	}
	public void fun()
	{
		int nearest=find_near();
		while(nearest!=-1)
		{
			System.out.println("execute at"+position[nearest]);
			visit[nearest]=true;
			pos=nearest;
			nearest=find_near();
		}
		
		
	}
	

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Scanner sc=new Scanner(System.in);
		System.out.println("输入初始位置pos 进程数目num,");
		int pos=sc.nextInt();
		int num=sc.nextInt();
		SSTF demo=new SSTF(pos,num);
		demo.input();
		demo.fun();

	}

}

 

——SCAN扫描算法(电梯扫描法)即磁头始终沿着一个方向扫描直到该方向最远一个进程请求,而后反向扫描

——CSCAN循环扫描法,与SCAN方法一致,只是到达最远请求后,不是反向扫描,而是又从头开始,相对而言,减少了反向折回时重复扫描的时间

猜你喜欢

转载自blog.csdn.net/qq_33369979/article/details/87891029
今日推荐