设某磁盘有200个柱面,编号为0,1,2,…,199,磁头刚从第140道移到第143道完成了读写。若此时刻有9个磁盘请求分别对如下各道进行读写:86、147、91、177、94、150、102、175

设某磁盘有200个柱面,编号为012,…,199,磁头刚从第140道移到第143道完成了读写。若此时刻有9个磁盘请求分别对如下各道进行读写:861479117794150102175130,分别求FCFSSSTFSCANCSCAN算法的平均寻道长度

FCFS:
访问顺序:86、147、91、177、94、150、102、175、130
由题可得磁头在143道开始访问,所以总访问磁道数为:
57+61+56+86+83+56+48+73+45=565
所以平均寻道长度是:565/9=62.8;
SSTF:
访问顺序:147、150、130、102、94、91、86、175、177
总访问磁道数为:4+3+20+28+8+3+5+89+2=162
平均寻道长度是:162/9=18
SCAN:
访问顺序:147、150、175、177、130、102、94、91、86
总访问磁道数:4+3+25+2+47+28+8+3+5=125
平均寻道长度:125/9=13.9
CSCAN:
访问顺序:147、150、175、177、86、91、94、102、130
总访问磁道数:4+3+25+2+91+5+3+8+28=169
平均寻道长度:169/9=18.8

某移动臂磁盘的柱面由外向里从0开始顺序编号,假定当前磁头停在100号柱面而且移动方向是向外的,现有一个请求队列在等待访问磁盘,访问的柱面号分别为190101608090125302014025。请给出分别采用SSTF和电梯调度算法处理上述请求的次序,并分别计算出它们的平均寻道长度。

SSTF:
访问顺序:90、80、125、140、160、190、30、25、20、10
总访问磁道数:10+10+45+15+20+30+160+5+5+10=310
平均寻道长度:310/10=31
SCAN:
访问顺序:90、80、30、25、20、10、125、140、160、190
总的访问磁道数:10+10+50+5+5+10+115+15+20+30=270
平均寻道长度:270/10=27

 

1.可以删除F1,因为F1不是共享文件。J1不一定能。因为J1是被多个文件所共享,能否删除J1取决于文件系统实现共享的方法。如果是基于索引结点的共享方法,则因删除后存在指针悬空问题不能删除J1结点;如果采用基于符号共享的方法,则可以删除J1结点。

H1不一定能。由于H1的子目录中存在共享文件J1,而J1结点本身不一定能被删除,所以H1也不一定能被删除。

2.可以建立,因为D1是目录,而J1是普通文件,所以可以建立D1 到J1的符号链接

3.打印J2  Pr J2   打印l2  Pr /A3/E2/H2/l2

### SSTF(最短寻时间优先)算法 SSTF 算法选择要求访问的磁与当前磁头所在的磁距离最近的进程,以使每次的寻时间最短 [^3]。 从 34 号柱面开始,计算每个请求与当前磁头位置的距离,选择距离最近的请求进行处理,依次类推。 - 访问序列:47 -> 50 -> 56 -> 89 -> 90 -> 23 -> 11 -> 0 -> 160 - 计算寻长度: - 从 34 到 47,寻长度为 |47 - 34| = 13 - 从 47 到 50,寻长度为 |50 - 47| = 3 - 从 50 到 56,寻长度为 |56 - 50| = 6 - 从 56 到 89,寻长度为 |89 - 56| = 33 - 从 8990,寻长度为 |90 - 89| = 1 -90 到 23,寻长度为 |90 - 23| = 67 - 从 23 到 11,寻长度为 |23 - 11| = 12 - 从 11 到 0,寻长度为 |11 - 0| = 11 -0 到 160,寻长度为 |160 - 0| = 160 - 总寻长度为 13 + 3 + 6 + 33 + 1 + 67 + 12 + 11 + 160 = 306 - 平均寻长度为 306 / 9 = 34 ### SCAN(扫描)算法 SCAN 算法磁头始终按个方向处理请求,假磁头柱面号增大的方向移动 [^2]。 从 34 号柱面开始,先处理大于 34 号柱面请求,直到最大柱面,再反向处理小于 34 号柱面请求- 访问序列:47 -> 50 -> 56 -> 89 -> 90 -> 160 -> 23 -> 11 -> 0 - 计算寻长度: - 从 34 到 47,寻长度为 |47 - 34| = 13 - 从 47 到 50,寻长度为 |50 - 47| = 3 - 从 50 到 56,寻长度为 |56 - 50| = 6 - 从 56 到 89,寻长度为 |89 - 56| = 33 - 从 8990,寻长度为 |90 - 89| = 1 -90 到 160,寻长度为 |160 - 90| = 70 - 从 160 到 23,寻长度为 |160 - 23| = 137 - 从 23 到 11,寻长度为 |23 - 11| = 12 - 从 11 到 0,寻长度为 |11 - 0| = 11 - 总寻长度为 13 + 3 + 6 + 33 + 1 + 70 + 137 + 12 + 11 = 286 - 平均寻长度为 286 / 9 ≈ 31.78 ### 代码实现(Python) ```python # SSTF 算法 def sstf(current_head, requests): requests = requests.copy() sequence = [] total_seek_length = 0 while requests: min_distance = float(&#39;inf&#39;) next_request = None for request in requests: distance = abs(request - current_head) if distance < min_distance: min_distance = distance next_request = request sequence.append(next_request) total_seek_length += min_distance current_head = next_request requests.remove(next_request) average_seek_length = total_seek_length / len(sequence) return sequence, average_seek_length # SCAN 算法 def scan(current_head, requests): requests = requests.copy() requests.sort() index = 0 while index < len(requests) and requests[index] < current_head: index += 1 right = requests[index:] left = requests[:index] left.reverse() sequence = right + left total_seek_length = 0 for i in range(len(sequence)): if i == 0: total_seek_length += abs(sequence[i] - current_head) else: total_seek_length += abs(sequence[i] - sequence[i - 1]) average_seek_length = total_seek_length / len(sequence) return sequence, average_seek_length current_head = 34 requests = [56, 23, 47, 90, 11, 0, 160, 89, 50] sstf_sequence, sstf_avg = sstf(current_head, requests) scan_sequence, scan_avg = scan(current_head, requests) print("SSTF 访问序列:", sstf_sequence) print("SSTF 平均寻长度:", sstf_avg) print("SCAN 访问序列:", scan_sequence) print("SCAN 平均寻长度:", scan_avg) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值