硬盘就是一个旋转餐桌!

从PATA到NVMe:为什么SATA的AHCI模式成了机械硬盘的“黄金搭档”? 本文探讨了SATA接口的AHCI模式如何成为机械硬盘的最佳选择。通过分析存储接口协议的演进,特别是AHCI的NCQ技术对机械硬盘性能的优化,解释了为什么NVMe协议不适合HDD。文章还展望了AHCI+SATA组合在大容量存储和工业环境中的持久优势。 阅读详情

我是一个硬盘,在我们这个大家族中,我属于通过机械装置定位并读取数据的机械式硬盘,从速度上说,和我的兄弟SSD硬盘没法比,但是我的容量更大,更便宜啊!

来,爆个照:

640?wx_fmt=jpeg

磁盘内部图-我的肖像照

无论是读数据还是写数据,都要通过我的胳膊才行。我的胳膊长成下面这个样子,非常雄壮,但却有点笨重,移动起来稍稍有点缓慢。当操作系统大哥要我读写数据的时候,我就挥动胳膊把数据从盘片上取出来。想想这个动作就知道我读取的速度有多慢了。

640?wx_fmt=jpeg

磁臂实物图

如果你还是不清楚我为什么慢,那么就想想吃饭的场景吧。

假设你坐在一个超大的旋转餐桌面前吃饭,餐桌上放了两圈盘子,都是美味佳肴,你瞄上了你最爱的东坡肉,就在对面位置,就在内圈。你伸出胳膊,举起筷子,“悬停”在内圈盘子上方,然后用左手慢慢转动餐桌,等东坡肉到你面前的时候,你以迅雷不及掩耳之势把最肥的一块肉夹起来放到你的盘子里面。这其实就是我读取数据的过程。

640?wx_fmt=png

旋转餐桌

我的实际结构比餐桌复杂多了,我的数据是存储在一个有磁性的圆盘(盘片)上面的。而这个圆盘又被划分为一个一个的同心圆(这个同心圆成为磁道),我的数据就是存储在这些同心圆(磁道)里面的。

640?wx_fmt=jpeg

磁盘的盘片及磁道

你可能明白为什么机械硬盘这么慢了,因为我们读取(或者写入)一个数据的过程太复杂了,因此消耗的时间也就长很多,具体时间包括寻道时间(伸胳膊时间)、旋转延迟(转餐桌时间)和传输时间(夹菜的时间)。

为了能让我肚子里面装更多的东西,我的发明者把多个上面的磁盘罗列在一起,构成了下面的结构。就好像把平房改造成楼房一样。虽然使用的土地的面积没变,但可以住的人(存储的数据)却多多了。

640?wx_fmt=jpeg

磁盘立体结构

蓄流/泄流与请求合并重排

由于我很慢,操作系统大哥想读取数据的时候就不得不照顾一下我的感受了。

当上层应用发送请求的时候,操作系统大哥不会马上把请求发送给我让我处理,而是稍微攒一会儿,等到一定数量后一起发给我。

为什么要攒一会儿呢?这是因为我的胳膊摆来摆去实在是太慢了,要是一会儿让我从最里面拿东西,一会儿又让我从最外面拿东西,简直是要我的老命。

这种方式叫做蓄流,接下来操作系统大哥就可以做更多事情了。其中主要包括请求合并和请求重排序。

所谓请求合并就是如果新的请求与已有的请求可以首尾相连的话,它会把这两个请求合并成为一个请求。

而请求重排序则是将请求按照逻辑地址(简称LBA)排序,保证请求是有序的。当上层应用发送按时间顺序的1、2、3、4和5等五个请求的时候。此时,操作系统大哥并不会按照时间顺序发送给我,而是按照图中红色虚线箭头的顺序(1、5、2、4、3)发送给我。这样,我就不用来回挥动我笨重的胳膊(磁臂)了。

640?wx_fmt=png

 IO重排序

注:对于磁盘来说,磁盘寻道的时间往往是最长的,因此通常是先寻道,然后在等待盘片旋转到期望的位置,这样就可以读数据了。比如对于15000转/分钟的磁盘,寻道时间大概在2-8毫秒之间。而旋转延时平均在2毫米左右。因此即使是相邻的两个磁道,来回摆动一下可能就超过4ms了,因此,磁盘总是尽量将一个磁道上数据读完之后再读其它磁道。

作为吃货,还回到吃饭这件事上来,哈哈。

