操作系统-磁盘调度算法:先来先服务,最短寻道时间优先,scan算法
来源:互联网 发布:samsung打印服务软件 编辑:程序博客网 时间:2024/05/21 22:57
1.先来先服务
public class FCFS {/** * 磁盘调度:先来先服务 */private static int startPosition = 100 ;//磁头开始位置private static int totalMoving = 0;private static List<Integer> visitList = new ArrayList<Integer>();//访问磁道列表public static void main(String[] args) {System.out.println("------磁盘调度:先来先服务算法模拟---------");input();running();display();}//接收用户输入列表public static void input(){System.out.print("请输入磁道访问列表,以空格分开:");Scanner sc = new Scanner(System.in);String input = sc.nextLine();String[] inputList = input.split("\\s");try{for(String in : inputList){visitList.add(Integer.valueOf(in));}}catch(Exception e){System.out.println("输入的必须是数字,请重新开始!!!");System.exit(1);}}//运行public static void running(){Iterator<Integer> it = visitList.listIterator();int thisPosition = 0;while(it.hasNext()){thisPosition = it.next();totalMoving += Math.abs(startPosition-thisPosition);startPosition = thisPosition;System.out.println("当前访问磁道号:"+thisPosition);}}public static void display(){System.out.println("平均寻道时间是:"+(double)totalMoving/visitList.size());}}
2.最短寻道时间优先
public class SSTF {/** *磁盘调度:最短寻道时间优先 */private static int startPosition = 100 ;//磁头开始位置private static int totalMoving = 0;private static List<Integer> visitList = new LinkedList<Integer>();//访问磁道列表private static int size;public static void main(String[] args) {System.out.println("------磁盘调度:最短寻道时间优先算法模拟---------");input();running();display();}//接收用户输入列表public static void input(){System.out.print("请输入磁道访问列表,以空格分开:");Scanner sc = new Scanner(System.in);String input = sc.nextLine();String[] inputList = input.split("\\s");try{for(String in : inputList){visitList.add(Integer.valueOf(in));}size = visitList.size();}catch(Exception e){System.out.println("输入的必须是数字,请重新开始!!!");System.exit(1);}}//运行public static void running(){int visitNumber = 0;for(int i=0,size = visitList.size();i<size;i++){visitNumber = searchMinimum(startPosition);System.out.println("当前访问磁道:"+visitNumber);}}//寻找与当前磁头最近的磁道号public static int searchMinimum(int startPosition){int min = Integer.MAX_VALUE,index = 0,i = 0,thisPosition = 0,computering=0;Iterator<Integer> it = visitList.iterator();while(it.hasNext()){int in = it.next();computering = Math.abs(startPosition-in);//判断是否小于最小值if(min>computering){index = i;min = computering;}i++;}thisPosition = visitList.remove(index);//设置当前磁头,访问后移除totalMoving += Math.abs(startPosition-thisPosition);SSTF.startPosition = thisPosition;return thisPosition;}public static void display(){System.out.println("平均寻道时间是:"+(double)totalMoving/size);}}
3.SCAN算法
public class SCAN {/** * 磁盘调度:scan算法 */private static int startPosition = 100 ;//磁头开始位置private static int totalMoving = 0;private static List<Integer> visitList = new ArrayList<Integer>();//访问磁道列表private static int moveDirection = 0;//0:向外移动,1:向里移动private static int size;public static void main(String[] args) {System.out.println("------磁盘调度:scan算法模拟---------");input();running();display();}//接收用户输入列表public static void input(){System.out.print("请输入磁道访问列表,以空格分开:");Scanner sc = new Scanner(System.in);String input = sc.nextLine();String[] inputList = input.split("\\s");try{for(String in : inputList){visitList.add(Integer.valueOf(in));}size = visitList.size();}catch(Exception e){System.out.println("输入的必须是数字,请重新开始!!!");System.exit(1);}}//运行public static void running(){int visitNumber = 0;for(int i=0,size = visitList.size();i<size;i++){visitNumber = searchMinimum(startPosition);System.out.println("当前访问磁道:"+visitNumber);}}//寻找与当前磁头最近并且和磁头的移动方向一致的磁道号public static int searchMinimum(int startPosition){int min = Integer.MAX_VALUE,index = -1,i = 0,thisPosition = 0,computing=0;Iterator<Integer> it = visitList.iterator();while(it.hasNext()){int in = it.next();computing = Math.abs(startPosition-in);if((min>computing)&&(moveDirection==0)&&(in>startPosition)){//向外移动index = i;min = computing;}else if((min>computing)&&(moveDirection==1)&&(in<startPosition)){//向里移动index = i;min = computing;}if((index == -1)&&(moveDirection == 0)){//若移动到尽头,则返回扫描moveDirection = 1;}else if((index == -1)&&(moveDirection == 1)){moveDirection = 0;}i++;}thisPosition = visitList.remove(index);//设置当前磁头,访问后移除totalMoving += Math.abs(startPosition-thisPosition);SCAN.startPosition = thisPosition;return thisPosition;}public static void display(){System.out.println("平均寻道时间是:"+(double)totalMoving/size);}}
- 操作系统-磁盘调度算法:先来先服务,最短寻道时间优先,scan算法
- 操作系统-磁盘调度算法:先来先服务,最短寻道时间优先,scan算法
- 操作系统实验之磁盘调度算法模拟(最短寻道时间优先SSTF 和 扫描算法SCAN)
- 操作系统算法 之 SCAN磁盘调度算法
- c# 磁盘调度算法:-最短寻道时间优先
- 操作系统 磁盘调度算法 先来先服务 最短寻道时间 扫描 循环扫描
- 操作系统磁盘调度算法
- 操作系统中磁盘调度算法(FIFO,SSTF,SCAN,C-SCAN)
- 操作系统中磁盘调度算法(FIFO,SSTF,SCAN,C-SCAN)
- 操作系统实验二(调度算法模拟-先进先出-时间片轮转法-优先服务调度算法)
- 磁盘调度算法(FCFS,SSTF,SCAN)
- Java模拟操作系统进程调度算法—先来先服务、短作业优先、高响比优先
- Java模拟操作系统进程调度算法—先来先服务、短作业优先、高响比优先
- 操作系统之磁盘调度算法
- 【操作系统 - 6】磁盘调度算法
- 【操作系统】磁盘臂调度算法
- 操作系统 磁盘调度综合算法
- 磁盘调度(先来先服务算法)
- 对话框调用View函数时的一个错误
- XAF之SplashScreenManager
- 编程新手——受用无穷的基本思想
- Java 线程的执行顺序
- 需求分析挑战之旅——疯狂的订餐系统
- 操作系统-磁盘调度算法:先来先服务,最短寻道时间优先,scan算法
- 10款CSS3按钮
- ASIHTTPRequest足够了吗?
- 鼠标坐标x,y
- 深入理解iphone开发中的delegate
- Java serialVersionUID的使用示例
- ADB常用的几个命令
- linux下搭建SVN服务器完全手册
- SSH2整合出现404的问题解决