操作系统课程设计磁盘调度算法
操作系统课程设计磁盘调度算法
学 院 专 业 学 号 学生姓名 指导教师姓名
2014年3月 20 日
目
录
第1部分 课设简介 ................................ 3 1.1 课程设计题目 ............................... 3 1.2 课程设计目的 ............................... 3 1.3 课程设计内容 ............................... 3 1.4 时间安排 ................................... 3 第2部分 实验原理分析 ............................ 5 2.1问题描述 ........................................................................ 5 2.2流程图 ..................................... 6 第3部分 主要的功能模块 .......................... 7 3.1主要的函数 ................................. 7 3.2 测试用例及运行结果 ......................... 9 第4部分 源代码 ................................. 12 第5部分 总结及参考文献 ......................... 18 5.1 总结 ...................................... 18 5.2 参考文献 ................................. 18
第1部分 课设简介
1.1 课程设计题目 磁盘调度算法1 1.2 课程设计目的
操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
1)进一步巩固和复习操作系统的基础知识。
2)培养学生结构化程序、模块化程序设计的方法和能力。 3)提高学生调试程序的技巧和软件设计的能力。
4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。
1.3 课程设计内容
设计并实现一个本别利用下列磁盘调度算法进行磁盘调度的模拟程序。
1、先来先服务算法FCFS 2、最短寻道时间优先算法SSTF 设计要求:
1. 磁头初始磁道号,序列长度,磁道号序列等数据可从键
盘输入,也可从文件读入。
2. 最好能实现磁道号序列中磁道号的动态增加。 3. 磁道访问序列以链表的形式存储
4. 给出各磁盘调度算法的调度顺序和平均寻道长度
1.4 时间安排
1)分析设计贮备阶段 (1 天) 2)编程调试阶段 (7 天) 3)写课程设计报告、考核(2 天)
第2部分 实验原理分析
2.1问题描述
1.先来先服务算法 FCFS
这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。
2.最短寻道时间优先算法 SSTF
该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。
第3部分 主要的功能模
3.1主要函数 文件建立
void CreateFiles(char name[10]) {
int i;
FILE*fp;
if((fp=fopen(name,"a+"))==NULL) { }
cout
文件读取
void ReadFiles(char name[10]) {
FILE*fp;
if((fp=fopen(name,"r"))==NULL) { }
cout
先来先服务算法
输入磁道号序列,按先来先服务的策略输出磁盘请求序列,求平均寻
道长度,输出寻道顺序。
for(i=0;i
{ }
cout
cout
最短寻道时间优先
输入磁道号序列,比较各磁道与初始磁道之间的寻道次数,按最短寻道时间优先的策略输出磁盘请求序列,求平均寻道长度,输出寻道顺序。
for(j=0;j
}
cout
sum+=abs(s-k); k=s;
if(abs(c[j]-k)
s=c[j]; p=j;
c[p]=c[i];
cout
3.2系统测试
程序运行实例如下:
1. 初始界面:
2. 选择1,运行界面如下:
第4部分 源代码
#include #include
using namespace std;
int a[20]={-1}; int n=0;
void CreateFiles(char name[10]) {
int i;
FILE*fp;
}
if((fp=fopen(name,"a+"))==NULL) { }
cout
cin>>n; a[19]=n;
cout
for(i=0;i
for(int p=0;p
if(fwrite(&a[p],sizeof(int),1,fp)!=1) { }
printf("ERROR!\n");
cout>a[i];
void ReadFiles(char name[10]) {
n=a[19]; FILE*fp;
if((fp=fopen(name,"r"))==NULL) { }
for(int i=0;i
fread(&a[i],sizeof(int),1,fp);
cout
}
void FCFS(int b[],int n,int init) { }
void SSTF(int b[],int n,int k) {
int i,j,s,sum=0,p; int c[20]; for(i=0;i
for(i=n-1;i>=0;i--) {
s=c[0]; p=0;
for(j=0;j
if(abs(c[j]-k)
for(i=0;i
cout
cout
}
}
}
p=j;
c[p]=c[i];
cout
cout
void main() {
l:while(k)
switch(k) {
case 1:
cout>n;
for(i=0;i
{
cout
cout
cout>k; int i,k=1,init; char names[10];
}
cin>>a[i];
cout>init; while(k)
cout>k; switch(k)
{
case 1:FCFS(a,n,init);
break; break; system("cls"); goto l; break;
case 2:SSTF(a,n,init); case 3:
cout
cout
"
"
cout
case 0:exit(0);
}
}
cout>k;
break;
cout>names;
CreateFiles(names); break;
cout>names; ReadFiles(names);
cout>init; while(k)
cout>k; switch(k)
cout
case 2:
case 3:
cout
"
"
cout
}
}
}
}
case 1:FCFS(a,n,init);
break; break;
case 2:SSTF(a,n,init); case 3:system("cls"); goto l;
break; case 0:exit(0); default: }
cout>k;
break; exit(0); break;
cout>k; break;
case 0:
default:
第5部分 总结及参考文献
5.1总结
程序可实现先来先服和最短寻到的磁盘调度算法,基本实现任
务书的要求。
操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。
5.2参考文献
【1】《操作系统》(第三版).汤小丹,梁红兵.西安电子科技大学出版社.2007
【2】《C程序设计语言》.徐宝文,李志.机械工业出版社.2004 【3】《数据结构》(C语言版).严蔚敏 ,吴伟民.清华大学出版社.2007