常见的磁盘调度算法有:
1.FCFS:先来先服务算法;
2.SSTF:最短寻道时间算法;
3.SCAN:扫描算法(也叫电梯调度算法);
4.CSCAN:循环扫描算法
算法的详细介绍:
FCFS:算法思想非常简单,就是不论初始磁头在什么位置,都是按照服务队列的先后顺序依次处理进程,可以类比队列的先进先出。优点是进程处理起来非常简单,但缺点显而易见,就是平均寻道长度会很长。
Java实现:
public class fcfs {
Scanner x=new Scanner(System.in);
public int[] position;
public int num;
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]);
}
}
SSTF:最短寻道时间算法,算法本质是贪心,已知磁头的初始位置,则最先被处理就是距离磁头位置最近的进程,处理完成后再处理距离当前磁道最近的进程,直到所有的进程被处理。该算法的优点是平均寻道长度会大大减少,缺点是距离初始磁头较远的服务长期得不到处理,产生“饥饿”现象。具体的思路是:通过循环寻找与初始磁头最近的进程,将进程处理,然后将该进程标记为-1,将初始磁头移动到该进程所在的磁道。然后依次类推,标记为-1的进程不再参与,知道所有的进程都被标记为-1,磁盘调度完成。
Java实现
public class sstfAlg{
int num;
int[][] position;
int size;
int initPos;
int[] sequenceOfProcess ;//存储访问序列
int[] sequenceOfNumber;
Scanner sc = new Scanner(System.in);
public sstfAlg(int a,int b,int c){
//a means the amount of process
//b means the inital of position
//c means the size of disk
num = a;
position = new int[a][2];
sequenceOfProcess = new int[a];
sequenceOfNumber = new int[a];
initPos = b;
&