磁盘调度算法
- 先来先服务(FCFS)算法
- 原理:
- 按照进程请求访问磁盘的先后顺序进行调度。就像是排队买东西,先到的先服务。
- 示例(Python):
- 原理:
def fcfs(requests):"""requests是一个包含磁盘请求序列的列表例如 requests = [98, 183, 37, 122, 14, 124, 65, 67]假设磁头初始位置为53"""head_position = 53total_distance = 0for request in requests:distance = abs(request - head_position)total_distance += distancehead_position = requestreturn total_distance
- **解释**:- 定义了一个函数`fcfs`,它接受一个磁盘请求序列`requests`。首先初始化磁头位置`head_position`为53(这里磁头初始位置可以根据实际情况修改),以及总移动距离`total_distance`为0。- 然后遍历请求序列,对于每个请求,计算磁头当前位置与请求位置的距离(使用绝对值函数`abs`),并累加到总移动距离`total_distance`中。接着更新磁头位置为当前请求的位置。最后返回总移动距离。
- 最短寻道时间优先(SSTF)算法
- 原理:
- 每次选择离当前磁头位置最近的请求进行服务,目的是减少磁头的移动距离,提高磁盘访问效率。
- 代码示例(Python):
- 原理:
import mathdefsstf(requests):"""requests是一个包含磁盘请求序列的列表假设磁头初始位置为53"""head_position = 53serviced_requests = []total_distance = 0while requests:distances = [abs(request - head_position) for request in requests]nearest_index = distances.index(min(distances))nearest_request = requests[nearest_index]serviced_requests.append(nearest_request)total_distance += abs(nearest_request - head_position)head_position = nearest_requestrequests.pop(nearest_index)return total_distance
- **解释**:- 定义函数`sstf`,接受磁盘请求序列`requests`,初始化磁头位置`head_position`为53,已服务请求列表`serviced_requests`为空,总移动距离`total_distance`为0。- 在`while`循环中,只要请求序列`requests`不为空就继续循环。首先计算当前磁头位置与所有剩余请求位置的距离列表`distances`,使用列表推导式实现。- 然后找到距离最近的请求的索引`nearest_index`,通过`min`函数找到最小距离,再用`index`函数找到其在距离列表中的索引。接着获取最近的请求`nearest_request`,将其添加到已服务请求列表`serviced_requests`,并计算和累加总移动距离。- 更新磁头位置为最近的请求位置,从请求序列`requests`中移除已经服务的请求。最后返回总移动距离。
- 扫描(SCAN)算法(电梯算法)
- 原理:
- 磁头从磁盘的一端开始,向另一端移动,在移动过程中处理所经过磁道的请求。到达磁盘的一端后,再反方向移动,继续处理请求。就像电梯一样,先向上运行,到顶后再向下运行。
- 代码示例(Python):
- 原理:
def scan(requests):"""requests是一个包含磁盘请求序列的列表假设磁头初始位置为53,磁盘磁道范围是0 - 199"""head_position = 53requests.sort()index = requests.index(head_position)left_requests = requests[:index]right_requests = requests[index:]total_distance = 0# 先向磁盘号增大的方向扫描for request in right_requests:distance = abs(request - head_position)total_distance += distancehead_position = request# 移动到磁盘的最边缘total_distance += abs(requests[-1] - 0)head_position = 0# 再向磁盘号减小的方向扫描left_requests.reverse()for request in left_requests:distance = abs(request - head_position)total_distance += distancehead_position = requestreturn total_distance
- **解释**:- 定义函数`scan`,接受磁盘请求序列`requests`,初始化磁头位置`head_position`为53,假设磁盘磁道范围是0 - 199(可根据实际情况修改)。- 首先对请求序列进行排序,找到磁头位置在排序后的请求序列中的索引`index`,然后将请求序列分为磁头位置左边的请求`left_requests`和右边的请求`right_requests`。- 初始化总移动距离`total_distance`为0,先向磁盘号增大的方向扫描,遍历右边的请求,计算和累加移动距离,更新磁头位置。- 然后磁头移动到磁盘的最边缘(磁道号为0),累加这段距离到总移动距离。接着将磁头位置更新为0,反转左边的请求列表,向磁盘号减小的方向扫描,同样计算和累加移动距离,最后返回总移动距离。
- 循环扫描(C - SCAN)算法
- 原理:
- 磁头从磁盘的一端开始,向另一端移动,在移动过程中处理所经过磁道的请求。到达磁盘的一端后,直接回到磁盘的起始端,而不是像SCAN算法那样反向移动,然后再开始下一轮的扫描。
- 代码示例(Python):
- 原理:
def cscan(requests):"""requests是一个包含磁盘请求序列的列表假设磁头初始位置为53,磁盘磁道范围是0 - 199"""head_position = 53requests.sort()index = requests.index(head_position)left_requests = requests[:index]right_requests = requests[index:]total_distance = 0# 先向磁盘号增大的方向扫描for request in right_requests:distance = abs(request - head_position)total_distance += distancehead_position = request# 直接回到磁盘起始端total_distance += abs(requests[-1] - 0)head_position = 0# 从起始端开始扫描剩下的请求for request in requests:if request not in right_requests:distance = abs(request - head_position)total_distance += distancehead_position = requestreturn total_distance
- **解释**:- 定义函数`cscan`,接受磁盘请求序列`requests`,初始化磁头位置`head_position`为53,假设磁盘磁道范围是0 - 199(可根据实际情况修改)。- 对请求序列进行排序,找到磁头位置在排序后的请求序列中的索引`index`,将请求序列分为磁头位置左边的请求`left_requests`和右边的请求`right_requests`。- 初始化总移动距离`total_distance`为0,先向磁盘号增大的方向扫描,遍历右边的请求,计算和累加移动距离,更新磁头位置。- 然后磁头直接回到磁盘起始端(磁道号为0),累加这段距离到总移动距离,更新磁头位置为0。接着从起始端开始扫描剩下的请求(即不在右边请求列表中的请求),计算和累加移动距离,最后返回总移动距离。
相关文章:
磁盘调度算法
先来先服务(FCFS)算法 原理: 按照进程请求访问磁盘的先后顺序进行调度。就像是排队买东西,先到的先服务。 示例(Python): def fcfs(requests):"""requests是一个包含磁盘请求序…...
多视图 (Multi-view) 与多模态 (Multi-modal)
多视图 (Multi-view) 与多模态 (Multi-modal) 是两种不同的数据处理方式,它们在机器学习和数据分析中有着重要的应用。尽管这两者有一些相似之处,但它们关注的角度和处理方法有所不同。 多视图 (Multi-view) 定义:多视图指的是同一数据对象…...
CFA知识点梳理系列:CFA Level II, Reading 7 Economics of Regulation
这是CFA知识点梳理系列的第七篇文章,上一篇文章可以参考以下链接: CFA知识点梳理系列:CFA Level II, Reading 6 Economic Growth...
微信流量主挑战:三天25用户!功能未完善?(新纪元4)
🎉【小程序上线第三天!突破25用户大关!】🎉 嘿,大家好!今天是我们小程序上线的第三天,我们的用户量已经突破了25个!昨天还是16个,今天一觉醒来竟然有25个!这涨…...
1.微服务灰度发布落地实践(方案设计)
前言 微服务架构中的灰度发布(也称为金丝雀发布或渐进式发布)是一种在不影响现有用户的情况下,逐步将新版本的服务部署到生产环境的策略。通过灰度发布,你可以先将新版本的服务暴露给一小部分用户或特定的流量,观察其…...
Web3如何推动元宇宙的去中心化发展?
随着科技的不断进步,元宇宙的概念逐渐从科幻变成现实,它不仅是虚拟世界与现实世界的融合,更是数字交互和社会参与的新形态。在这个过程中,Web3作为下一代互联网的核心技术,正发挥着关键作用。特别是在去中心化的元宇宙…...
【NODE】01-fs和path常用知识点
前言 最近在使用express-generator知识进行搭建前后端通信,其中有些知识点涉及到nodejs的fs和path核心模块,因此另写一篇文章进行介绍和代码案例练习。 fs(文件系统)和 path 是 Node.js 的核心模块,用于文件操作和路径…...
矩阵线性方程组
矩阵可以是任何形状 当矩阵的行数等于列数,称之为方阵,那么它就有行列式 矩阵的公式 矩阵分块法 Matrix(母体) 克拉默法则 线性方程组 注意初等列变换不是一个同解变换 初等变换与秩 XAB 可以用初等列变换但是不推荐,还是使用初等行变换.用转置思想求解 ( X A ) T…...
Web API和Web Services的区分
前些年一提及自动化测试,大多是指UI界面层的自动化测试。近几年,随着分层自动化测试概念的兴起,以及自动化测试自身的发展与细分,自动化测试包含了更多的内容。 API(Application ProgrammingInterface,应用程序编程接…...
各种数据库类型介绍
在软件开发和数据处理领域,数据库扮演着至关重要的角色。它们用于存储、检索和管理大量数据,是信息系统不可或缺的基础。以下是几种常用的数据库类型及其简要介绍: 1.关系型数据库(Relational Databases) 关系型数据库…...
Hive练习题11-15
11、第11题 info 表 date result 2005-05-09 win 2005-05-09 lose 2005-05-09 lose 2005-05-09 lose 2005-05-10 win 2005-05-10 lose 2005-05-10 lose 如果要生成下列结果, 该如何写sql语句? win lose 2005-05-09 2 2 2005-05-10 1 2 答案: (1) …...
【微信小程序】4plus|搜索框-历史搜索 | 我的咖啡店-综合实训
升级版1-清空全部的再次确认 实现功能: 历史搜索记录展示-历史搜索记录展示10条点击跳转-点击历史搜索记录可同步到搜索框并自动搜索全部删除-可一次性全部删除历史搜索记录全部删除-有再次确认操作展示 进行搜索后留下搜索记录 点击垃圾桶图标,显示【清空全部】 点击【清…...
学习笔记(C#基础书籍)-- C#高级应用
(12.25,12.26) I/O数据流技术:《第十二章》 为了能够长时间保存程序中的数据,I/O技术可以将数据保存到文件(如文本文件等)中。 ⭕文件基本操作 a.File类:支持对文件的基本操作&…...
pytorch将数据与模型都放到GPU上训练
默认是CPU,如果想要用GPU需要: 安装配置cuda,然后更新/下载支持gpu版本的pytorch,可以参考:https://blog.csdn.net/weixin_35757704/article/details/124315569设置device:device torch.device(cuda if t…...
华为 IPD,究竟有什么特点?(二)
关注作者 (四)华为版 IPD 特点四:一定要把差异化竞争力持 续建立在平台上 平台不仅带来研发效率的提升,更重要的是,它是技术竞争力的载体,是研发质 量的重要保证。 1)为什么很多企业摆脱不了同…...
CV(7)--神经网络训练
前言 仅记录学习过程,有问题欢迎讨论 什么是神经网络: 神经网络是一种模拟人脑神经元工作原理的算法,它由多个神经元组成,每个神经元都接受输入,通过计算产生输出,并将输出传递给其他神经元。神经网络的…...
git更改当前项目的远程仓库,保留原始仓库提交记录提交到新仓库
在开发过程中,有时需要将当前项目的远程仓库切换到另一个新的远程仓库,同时保留所有原始的提交记录。以下是详细的步骤和最佳实践,确保你能够顺利完成这一操作。 更改当前项目的远程仓库 1.查看当前的远程仓库 确认当前项目的远程仓库地址。…...
【产品应用】一体化无刷电机在旋转等离子喷枪中的应用
在现代工业制造与加工领域,等离子喷枪凭借其高温、高速的等离子射流,能够实现高效的材料表面处理、切割以及焊接等工艺,在众多行业中发挥着关键作用。而一体化无刷电机的应用,更是为等离子喷枪的性能提升和稳定运行注入了强大动力…...
docker django uwsgi 报错记录
这个配置中是能够正常进行网页访问的,能够查看网页 [uwsgi] chdir /home/luichun/lc/Pyfile/PyCursor/app module app.wsgi:application plugin-dir /usr/lib/uwsgi/plugins plugins python311 env TZAsia/Shanghai socket-timeout 60 websocket-ma…...
【自由能系列(初级),论文解读】神经网络中,熵代表系统的不确定性,自由能则引导系统向更低能量的状态演化,而动力学则描述了系统状态随时间的变化。
神经网络中的熵、自由能与动力学 核心结论: 神经网络在“学习”和“成长”过程中,熵、自由能以及动力学扮演着关键角色。 熵代表系统的不确定性,自由能则引导系统向更低能量的状态演化,而动力学则描述了系统状态随时间的变化。 这…...
云计算时代携程的网络架构变迁
大家觉得有意义和帮助记得及时关注和点赞!!! 前言0 携程云平台简介 网络演进时间线1 基于 VLAN 的二层网络 1.1 需求1.2 解决方案:OpenStack Provider Network 模型1.3 硬件网络拓扑1.4 宿主机内部网络拓扑1.5 小结 优点缺点2 基于 SDN 的大二层网络 2.1 面临的新问…...
uniapp 微信小程序 数据空白展示组件
效果图 html <template><view class"nodata"><view class""><image class"nodataimg":src"$publicfun.locaAndHttp()?localUrl:$publicfun.httpUrlImg(httUrl)"mode"aspectFit"></image>&l…...
java 线程池为什么设计成先进队列再创建最大线程为何先入队列再增加线程数?
java 线程池为什么设计成先进队列再创建最大线程为何先入队列再增加线程数? 这个设计与 线程池的性能优化 、资源利用和任务调度策略密切相关。要理解为什么线程池设计成“ 先将任务入队列,再创建最大线程数 ”,可以从以下几个方面进行分析&…...
我的Qt作品(20)使用Qt+OpenCV写一个旋转/抠图/mask生成工具
使用QtOpenCV写一个旋转/抠图/mask生成工具 1、旋转功能 void FormRotate::rotateImage(const cv::Mat &src, cv::Mat &dst, double degree) //旋转 {if (fabs(degree) < 0.001){dst src;return;}//center旋转的中心点坐标//degree旋转的角度,不是弧度,>0逆时针…...
【vue】vite + ts +vue3 安装及使用 pinia
vue3 TS 安装使用pinia状态管理_vue3 ts pinia-CSDN博客 Vue项目进阶:再谈Pinia函数式(composition API)用法-腾讯云开发者社区-腾讯云...
计算机网络 (10)网络层
前言 计算机网络中的网络层(Network Layer)是OSI(开放系统互连)模型中的第三层,也是TCP/IP模型中的第二层,它位于数据链路层和传输层之间。网络层的主要任务是负责数据包从源主机到目的主机的路径选择和数据…...
1085 PAT单位排行
每次 PAT 考试结束后,考试中心都会发布一个考生单位排行榜。本题就请你实现这个功能。 输入格式: 输入第一行给出一个正整数 N(≤105),即考生人数。随后 N 行,每行按下列格式给出一个考生的信息ÿ…...
知识库1: 什么是知识库?
知识库(Knowledge Base, KB)是一个存储和组织知识的信息系统或数据集合,用于保存、管理和访问结构化或非结构化的信息。它的目的是帮助人们快速获取所需的知识、解答问题或支持决策。知识库可以被广泛应用于技术支持、教育、研究以及智能系统…...
[SAP ABAP] 程序备份
备份当前程序到本地的方式如下: 1.复制粘贴 Ctrl A 、Ctrl V 2.【实用程序】|【更多实用程序】|【上载/下载】|【下载】 3.快捷键,支持多种格式导出(.abap .html .pdf 等) 在事务码SE38(ABAP编辑器)屏幕右下角,点击【Options选项】图…...
SpringBoot 自动装配原理及源码解析
目录 一、引言 二、什么是 Spring Boot 的自动装配 三、自动装配的核心注解解析 3.1 SpringBootApplication 注解 (1)SpringBootConfiguration: (2)EnableAutoConfiguration: (3…...
【专题】2024年悦己生活消费洞察报告汇总PDF洞察(附原数据表)
原文链接: https://tecdat.cn/?p38654 在当今时代背景下,社会发展日新月异,人们的生活方式与消费观念正经历深刻变革。MoonFox 月狐数据的《2024 年悦己生活消费洞察报告》聚焦于这一充满活力与变化的消费领域。随着就业、婚姻等社会压力的…...
empire靶机
打开靶机 我们先查看页面源代码,发现什么也没有 再去用nmap扫描 nmap -sV -p- 192.168.95.144 发现也没什么用 我们在用dirb扫一下 dirb http://192.168.95.144 我们发现了robots.txt并且响应码是200,去访问一下 又得到了一个目录,去访问…...
uniapp 判断多选、选中取消选中的逻辑处理
一、效果展示 二、代码 1.父组件: :id=“this.id” : 给子组件传递参数【id】 @callParentMethod=“takeIndexFun” :给子组件传递方法,这样可以在子组件直接调用父组件的方法 <view @click="$refs.member.open()"...
arthas查看拼接好参数的sql, redis, es完整可直接执行的命令
arthas查看拼接好参数的sql, redis, es完整可直接执行的命令 arthas查看sql可执行命令arthas查看redis可执行命令arthas查看es可执行命令相关链接 经常修bug的时候, 拿不到能够执行的命令, 真是太难受了 arthas查看sql可执行命令 # mybatis plus (参数和sql分离了) watch org.…...
Flamingo:少样本多模态大模型
Flamingo:少样本多模态大模型 论文大纲理解1. 确认目标2. 分析过程(目标-手段分析)3. 实现步骤4. 效果展示5. 金手指 解法拆解全流程核心模式提问Flamingo为什么选择使用"固定数量的64个视觉tokens"这个特定数字?这个数字的选择背…...
nacos-gateway动态路由
在Nacos官网中给出了手动监听Nacos配置变更的SDK: Nacos Java SDK 所需依赖 <!--统一配置管理--> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <…...
Kotlin 协程基础知识总结二 —— 启动与取消
协程启动与取消的主要内容: 启动协程:启动构建器、启动模式、作用域构建器、Job 生命周期取消协程:协程的取消、CPU 密集型任务取消、协程取消的副作用、超时任务 1、协程构建器 (P20)launch 与 aysnc 两种协程构建…...
【漏洞复现】Struts2(CVE-2024-53677)任意文件上传逻辑绕过漏洞
文章目录 前言一、漏洞描述二、漏洞详情三、影响版本四、危害描述五、漏洞分析六、漏洞复现七、修复建议前言 Struts2框架是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。它利用并延伸了Java Servlet API,鼓励开发者采用MVC架构。Struts2以WebWork优秀的设…...
使用 IDE生成 Java Doc
使用步骤 Android Studio界面->Tools->Generate JavaDoc zh-CN -encoding UTF-8 -charset UTF-8 -classpath “C:\Users\fangjian\AppData\Local\Android\Sdk\platforms\android-34\android.jar” 报错问题 错误: 目标 17 不允许选项 --boot-class-path 如果你正在使用…...
AWS、Google Cloud Platform (GCP)、Microsoft Azure、Linode和 桔子数据 的 价格对比
要对比 AWS、Google Cloud Platform (GCP)、Microsoft Azure、Linode 和 桔子数据 的 价格,我们需要先了解每个平台的定价模型、服务类型以及不同服务之间的价格差异。以下是根据各个平台常见服务(如计算实例、存储、数据传输等)做的一个 简化…...
【C++篇】AVL树的实现
前言 本篇是基于二叉搜索树写的,详情可以去看上篇【二叉搜索树】 一,AVL树的概念 (1),AVL树是一颗二叉搜索树,它是一棵空树或者是具备以下性质的二叉搜索树:它的左右子树都是AVL树ÿ…...
VIVO Android面试题及参考答案
请重写算法题:求数组的全排列。 思路: 要获取一个数组的全排列,我们可以利用回溯算法。具体来说,回溯算法通过递归的方式逐步生成排列,在每一步都将一个元素加入排列中,然后在下一步递归中排除已选元素,回溯的时候撤销选择,尝试其他可能。 步骤: 递归生成排列: 使…...
联邦大模型微调
微调(Fine-tuning)是一种迁移学习的技术,用于在一个已经预训练好的模型基础上,通过进一步训练来适应特定的任务或数据集。微调可以在具有相似特征的任务之间共享知识,从而加快训练速度并提高模型性能。 微调步骤&…...
DigitalOcean Kubernetes现已支持VPC natvie集群
DigitalOcean Kubernetes (DOKS)的VPC natvie集群功能现已正式上线!这一新功能实现了DOKS集群与虚拟私有云(VPC)资源之间的无缝集成,提升了工作负载的网络灵活性和可扩展性。 什么是VPC natvie 集群? VPC natvie 集群支…...
【每日学点鸿蒙知识】H5与C++通讯、动态参数化配置、ArkTS调用JS、Json对象转换、showToast在多次调用问题
1、HarmonyOS h5页面和C如何进行双向通讯? 前的规格是H5只能和ArkTS通讯,ArkTS通过NDK接口与C通讯,只有网络拦截有C接口。参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/_web-V5 2、HarmonyO…...
ZC706开发板教程:使用SD卡启动工具烧写flash
在使用开发板的过程中,常常需要通过 Flash 模式启动。然而,使用 JTAG 模式在线烧写 flash 的过程既繁琐又耗时,许多用户对此表示困扰。本期将为您提供解决方案,以简化这一流程。 我们分析正常的flash烧写过程,就是通过…...
问题-01
Mybatis比较失效问题 1、问题复现 whetherPromoterNull是字符串类型,0使用单引号包裹,进行比较时发现不起作用 <if test"whetherPromoterNull ! null and whetherPromoterNull.trim() 0"> and sui.share_user_id is not null</if&g…...
内容营销专家刘鑫炜:误区四,目标不明,营销如同“盲头苍蝇”?
我们经常会遇到这样的客户,稿件提交过来后,一会儿说要发这个媒体,不一会儿又要发那个媒体,而且这两个媒体根本没有关联性,这时候,我们都会问客户,你推广这篇稿件的目的是什么,是为了…...
java基础1:处理Map
一、适用场景:相对Map排序,想获取其中最大或最小值。 1、获取map集合里,获取 max(value)对应的key 1)、方式1 Testpublic void MapInnerMaxValue() {HashMap<String, Integer> hashMap new HashMap<>();hashMap.put("a&q…...
企业销售人员培训系统|Java|SSM|VUE| 前后端分离
【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...