有以下四种算法
FCFS
SSTF
SCAN
CSCAN
四种算法
def read_requests(file_path):
"""从文件中读取磁盘请求序列和当前磁头位置"""
with open(file_path, 'r') as file:
lines = file.readlines()
requests = list(map(int, lines[0].strip().split(',')))
current_head = int(lines[1].strip())
return requests, current_head
def fcfs(requests, current_head):
"""先来先服务 (FCFS)"""
total_seek_time = 0
print("磁盘请求序列:", requests)
print("当前磁头位置:", current_head)
for req in requests:
total_seek_time += abs(current_head - req)
current_head = req
average_seek_time = total_seek_time / len(requests)
print("磁盘扫描序列:", requests)
print("总寻道时间:", total_seek_time)
print("平均寻道时间:", average_seek_time)
def sstf(requests, current_head):
"""最短寻道时间优先 (SSTF)"""
total_seek_time = 0
sequence = []
remaining = requests[:]
print("磁盘请求序列:", requests)
print("当前磁头位置:", current_head)
while remaining:
closest = min(remaining, key=lambda x: abs(x - current_head))
total_seek_time += abs(current_head - closest)
current_head = closest
sequence.append(closest)
remaining.remove(closest)
average_seek_time = total_seek_time / len(requests)
print("磁盘扫描序列:", sequence)
print("总寻道时间:", total_seek_time)
print("平均寻道时间:", average_seek_time)
def scan(requests, current_head, direction):
"""扫描调度 (SCAN)"""
requests.sort()
total_seek_time = 0
sequence = []
print("磁盘请求序列:", requests)
print("当前磁头位置:", current_head)
print("扫描方向:", "向外" if direction == 1 else "向内")
if direction == 1: # 向外扫描
right = [req for req in requests if req >= current_head]
left = [req for req in requests if req < current_head]
sequence = right + left[::-1]
else: # 向内扫描
left = [req for req in requests if req <= current_head]
right = [req for req in requests if req > current_head]
sequence = left[::-1] + right
total_seek_time = sum(abs(sequence[i] - sequence[i - 1]) for i in range(1, len(sequence)))
total_seek_time += abs(sequence[0] - current_head)
average_seek_time = total_seek_time / len(requests)
print("磁盘扫描序列:", sequence)
print("总寻道时间:", total_seek_time)
print("平均寻道时间:", average_seek_time)
def cscan(requests, current_head):
"""循环扫描调度 (CSCAN)"""
requests.sort()
total_seek_time = 0
sequence = []
print("磁盘请求序列:", requests)
print("当前磁头位置:", current_head)
right = [req for req in requests if req >= current_head]
left = [req for req in requests if req < current_head]
sequence = right + left
total_seek_time = sum(abs(sequence[i] - sequence[i - 1]) for i in range(1, len(sequence)))
total_seek_time += abs(sequence[0] - current_head)
average_seek_time = total_seek_time / len(requests)
print("磁盘扫描序列:", sequence)
print("总寻道时间:", total_seek_time)
print("平均寻道时间:", average_seek_time)
if __name__ == "__main__":
file_path = "input.txt" # 假设输入文件名为 input.txt
requests, current_head = read_requests(file_path)
while True:
print("\n请选择调度算法:")
print("1. 先来先服务 (FCFS)")
print("2. 最短寻道时间优先 (SSTF)")
print("3. 扫描调度 (SCAN)")
print("4. 循环扫描 (CSCAN)")
print("5. 退出")
choice = int(input("输入你的选择 (1-5): "))
if choice == 1:
fcfs(requests, current_head)
elif choice == 2:
sstf(requests, current_head)
elif choice == 3:
direction = int(input("请输入扫描方向 (0 表示向外,1 表示向内): "))
scan(requests, current_head, direction)
elif choice == 4:
cscan(requests, current_head)
elif choice == 5:
print("退出程序。")
break
else:
print("无效选择,请重新输入!")
input格式

8624

被折叠的 条评论
为什么被折叠?



