——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方法一致,只是到达最远请求后,不是反向扫描,而是又从头开始,相对而言,减少了反向折回时重复扫描的时间