当前位置:   article > 正文

磁盘调度算法 先来先服务(FCFS) 最短寻道时间优先(SSTF) Java实现_利用高级语言编写先来先服务fcfs、最短寻道时间优先sstf、scan、cscan算法。

利用高级语言编写先来先服务fcfs、最短寻道时间优先sstf、scan、cscan算法。

广东工业大学 操作系统实验

实验原理

在这里插入图片描述

代码实现

1. 先来先服务(FCFS)

import java.util.Scanner;

public class FCFS
{
	Scanner scan = new Scanner(System.in);
	
	int[] req;
	int num;
	int[] move;
	
	void input()
	{
		System.out.print("请输入进程数:");
		num = scan.nextInt();
		req = new int[num];
		move = new int[num];
		
		for(int i = 0; i < num; i++)
		{
			System.out.print("进程" + (i + 1) + "访问的磁道号:");
			req[i] = scan.nextInt();
		}
		
		System.out.println();
	}
	
	void search()
	{
		System.out.print("请输入开始的磁道号:");
		int start = scan.nextInt();
		System.out.println("\n-------从" + start + "号磁道开始-------\n");
		
		for(int i = 0; i < num; i++)
		{
			move[i] = Math.abs(start - req[i]);
			start = req[i];
		}
	}
	
	void show()
	{
		System.out.println("被访问的\t\t移动距离\n下一个磁道号\t(磁道数)\n");
		for(int i = 0; i < num; i++)
		{
			System.out.println(req[i] + "\t\t" + move[i]);
		}
		
		double sum = 0;
		
		for(int i : move)
		{
			sum += i;
		}
		
		System.out.println("平均寻道长度:" + sum / num);
	}

	FCFS()
	{
		System.out.println("----------先来先服务----------");
	}
	
	public static void main(String[] args)
	{
		FCFS fcfs = new FCFS();
		
		fcfs.input();
		fcfs.search();
		fcfs.show();
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71

2. 最短寻道时间优先(SSTF)

import java.util.Scanner;

public class SSTF
{
	Scanner scan = new Scanner(System.in);
	
	int[] req;
	int num;
	int[] move;
	int[] visit;
	
	void input()
	{
		System.out.print("请输入进程数:");
		num = scan.nextInt();
		req = new int[num];
		move = new int[num];
		visit = new int[num];
		
		for(int i = 0; i < num; i++)
		{
			System.out.print("进程" + (i + 1) + "访问的磁道号:");
			req[i] = scan.nextInt();
		}
		
		System.out.println();
	}
	
	void search()
	{
		System.out.print("请输入开始的磁道号:");
		int start = scan.nextInt();
		System.out.println("\n-------从" + start + "号磁道开始-------\n");
	
		for(int j = 0; j < num; j++)
		{
			int min = Integer.MAX_VALUE;
			int index = -1;
			for(int i = 0; i < num; i++)
			{
				if(req[i] != -1)
				{
					int temp = Math.abs(start - req[i]);
					
					if(temp < min)
					{
						min = temp;
						index = i;
					}
				}
			}
			
			start = req[index];
			visit[j] = req[index];
			req[index] = -1;
			move[j] = min;
		}
	}
	
	void show()
	{
		System.out.println("被访问的\t\t移动距离\n下一个磁道号\t(磁道数)\n");
		for(int i = 0; i < num; i++)
		{
			System.out.println(visit[i] + "\t\t" + move[i]);
		}
		
		double sum = 0;
		
		for(int i : move)
		{
			sum += i;
		}
		
		System.out.println("平均寻道长度:" + sum / num);
	}

	SSTF()
	{
		System.out.println("-------最短寻道时间优先-------");
	}
	
	public static void main(String[] args)
	{
		SSTF sstf = new SSTF();
		
		sstf.input();
		sstf.search();
		sstf.show();
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/395021
推荐阅读
相关标签
  

闽ICP备14008679号