磁盘调度
磁盘调度中寻道时间直接影响到数据访问的快慢,处理好磁盘寻道时间是关键
实验原理
先来先服务(FCFS)
基本思想:按照输入输出请求到达的顺序,逐一完成访问请求,它只考虑请求访问者的先后次序,而不考虑它们要访问的物理位置
最短寻道时间优先(SSTF)
基本思想:先对最靠近当前柱面位置的请求进行服务,即先对寻找时间最短的请求进行服务。SSTF算法总是让寻找时间最短的那个请求先服务,而不管请求访问者到来的先后次序。
实验内容
算法实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| #include <stdio.h> #include<iostream> using namespace std; int Getmin(int a[],int i,int temp) { int min = 65535,mini=0,j=0; while (i>0) { if (abs(a[j]-temp) <= abs(min-temp)) { min = a[j]; mini = j; } j++; i--; } a[mini] = 65536; return min; } void FCFS(int a[]) { cout << "被访问的下一个磁盘号" << "\t\t" << "移动距离" << endl; int i = 0,temp=100,count=0,dis=0; while (a[i] != 0) { dis= abs(temp - a[i]); temp = a[i]; cout << a[i] << "\t\t\t\t" << dis << endl; count += dis; i++; } cout << "平均寻道长度" << count * 1.0 / i << endl; } void SSTF(int a[],int j) { cout << "被访问的下一个磁盘号" <<"\t\t" << "移动距离" << endl; int i = j, temp = 100, count = 0, dis = 0; while (j> 0) { int ele = Getmin(a, i,temp); dis = abs(temp - ele); temp = ele; cout << ele << "\t\t\t\t" << dis << endl; count += dis; j--; } cout << "平均寻道长度" << count * 1.0 / i << endl; } int main() { int a[30] = {0 },i=0,j=0; while (j==0||cin.get() != '\n') { cin >> a[j]; j++; } SSTF(a,j); }
|
内容演示
FCFS
SSTF
实验总结
先来先服务算法(FCFS)First Come First Service
这是一种比较简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。
最短寻道时间优先算法(SSTF) Shortest Seek Time First
该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。