磁盘调度算法(C语言实现)——大三操作系统实验-创新互联

目录

为敖汉等地区用户提供了全套网页设计制作服务,及敖汉网站建设行业解决方案。主营业务为成都网站制作、网站建设、敖汉网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

1.先来先服务算法(FCFS)

1.算法原理

2.实验要求

3.算法流程图

4.代码分析

变量

主函数

5.测试结果及其分析

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

1.算法原理

2.实验要求

3.算法流程图

4.代码分析

变量

主函数

5.测试结果及其分析


1.先来先服务算法(FCFS) 1.算法原理

根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次地得到处理,不会出现某一进程的请求长期得不到满足的情况。但此算法由于未对寻道进行优化,致使平均寻道时间可能较长。

2.实验要求

根据上述算法的特点,设计数据结构并编程实现。

3.算法流程图

4.代码分析
#include#include#includeusing namespace std;
struct disk {
	int move;
	int number;
};
int  main() {
	int n,sum=0;
	float res;
	struct disk a[100];
	cout<< "请输入开始轨道号"<>a[0].number;
	cout<< "请输入访问的进程数目"<< endl;
	cin >>n;
	for (int i = 1; i< n + 1; i++) {
		cin >>a[i].number;
	}
	for (int i = 1; i< n + 1; i++) {
		a[i].move = abs(a[i - 1].number - a[i].number);
		sum += a[i].move;
	}
	res = float(sum) / n;
	cout<< "(从"<< a[0].number<< "号轨道开始)"<< endl;
	cout<< "被访问的下一个轨道号  移动距离(轨道数)"<< endl;
	for (int i = 1; i< n + 1; i++) {
		cout<< setiosflags(ios::left);
		cout<< setw(22)<
变量

disk是进程的数据结构,move为它的磁道数,number为对应的磁道号,n为还需进入的进程数,sum 为寻道长度总和,res是平均寻道长度。

主函数

主要思想是a[i].move = abs(a[i - 1].number - a[i].number),其中abs是求绝对值,若使用abs,必须加上头文件iomanip

其次是输出格式的问题,setiosflags(ios::left)表示向左对齐,setw()中的参数表明向左对齐几格;

setprecision()中表示结果保存几位有效数字,加上fixed就是小数点保留几位

5.测试结果及其分析

|55-100|=45,|58-55|=3..........以此类推

2.最短寻道时间优先算法(SSTF) 1.算法原理

该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,但这种算法不能保证平均寻道时间最短。SSTF算法平均每次磁头移动的距离明显低于FCFS算法的距离,因而SSTF较之FCFS有更好的寻道性能。

2.实验要求

根据上述算法的特点,设计数据结构并编程实现。

3.算法流程图

4.代码分析
#include#includeusing namespace std;
struct disk {
	int finish=0;
	int move;
	int number;
};
int main() {
	int n, index=0,index1=0,temp,min=999,sum=0;
	float res;
	struct disk a[200];
	cout<< "请输入轨道开始号"<< endl;
	cin >>a[0].number;
	cout<< "请输入进入的进程数目"<< endl;
	cin >>n;
	for (int i = 1; i< n + 1; i++) {
		cin>>a[i].number;
	}
	cout<< "(从"<< a[0].number<< "号轨道开始)"<< endl;
	cout<< "被访问的下一个轨道号  移动距离(轨道数)"<< endl;
	for (int j = 1; j< n + 1; j++) {
		for (int i = 1; i< n + 1; i++) {
			if (a[i].finish == 0) {
				temp = abs(a[i].number - a[index1].number);
				if (temp< min) {
					index = i;
					min = temp;
				}
			}
		}
		a[index].finish = 1;
		a[index].move=min;
		sum += a[index].move;
		index1 = index;
		min = 999;
		cout<< setiosflags(ios::left);
		cout<< setw(22)<< a[index].number;
		cout<< a[index].move<< endl;
	}
	res = float(sum) / n;
	cout<< "平均寻道长度: "<< setprecision(1)<< fixed<< res<< endl;
	return 0;
}
变量

disk是进程的数据结构,move为它的磁道数,number为对应的磁道号,finish=0表示未完成,=1表示完成,n为还需进入的进程数,sum 为寻道长度总和,res是平均寻道长度,min表示距离上一个轨道号最近的距离,index表示距离最近对应的进程索引值。

主函数

对于未完成的进程,求出距离上一个轨道号最近的进程,通过遍历比较得出index和min,每进行一次遍历(找到一个能输出的进程),min要进行更新,index就是输出的进程索引值。

5.测试结果及其分析

有点误差,应该是四舍五入问题,不要紧

距离100轨道号最近的是90,此时90对应的进程完成,剩下未完成的进程中距离90最近的是58,以此类推。 

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享名称:磁盘调度算法(C语言实现)——大三操作系统实验-创新互联
文章URL:http://azwzsj.com/article/pjjpi.html