文档介绍:word
word
1 / 26
word
操作系统课程设计任务书
题 目: 磁盘调度算法
院 系:
专 业:
班 级:
姓 名: 与先来先服务、算法比拟,大幅度地减少了寻找时间,因而缩短了为各访问者请求服务的平均时间,也就提高了系统效率。
但最短查找时间优先〔SSTF〕调度,FCFS会引起读写头在盘面上的大围移动,SSTF查找距离磁头最短〔也就是查找时间最短〕的请求作为下一次服务的对象。SSTF查找模式有高度局部化的倾向,会推迟一些请求的服务,甚至引起无限拖延〔又称饥饿〕。
SCAN 算法又称电梯调度算法。SCAN算法是磁头前进方向上的最短查找时间优先算法,它排除了磁头在盘面局部位置上的往复移动,SCAN算法在很大程度上消除了SSTF算法的不公平性,但仍有利于对中间磁道的请求。
word
word
8 / 26
word
“电梯调度〞算法是从移动臂当前位置开始沿着臂的移动方向去选择离当前移动臂最近的那个柱访问者,如果沿臂的移动方向无请求访问时,就改变臂的移动方向再选择。这好比乘电梯,如果电梯已向上运动到4层时,依次有3位乘客生、伍生、生在等候乘电梯。他们的要:生在2层等待去10层;伍生在5层等待去底层;生在8层等待15层。由于电梯目前运动方向是向上,所以电梯的形成是先把乘客生从8层带到15层,然后电梯换成下行方向,把乘客伍生从5层带到底层,电梯最后再调换方向,把乘客生从2层送到10层。
但是,“电梯调度〞算法在实现时,不仅要记住读写磁头的当前位置,还必须记住移动臂的当前前进方向。
2、概要设计
通过C语言的编程,设计程序模拟先来先服务FCFS,最短寻道时间优先SSTF,和扫描SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向〔正向或者反向〕,分别利用不同的磁盘调度算法访问磁道序列,给出磁头每一次移动的过程,算出磁头移动的距离,继而计算每种算法的平均寻道长度。
word
word
8 / 26
word
C语言、操作系统磁盘调度算法、C++。
Window10、VC++。
3、详细设计
先来先服务算法〔FCFS〕:
完毕
Avg=sum/(m)
j<m
目前的位置变为当前的位置j++
输出磁盘调度序列array[j]
磁头移动总距离
Sum+=abs(array[j]-array[i])
磁头移动距离
Sum=abs(now-array[0])
输入当前磁道号now
开始
word
word
9 / 26
word
最短寻道时间优先算法(SSTF):
开始
word
word
10 / 26
word
完毕
扫描SCAN算法:
开始
word
word
11 / 26
word
完毕
先来先服务算法〔FCFS〕:
void FCFS(vector<int>m_vec,int position){ //先来先服务算法
word
word
12 / 26
word
dis = 0;
average_distance = 0;
for(vector<int>::iterator it=();it!=();it++){
dis += abs(position-*it);
Sleep(500);
cout<<"->"<<*it;
position = *it;
}
pute_dis(m_vec,dis,average_distance);
}
最短寻道时间优先算法(SSTF):
void SSTF(vector<int>m_vec,int position){ //最短寻道时间算法
dis = 0;
average_distance = 0;
sort((),()); //从小到大排序
int i = 0;
for(vector<int>::iterator it=();it!=();it++){
if(position >= *it)
i++;
}
int count = 0;
int left = i-1;
int right = i;
while(