FCFS磁盘调度算法(C语言实现)

1、实验目的

1)调试磁盘调度算法的模拟程序以加深对磁盘调度算法的理解;

2)掌握磁盘调度数据的原理;

3)掌握FCFS磁盘调度算法的原理。

2、实验要求

编写并调试一个磁盘调度模拟程序,采用FCFS算法。已知进程运行过程中进程先后要访问的磁道数、磁头当前位置,要求使用FCFS算法输出磁盘中读取数据磁头移动的磁道数和平均寻道数(保留到小数点后一位)

3、算法描述

先来先服务(FCFS,First Come First Served),这是一种最简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次地得到处理,不会出现某一进程的请求长期得不到满足的情况。下图示出了有9个进程先后提出磁盘I/O请求时,当前磁道为100,按FCFS算法进行调度的情况。(FCFS算法平均寻道距离较大,故FCFS算法仅适用于请求磁盘I/O的进程数目较少的场合。)

FCFS磁盘调度算法(C语言实现)_第1张图片

 

4、源程序代码

#include 
#include 
void FCFS(int m,int n,int track_number[]){
	int fcfs_seq[100][2];
	int pre_track_number = m;
	double ave_seek = 0;
	for(int i = 0; i < n; i++){
		fcfs_seq[i][0] = track_number[i];
		fcfs_seq[i][1] = abs(pre_track_number - track_number[i]);
		pre_track_number = track_number[i];
		ave_seek += fcfs_seq[i][1];
	}
	ave_seek /= n;
	printf("\n被访问的下一个磁道号\t移动距离\n");
	for(i = 0; i < n; i++){
		printf("%d\t\t\t%d\n",fcfs_seq[i][0],fcfs_seq[i][1]);
	} 
	printf("平均寻道长度:%.1lf\n", ave_seek);
} 


int main(){
	int m;//磁道针起始位置
	int n;//寻道的磁道数
	int  track_number[100];//
	printf("请输入磁头当前位置:"); 
	scanf("%d",&m);
	printf("请输入要访问的磁道个数:");
	scanf("%d",&n);
	printf("请输入磁道访问序列:\n");
	for(int i = 0; i < n; i++){
		scanf("%d",&track_number[i]);
	} 
	FCFS(m,n,track_number);
	return 0;
}

5、运行结果

FCFS磁盘调度算法(C语言实现)_第2张图片

 

你可能感兴趣的:(操作系统,算法)