这就好比我先后想吃吃宫保鸡丁、京酱肉丝和地三鲜。如果没有蓄流/泄流机制,那我就要转桌子,夹宫保鸡丁,然后吃起来。吃完后,找京酱肉丝在哪,然后又转桌子,夹京酱肉丝,欢快的吃。不断重复这个过程。但有了蓄流/泄流机制后,就好像我提前规划好了要吃那些菜,然后用一个大铲子定位在菜转过来后的位置,每当一个菜到我这时我就用铲子铲一点,等我的胳膊回来的时候铲子里面就有各种我想吃的菜了。

最后期限

虽然操作系统大哥充分照顾了我的情绪,但上次的应用程序可能会有意见了。比如有些关键的应用,如果请求长时间没有响应,它会认为这个请求失败了,从而进行错误处理。然而,实际上请求并没有失败,而是在等着我处理其它请求呢。

我们举个例子,依然是按时间顺序的,1、2、3、4、5、6、7、8和9。如果按照前面逻辑地址的顺序,那么处理请求的先后顺序是图8的样子(1、3、4、5、6、7、8、9和2)。

本来2很早就发过来了,但是由于它太远了,最后才被处理。如果上层应用程序要得很急,那就不可接受了。

640?wx_fmt=png

排序访问顺序

为了解决上面的问题,操作系统大哥想出了一个好办法。这个办法就是每个请求都加一个最后期限时间(Deadline),优先处理快到最后期限的请求。

640?wx_fmt=png

Deadline策略

其思想就是在请求加入队列前记录该请求的最后期限,而分发的时候以此时间为标准进行分发。依然以上面10个请求为例,由于请求2比较远,因此会被延时处理。

在处理的过程中可能后来的请求可能由于合并和重排序等原因导致请求2延后执行,但由于有最后期限,其被处理的时间不至于太晚。

“公平”调度

大家知道,操作系统大哥“同时”会运行很多应用程序,大家为了完成人类的需求,工作时都会拼命将磁盘请求发给操作系统。

这一天出现了一个怪现象:有两个非常勤奋的应用程序,小A和小B,他们俩不断地通过操作系统大哥向我发出读写请求。  可是小A的请求很快就能得到回复,而小B的请求应答总是姗姗来迟有时候等到花儿已经谢了还不见踪影。 

小B急了,去质问操作系统大哥:“这到底是怎么回事?怎么这么不公平!”

操作系统大哥说:“别急别急,我跟磁盘兄弟沟通一下,看看啥情况。”

经过周密的调查以后发现,原来小A所需数据总在5号磁道附近,而且小A访问的又很频繁;而小B的数据则在非常远1000号磁道附近。操作系统大哥将请求排序后发给我后,大多数请求都是5号磁道附近的。

对于我来说,并不知道这些数据是属于那个进程,我只是奉命处理而已。这样就会导致一个问题,就是小B的请求会迟迟得不到处理。

这种应用程序总是访问某个区域数据的特征叫做数据的区域局部性(也就是某个应用的数据通常是集中在某个区域) ,为了解决这个问题,操作系统大哥实现了另外一种调度策略(CFQ),这种调度策略兼顾每个进程的公平性。

简单来说:操作系统大哥为使用磁盘的所有进程分配一个请求队列和一个时间片,在调度器分配给进程的时间片内,进程可以将其读写请求发送给磁盘,当进程的时间片消耗完,进程的请求队列将被挂起,等待调度。 

每个进程的时间片和每个进程的队列长度取决于进程的IO优先级,IO优先级从高到低可以分为三大类:RT(real time),BE(best try),IDLE(idle), 操作系统将会将其作为考虑的因素之一,来确定该进程的请求队列何时可以获取磁盘的使用权。

也就是说,操作系统大哥在向我发送请求的时候会考虑每个进程的感受,保证每个进程被处理的请求的量是近似一致的。

介绍到这里,我今天已经把我自己和操作系统大哥为我所做的东东都介绍给大家了。如果有什么不清楚的地方,还请大家告诉我,我再一一道来。

640?wx_fmt=gif


码农翻身公众号开放投稿,可能是全网最高片酬:

用故事讲技术 ,稿费1000

技术/职场/感悟/面试等,稿费700

翻译类文章,每千字200

联系方式:onlyliuxin97(微信)

详情猛戳: 可能是全网最高片酬,速来!

往期精彩回顾

我是一个线程

我是一个Java Class

面向对象圣经

函数式编程圣经

TCP/IP之大明邮差

CPU阿甘

我是一个网卡

我是一个路由器

一个故事讲完HTTPs

