假定一个移动头磁盘的磁头在50柱面位置,正向大号运动,其后的请求服务柱面序列为:86,147,91,177,132,100,32,50,70,15,189,用电梯调度算法时,臂的总移动柱面数是多少?
时间: 2024-04-02 21:33:08 浏览: 57
根据电梯调度算法,磁头先向上移动,直到到达最高的请求服务柱面,然后再向下移动,直到到达最低的请求服务柱面,这样就可以依次服务请求。
在这个问题中,电梯调度算法的执行过程如下:
1. 磁头从50柱面向上移动,到达147柱面(向上移动97个柱面)。
2. 磁头向上移动,到达177柱面(向上移动30个柱面)。
3. 磁头向下移动,到达132柱面(向下移动45个柱面)。
4. 磁头向下移动,到达100柱面(向下移动32个柱面)。
5. 磁头向下移动,到达86柱面(向下移动14个柱面)。
6. 磁头向下移动,到达70柱面(向下移动16个柱面)。
7. 磁头向下移动,到达32柱面(向下移动38个柱面)。
8. 磁头向上移动,到达15柱面(向上移动17个柱面)。
9. 磁头向上移动,到达91柱面(向上移动76个柱面)。
10. 磁头向上移动,到达132柱面(向上移动41个柱面)。
11. 磁头向上移动,到达189柱面(向上移动57个柱面)。
因此,臂的总移动柱面数是:97+30+45+32+14+16+38+17+76+41+57=463个柱面。
相关问题
假定一个移动头磁盘的磁头在50柱面位置,正向大号运动,其后的请求服务柱面序列为:86,147,91,177,132,100,32,50,70,15,189,用电梯调度算法时,臂的总移动柱面数是多少
根据电梯调度算法,移动头磁盘的磁头在50柱面位置开始正向大号运动,服务请求柱面序列中的请求按照升序排列,直到没有服务请求为止,因此移动头磁盘的磁头在每个服务请求柱面中,只会按照升序移动,直到达到最大的服务请求柱面,然后就会掉头向反方向运动,继续处理后面的服务请求。
按照以上算法,移动头磁盘处理请求的顺序为:50 -> 70 -> 86 -> 91 -> 100 -> 132 -> 147 -> 177 -> 189 -> 15 -> 32,总移动柱面数为:
(70-50) + (86-70) + (91-86) + (100-91) + (132-100) + (147-132) + (177-147) + (189-177) + (189-15) + (32-15) = 925
因此,移动头磁盘的磁头总共需要移动925个柱面。
用python算法写下面题目 驱动调度-采用电梯调度算法排列出磁盘请求响应次序 题目描述: 要求输入一个柱面访问请求序列以及当前磁头所在柱面号和移动方向,输出采用电梯调度算法时移动臂响应的柱面访问序列 输入格式: 程序要求输入3行,以回车符号作为分隔 第1行是2个整数n、m,之间用空格隔开,n表示当前磁头所在的柱面号;m表示第二行输入m个数 第2行是m个整数,数之间以空格作为分隔,表示柱面访问请求序列 第3行是数字 -1 或 1,当为 -1 时表示移动臂向柱面号减小方向移动,当为 1 时表示移动臂向柱面号增大方向移动 输出格式: 输出m个整数,数之间以空格作为分隔,采用电梯调度算法时移动臂响应的柱面访问序列。 测试数据: 样例输入1: 15 10 24 38 2 110 43 36 5 11 6 180 -1 样例输出1: 11 6 5 2 24 36 38 43 110 180
以下是Python代码实现。
```python
n, m = map(int, input().split())
request = list(map(int, input().split()))
direction = int(input())
# 初始方向为向右,即增大方向
move_direction = 1
# 将请求按照方向排序
if direction == -1:
request = sorted(request, reverse=True)
move_direction = -1
else:
request = sorted(request)
# 加入起始点
request.append(n)
request.insert(0, n)
cur_pos = request.index(n)
result = []
while len(request) > 2:
if move_direction == 1:
for i in range(cur_pos+1, len(request)):
result.append(request[i])
for i in range(cur_pos-1, -1, -1):
result.append(request[i])
else:
for i in range(cur_pos-1, -1, -1):
result.append(request[i])
for i in range(cur_pos+1, len(request)):
result.append(request[i])
cur_pos = 0
request = result.copy()
result = []
print(" ".join(str(x) for x in request[1:-1]))
```
算法流程如下:
1. 读取输入数据,将请求按照方向排序,并加入起始点和终止点。
2. 初始化当前位置为起始点的位置,初始化结果列表为空。
3. 当请求列表长度大于2时,根据移动方向依次遍历请求列表,将结果添加到结果列表中。
4. 更新当前位置为起始点的位置,将请求列表替换为结果列表,清空结果列表。
5. 输出结果列表中除起始点和终止点的所有元素。
注意:这里没有考虑请求列表为空的情况,需要根据实际情况进行处理。
阅读全文