磁盘调度算法 先来先服务(FCFS) 最短寻道时间优先(SSTF) Java实现

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

实验原理

在这里插入图片描述

代码实现

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();
	}
}

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();
	}
}
  • 3
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值