编程语言的巅峰

Java:一个帝国的诞生

JavaScript:一个屌丝的逆袭

负载均衡的原理

阅读源码的三种境界

640?wx_fmt=jpeg

别再死记硬背了!用‘磁盘阵列RAID’和‘固态硬盘SSD’的对比,轻松搞懂计算机组成原理里的外存 本文通过对比磁盘阵列RAID和固态硬盘SSD的技术特点,深入解析计算机组成原理中的外存技术。从机械硬盘的物理瓶颈到SSD的电子革命,揭示存储设备的设计哲学与工程取舍,帮助读者轻松理解外存储器的工作原理和性能差异。 阅读详情

相关推荐

构建个人认知操作系统:从工作记忆到记忆宫殿的12周训练体系

认知能力提升是许多学习者和专业人士关注的核心领域,其背后涉及大脑信息处理的基本原理。从认知科学角度看,工作记忆如同计算机的RAM,负责信息的临时存储与处理,而长时记忆则类似于硬盘,关键在于建立高效的索引与检索结构。通过系统训练优化这些基础认知模块,能够显著提升学习效率与问题解决能力,具有极高的技术价值。例如,利用组块化与精细编码技术可以扩展工作记忆容量,而记忆宫殿法则通过空间联想强化长时记忆的提取强度。这些方法在高效学习、复杂信息处理和专业备考等应用场景中效果显著。本文基于认知训练的热门实践,详细拆解了包括

weixin_29081703的博客 356

一个让人感伤又温馨的计算机故事:我是一个硬盘

先是在一个转载基本不给出处网站上看到了本文的硬盘和内存部分,觉得挺好,于是按原文标题在 Google 中查找来源,发现 2007 年有篇个人博客中有更全的内容。搭档提示说,文章时代可能会更久远,于是多次换了关键词,最后发现一个在 2003 年 12 月 18 日的记录(小熊在线),虽然该记录中并没有完全文章,但它是原始出处的可能性很大。如果有知道确切原始出处或作者的朋友,请在评论中留言。谢谢...

qjoycn 1924

操作系统I_O调度中的预测性算法与应用

本文旨在系统性地介绍操作系统I/O调度中的预测性算法,涵盖从基础概念到高级应用的完整知识体系。我们将重点讨论预测性算法如何优化I/O性能,减少磁盘寻道时间,提高系统吞吐量。文章首先介绍I/O调度的基本概念,然后深入分析预测性算法的原理和实现,接着通过实际案例展示应用效果,最后探讨未来发展趋势。I/O调度:操作系统决定I/O请求执行顺序的机制寻道时间:磁盘磁头移动到正确位置所需的时间旋转延迟:磁盘旋转到正确扇区所需的时间预测性算法:基于历史数据预测未来I/O模式的算法核心概念回顾。

操作系统内核探秘的博客 987

[美文]我是一个硬盘2

[美文]我是一个硬盘2编辑:未知 文章来源:http://blog.youkuaiyun.com/it88blog/archive/2007/09/19/1791872.aspx  而我很惊讶自己可以说个不停。但我愿意说个不停。因为我可以看到她的笑,那让我觉得很幸福。   然而幸福是短暂的,7天后开机,我看到数据线上空荡荡的插口……她走了。后来,我再也没有见过她。我特别后悔没有告诉她我很喜欢她,甚至没

为天加朵云... 606

windchill安装搭建(保姆式)

保姆式搭建windchill 材料准备 Vmware工具,用来创建和打开虚拟机的工具 安装系统的镜像文件 数据库安装文件,这里是Oracle数据库 Windchill的安装包 Vmware工具,用来安装和打开虚拟机的软件 Windowsserver2008的镜像工具,用来安装虚拟机环境的系统,如果你有win2007或win2010的也可以,在做虚拟机时,需要先安装系统。 Oracle数据库安装包 Windchill11M030的安装包 (安装包如有需要可以私信邮箱发送) 虚拟机安装 安装虚拟机VMware

tr1294937662的博客 6217

Calibre LVS效率翻倍秘籍:用Hierarchical Flow处理亿级晶体管设计的5个关键阶段

本文详细解析了如何利用Hierarchical Flow技术提升Calibre LVS在亿级晶体管SoC设计中的验证效率。通过五个关键阶段的分层验证流程,包括顶层抽象验证、模块级独立验证等,可显著降低内存占用40-60%,缩短迭代周期50-70%,特别适用于SMIC等先进工艺节点。文章还分享了算力资源优化、并行化处理等实战技巧,帮助工程师应对大规模芯片验证挑战。

