操作系统模拟之磁盘寻道算法。
文件共1份,代码如下:

import math
import random
import copydef alo_fcfs():print("您选择了FCFS算法,执行结果如下:")print("当前磁道号 下一磁道号 绝对差")print('{:6d}{:10d}{:8d}'.format(start_numer, disk_queue[0], abs(start_numer - disk_queue[0])))sum_distance = abs(start_numer - disk_queue[0])for i in range(disk_queue_length - 1):sum_distance = sum_distance + abs(disk_queue[i] - disk_queue[i + 1])print('{:6d}{:10d}{:8d}'.format(disk_queue[i], disk_queue[i + 1], abs(disk_queue[i] - disk_queue[i + 1])))print('{:6d}       {}    {}'.format(disk_queue[i], "None", "None"))print('寻道序列总长{:d},FCFS算法的平均寻道长度为{:.2f}'.format(sum_distance, sum_distance / (disk_queue_length + 1)))def alo_sstf():print("您选择了SSTF算法,执行结果如下:")print("当前磁道号 下一磁道号 绝对差")sum_distance = 0last_number = start_numertemp_queue = copy.deepcopy(disk_queue)while len(temp_queue) > 0:index = 0min_diff = 0x3f3f3f3ffor i in range(len(temp_queue)):if abs(temp_queue[i] - last_number) < min_diff:index = imin_diff = abs(temp_queue[i] - last_number)print('{:6d}{:10d}{:8d}'.format(last_number, temp_queue[index], min_diff))last_number = temp_queue[index]sum_distance = sum_distance + min_difftemp_queue.pop(index)print('{:6d}       {}    {}'.format(last_number, "None", "None"))print('寻道序列总长{:d},SSTF算法的平均寻道长度为{:.2f}'.format(sum_distance, sum_distance / (disk_queue_length + 1)))def cal(temp_queue, start_number, index, left1, left2, right1, right2, step1, step2):last_number = start_numberprint('{:6d}{:10d}{:8d}'.format(last_number, temp_queue[index], abs(last_number - temp_queue[index])))sum_distance = abs(last_number - temp_queue[index])last_number = temp_queue[index]for j in range(left1, right1, step1):print('{:6d}{:10d}{:8d}'.format(last_number, temp_queue[j], abs(last_number - temp_queue[j])))sum_distance = sum_distance + abs(last_number - temp_queue[j])last_number = temp_queue[j]for j in range(left2, right2, step2):print('{:6d}{:10d}{:8d}'.format(last_number, temp_queue[j], abs(last_number - temp_queue[j])))sum_distance = sum_distance + abs(last_number - temp_queue[j])last_number = temp_queue[j]print('{:6d}       {}    {}'.format(last_number, "None", "None"))print('寻道序列总长{:d},FCFS算法的平均寻道长度为{:.2f}'.format(sum_distance, sum_distance / (disk_queue_length + 1)))def alo_scan():print("您选择了SCAN算法,执行结果如下:")print("请继续选择当前磁头运动方向")print("由低到高请输入1")print("由高到低请输入2")last_number = start_numerdirection_choice = int(input())temp_queue = copy.deepcopy(disk_queue)temp_queue.sort()print()print("当前磁道号 下一磁道号 绝对差")if direction_choice == 1:for j in temp_queue:if j > start_numer:index = temp_queue.index(j)breakcal(temp_queue, start_numer, index, index + 1, index - 1, disk_queue_length, -1, 1, -1)elif direction_choice == 2:for j in range(disk_queue_length - 1, -1, -1):if temp_queue[j] < start_numer:index = jbreakcal(temp_queue, start_numer, index, index - 1, index + 1, -1, disk_queue_length, -1, 1)def alo_cscan():print("您选择了CSCAN算法,执行结果如下:")print("请继续选择当前磁头运动方向")print("由低到高请输入1")print("由高到低请输入2")last_number = start_numerdirection_choice = int(input())temp_queue = copy.deepcopy(disk_queue)temp_queue.sort()print()print("当前磁道号 下一磁道号 绝对差")if direction_choice == 1:for j in temp_queue:if j > start_numer:index = temp_queue.index(j)breakcal(temp_queue, start_numer, index, index + 1, 0, disk_queue_length, index, 1, 1)elif direction_choice == 2:for j in range(disk_queue_length - 1, -1, -1):if temp_queue[j] < start_numer:index = jbreakcal(temp_queue, start_numer, index, index - 1, disk_queue_length - 1, -1, index, -1, -1)if __name__ == "__main__":print("欢迎进入操作系统演示之磁盘寻道算法")print("现在开始数据初始化")print("请输入磁盘寻道序列长度(10-20,含端点):")disk_queue_length = int(input())if 10 <= disk_queue_length <= 20:print("输入成功!")else:print("您输入的磁盘寻道序列长度超出给定范围,请重新输入10-20(含端点)的数字:")print("请输入磁盘寻道序列长度(10-20,含端点):")disk_queue_length = int(input())disk_queue = []for k in range(disk_queue_length):disk_queue.append(random.randint(0, 200))start_numer = random.randint(0, 200)print()print('生成的磁盘寻道序列为:{}'.format(disk_queue))while True:print()print("请选择要执行的磁盘寻道算法:")print("选择FCFS请输入1")print("选择SSTF请输入2")print("选择SCAN请输入3")print("选择CSCAN请输入4")menu_choice = int(input())if menu_choice == 1:alo_fcfs()elif menu_choice == 2:alo_sstf()elif menu_choice == 3:alo_scan()elif menu_choice == 4:alo_cscan()else:print("您选择的不在范围内,请重新输入")print()continueprint()print("继续尝试其他算法请输入1")print("更新数据请输入2")print("结束程序请输入3")end_choice = int(input())if end_choice == 1:continueelif end_choice == 2:print("现在开始更新数据")print("请输入更新的磁盘寻道序列长度(10-20,含端点):")disk_queue_length = int(input())if 10 <= disk_queue_length <= 20:print("更新成功!")else:print("您输入的磁盘寻道序列长度超出给定范围,请重新输入10-20(含端点)的数字:")print("请输入磁盘寻道序列长度(10-20,含端点):")disk_queue_length = int(input())disk_queue = []for k in range(disk_queue_length):disk_queue.append(random.randint(0, 200))print()print('更新的磁盘寻道序列为:{}'.format(disk_queue))start_numer = random.randint(0, 200)else:print("程序退出成功!")break

