磁盘调度算法(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语言实现)——大三操作系统实验-创新互联
标题网址:http://myzitong.com/article/pjjpi.html