sam99的博客 768

我是一块硬盘

我是一块硬盘,在一个普普通通的台式机里工作。   别人总认为我们是高科技白领,工作又干净又体面,似乎风光得很。也许他们是因为看到洁白漂亮的机箱才有这样的错觉吧。其实像我们这样的小台式机,工作环境狭迫,­里面的灰尘吓得死人。每天生活死水一潭,工作机械重复。跑跑文字处理看看电影还凑活,真要遇到什么大软件和游戏,上上下下就要忙的团团转,最后还常常要死机。   我们这一行技术变化快,差不多每过两三年就要升

caimmy的专栏 530

【HCIE】FRR+BFD+OSPF与BGP联动

FRR+BFD+OSPF与BGP联动

Wenrs的博客 1996

我是一张软盘 (我是一个笔记本硬盘·续)

[原创]   我是一张软盘                                                 我是一个笔记本硬盘·续          我是一张软盘,我没有名字,像我们这些低等公民是不需要名字的,除非能够进大     公司——譬如华府,或许还能混个什么春夏秋冬、富贵平安、1234、9527之类的代     号。但是,我没有。我只是一张小小的软盘,除了被在额头上盖了

七叔公讲习所 818

MediaPipe实战:从零构建人脸关键点检测应用

本文详细介绍了如何使用Google的MediaPipe框架从零构建一个实时人脸关键点检测应用。文章深入剖析了MediaPipe的三段式检测流水线,提供了Android平台的完整实战教程,包括环境配置、模型加载、摄像头集成、关键点绘制以及性能调优指南,帮助开发者快速实现高效、跨平台的人脸AR特效与交互功能。

weixin_29100927的博客 341

【人工智能】你知道什么是DeepSeek吗?你有去了解过DeepSeek吗?新手要入门DeepSeek的必经之路——初识DeepSeek

【人工智能】初识DeepSeek 详细介绍DeepSeek以及DeepSeek-R1

蒙奇D索大的博客 3364

块设备层request plug/unplug机制

本文转发自:http://blog.chinaunix.net/uid-14528823-id-4778396.html经过了删减,删除了一些不必要的细节,让文章更可读。一、基本原理Linux块设备层使用了plug/unplug(蓄流/泄流)的机制来提升IO吞吐量。基本原理为:当IO请求提交时,不知直接提交给底层驱动,而是先将其放入一个队列中(相当于水池),待一定时机或周期后再将该队列中的请求统一

Linux阅码场 1236

C#版OpenCV:OpenCVSharp 最详细最全面教程(万字详细总结)

OpenCVSharp 是一个用于 .NET 环境的 OpenCV 包装库,它提供了一种简便的方法来利用 OpenCV 的功能进行图像和视频处理。OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉和机器学习软件库,最初由 Intel 研发并发布。OpenCVSharp 让 C# 和其他 .NET 语言的开发者可以方便地访问 OpenCV 的强大功能。// 打印 OpenCV 版本信息Cv2。

仰望星空的博客 2万+

计算机CPU 内存 磁盘原理

文章完全转载,内容全部为文章原文链接. 如有侵权,联系即删,转载仅供学习交流使用. 内存 我是一条内存 CPU CPU阿甘 磁盘 硬盘就是一个旋转餐桌!

荒-于嬉的博客 144

使用Qt Creator自带的Qt Designer构造UI界面流程总结

在本文中,我们将总结使用Qt Creator自带的Qt Designer构造UI界面的流程。在对话框中,您可以选择一个控件的信号,然后将其连接到另一个控件的槽。例如,您可以将按钮的点击信号连接到一个槽函数,以响应按钮的点击事件。右键单击窗口设计器中的空白区域,选择适当的布局管理器,如水平布局、垂直布局或网格布局。在Qt Designer中,您可以使用各种预定义的UI控件来设计应用程序的界面。现在,您可以在应用程序的源代码中使用生成的UI界面。在您的源文件中,包含相应的头文件,然后创建一个UI界面的实例。

cl6789的博客 1392

相位编码脉冲压缩信号的理论研究与 Matlab 实现

通过实际的代码示例,我们展示了如何生成信号、进行相位编码、传输信号、相位解码和脉冲压缩的步骤。相位编码脉冲压缩信号是通过在发射端对信号进行相位编码,并在接收端对信号进行相位解码来实现的。其主要原理是在发射端将信号的频率进行调制,使得信号具有宽带特性,然后在接收端通过匹配滤波器对信号进行解调和压缩,从而提高信号的分辨率和抗干扰能力。相位编码脉冲压缩信号是一种在信号处理中常用的技术,用于提高信号的分辨率和抗干扰能力。可以使用 Matlab 中的信号生成函数生成一个宽带脉冲信号,例如矩形脉冲信号或高斯脉冲信号。