磁盘寻道算法 Python实现相关推荐

  1. 棋盘最短路径 python_Dijkstra 最短路径算法 Python 实现

    Dijkstra 最短路径算法 Python 实现 问题描述 使用 Dijkstra 算法求图中的任意顶点到其它顶点的最短路径(求出需要经过那些点以及最短距离). 以下图为例: 算法思想 可以使用二维 ...

  2. 2021-03-15 数据挖掘算法—K-Means算法 Python版本

    数据挖掘算法-K-Means算法 Python版本 简介 又叫K-均值算法,是非监督学习中的聚类算法. 基本思想 k-means算法比较简单.在k-means算法中,用cluster来表示簇:容易证明 ...

  3. 2021-01-28 粒子群优化算法-Python版本和Matlab函数 particleswarm 调用

    粒子群优化算法-Python版本和Matlab函数 particleswarm 调用 前两天分享了粒子群优化算法的原理和Matlab原理实现,本文分享一下Python代码下的PSO实现以及Matlab ...

  4. 最优化算法python实现篇(4)——无约束多维极值(梯度下降法)

    最优化算法python实现篇(4)--无约束多维极值(梯度下降法) 摘要 算法简介 注意事项 算法适用性 python实现 实例运行结果 算法过程可视化 摘要 本文介绍了多维无约束极值优化算法中的梯度 ...

  5. 最优化算法python实现篇(3)——无约束一维极值(黄金分割法)

    最优化算法python实现篇(3)--无约束一维极值(黄金分割法) 算法适用问题 python实现 示例运行结果 算法适用问题 搜索给定单峰区间的极值问题,一般对凸优化问题比较适用. python实现 ...

  6. 最优化算法python实现篇(2)—无约束一维极值(二分法)

    最优化算法python实现篇(2)--无约束一维极值(二分法) 算法适用问题 python实现 示例运行结果 算法适用问题 搜索给定单峰区间的极值问题,一般对凸优化问题比较适用. python实现 # ...

  7. 操作系统——磁盘寻道练习题及答案

    问题描述 假定磁盘转速为20ms/圈,磁盘格式化时每个磁道被划分成10个扇区,今有10个逻辑记录(每个记录的大小刚好与扇区大小相等)存放在同一个磁道上,处理程序每次从磁盘读出一个计录后要花4ms进行处 ...

  8. 多元线性回归算法python实现_手写算法-Python代码推广多元线性回归

    1.梯度下降-矩阵形式 上篇文章介绍了一元线性回归,包括Python实现和sklearn实现的实例.对比,以及一些问题点,详情可以看这里: 链接: 手写算法-Python代码实现一元线性回归 里面封装 ...

  9. 哈希运算python实现_一致性哈希算法 python实现

    # -*- coding: utf-8 -*- """ 一致性哈希算法 python实现 参考 http://weblogs.java.net/blog/2007/11/ ...

最新文章

  1. C++ 继承与多继承
  2. DOM对象和JQUERY对象
  3. Java依赖注入选项
  4. 做科研,到底应该看什么?
  5. MediaElementAudioSourceNode
  6. 大数据之-Hadoop3.x_MapReduce_官方WordCount源码和序列化类型---大数据之hadoop3.x工作笔记0085
  7. CSU计算机图形学复习
  8. Net设计模式实例之桥接模式( Bridge Pattern)(4)
  9. 日历获取当前月份的月数与当前月份第一天离第一个格子的位置。
  10. Typora数学公式总结
  11. 5个强大的Java分布式缓存框架_5个Java分布式缓存框架
  12. imx6q的启动方式
  13. 关于Qt的无边框窗口移动
  14. IT行业现在的就业前景怎么样?
  15. 面试最后我一般会问面试官什么问题
  16. Openharmony应用NAPI详解--基础篇
  17. Vue Vue3的生命周期
  18. 云服务器与物理服务器各自的优势
  19. 语音识别标准中WER和SER解释
  20. [Vue warn]: Failed to resolve component:XXX

热门文章

  1. pkpm板按弹性计算还是塑性_PKPM中的S\R验算显红原因分析
  2. oracle 快捷 企业,Oracle自治数据库提供APEX 20.1,助企业快速构建应用
  3. sublime编辑python_在没有安装Python的前提下,让Sublime text编辑器来运行Py?
  4. “中科院博士后当辅警”,网友却吵翻了:家里有矿?
  5. 2019优质公众号大盘点,果断收藏了慢慢看吧 ~
  6. 限时秒杀┃月销10000+件,风靡全国的steam科学实验套装
  7. 一起读懂传说中的经典:受限玻尔兹曼机
  8. 神经网络简史:BP算法后的又一突破—信念网络
  9. 通过简单的Word Count讲解MapReduce原理以及Java实现
  10. 数据库 流量切分_互联网大厂有哪些分库分表的思路和技巧?