CyberWizarDD的博客 901

从厨房到餐桌:用烹饪流程类比计算机存储层次结构

本文通过烹饪流程生动类比计算机存储层次结构,详细解析了寄存器、高速缓存、内存和硬盘的对应关系与工作原理。文章揭示了存储金字塔的设计哲学,帮助读者理解计算机如何通过分层存储优化数据访问效率,为系统性能优化提供实用见解。

weixin_28365523的博客 282

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

垃圾面试官让我回去等通知!

后记:已经发了两篇漫画了,一个是《我才是世界上最好的语言》,还有一个是《HTTP之大明邮差》,前两篇主要讲技术,这一篇是娱乐性质,张大胖“亲自”去面试了,当然也是和技术有...

码农翻身 689

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

想找到女朋友,你得掌握这些算法

后记:这篇漫画来自于Quora的一个简短的回答:https://www.quora.com/What-is-the-most-useful-algorithm-that-...

码农翻身 644

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

她刚来,我就失宠了

后记:这篇文章的idea来源于《计算机网络:自顶向下的方法》第5章的一个综合例子,“码农翻身”用漫画的方法又重新解读了一下,希望大家能够喜欢。计算机网络的基础知识无论对前...

码农翻身 497

世界上有两种公众号,我坚持做第二种

世界上有两种公众号,一种喜欢追热点,热点过去,文章的价值也就随风而逝。另外一种不追热点,写一些能够经受时间考验的文章。区分它们的方法很简单:你看看他会不会定期发文章目录。相比而言,第...

码农翻身 3460

硬件加速的代价与收益:重新审视STM32中DMA在OLED驱动的真实价值

本文深入分析了STM32中使用DMA技术加速OLED驱动的真实价值与代价。通过量化测试对比发现,DMA能显著降低CPU占用率和功耗,但受限于I2C总线速度,传输时间改善有限。文章权衡了资源消耗与系统复杂度,为不同应用场景提供了优化策略选择。

cake8的博客 668

抛弃预定义Tool,首次提出通过动态工具生成的Agentic多模态Reasoning,破31%涨幅

视觉推理任务中,传统多模态大模型(MLLM)常依赖预定义工具(如目标检测模型),导致**灵活性不足**与**领域适应性差**。例如面对艾宾浩斯错觉(Ebbinghaus illusion),GPT-4.1 因套用固有模板错误判断图形大小,而 **PyVision 通过动态生成 Python 代码测量像素**得出正确答案。这一对比揭示了当前视觉推理的核心痛点:模型缺乏**自主创造工具**的能力。

m0_59235699的博客 457

5分钟搞定nero光盘刻录软件避坑指南,原理与实战一次讲透

看了一堆教程还是不会写项目?别慌,很多老手都栽在这个细节上。今天这篇避坑指南,专门拆解nero光盘刻录软件的底层逻辑。咱们不整虚的,直接看它怎么把数据塞进物理光盘,让你彻底搞懂。

wuchangjian的专栏 179

imagenet 千分类标签翻译

imagenet 千分类标签翻译 翻译水平有限,如有指正,恳请赐教,不定时根据建议更新更好的翻译。 中文标签 未知 丁桂鱼 金鱼 大白鲨 虎鲨 锤头鲨 电鳐 黄貂鱼 公鸡 母鸡 鸵鸟 燕雀 金翅雀 家雀 灯芯草雀 蓝鹀 知更鸟 夜莺 松鸦 喜鹊 山雀 河鸟 风筝 秃鹰 秃鹫 大灰猫头鹰 火蝾螈 蝾螈 小蜥蜴 斑点蝾螈 斑泥螈 牛蛙 树蛙 蟾蜍 红海龟 革龟 美国淡水龟 北美淡水龟 箱龟 带状壁虎 普通鬣蜥 美洲变色龙 鞭尾蜥蜴 飞鬣蜥 皱褶蜥蜴 短吻蜥蜴 毒蜥 绿蜥蜴 非洲变色龙 科莫多龙 非洲鳄 美洲短吻

ll19930120的专栏 6112
上一篇: 简历不能这么写
下一篇: 从普通本科到985研究生,我到底做到了哪些?
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值