【转载】我是一块硬盘(上)

原文:我是一块硬盘(上)

序我知道CPU和内存是计算机的核心, 毕竟所有的运算最后都得通过他们俩来完成, CPU从内存里要取一条指令, 做计算,然后再写回内存, 如此周而复始。
但是这俩货却瞧不起我,说这是什么年代了,还在用机械式操作, 读写数据的时候, 还得一个磁头在多个盘片上滑来滑去,找来找去, 速度慢的要死。
内存说:“CPU比我快100倍, 比你快100万倍,整个系统的速度都被你给拖慢了。”
这是典型的五十步笑百步。
他俩还嘲笑我很娇气,得真空、密闭、不能有浮尘、运行时不能震动, 一动就坏了。
但这俩二货总是会忘记他俩的最大问题,所以我只用一句就把他们俩给噎死: 你们俩断电了怎么办?
还有我的容量都是按TB, 甚至PB 来算的, 就你们俩那点容量,还笑我?

还有,没有我来存储程序,你们从哪儿得到程序, 难道要像牵牛星(如下图)一样, 手工拨动一排开关来输入程序吗?其实我也很纳闷,  为什么你们人类造不出来一个能够断电存储的, 大容量的, 访问速度快的,当然还要便宜的硬盘来 ,你们不都上天了吗?要登陆火星了吗? 这些基础的材料怎么还无法突破?
我憧憬着这么一天的来临, 如果能制造出来了, CPU就可以直接访问硬盘了, 内存就一边凉快去吧。
在制造出来之前, 你们必须得容忍CPU-内存-硬盘之间的速度不匹配, 并且想出办法来解决这种速度的不匹配, 比如用缓存、 直接内存访问、 多进程/线程切换等等方法。内部结构其实我的内部是长这个样子的:看到没有,我有很多个盘片像串糖葫芦一样被串在一个主轴上, 主轴带着他们疯狂的旋转。 
每个盘片都有很多一圈一圈的磁道, 每个磁道又分为一个一个的扇区。
多个盘片上的同一位置的磁道组成了一个柱面 (需要发挥一下你的想象力)
最后每个盘片上都有可以读写数据的磁头。所以,如果你想访问我的数据,可以说: 把0柱面, 0磁头, 1扇区的数据给我拿来。 
我就把磁头挪到您指定的柱面,对每个磁盘来讲其实就是指定的磁道, 所以这叫“寻道时间
然后再旋转磁盘,让磁头指向您指定的扇区,这才能开始读取数据, 这叫“旋转时间”,转速快的硬盘能更快的旋转到特定扇区, 所以性能会更好些。
文件当然,对于绝大部分人来说,都不想去了解什么柱面,磁头,扇区这些非人的术语,所以我为懒人们专门提供了一个叫做逻辑块的方式,你看到磁盘就是有一个个“块”组成的,编号为1, 2, 3, ..n 。
想取哪一块就取哪一块, 比如你说:把第1024号的“块" 的数据给我取过来, 我在内部就把1024转化成柱面,磁头,扇区, 按照上面说的方法寻道,旋转,读取数据。
但是这还远远不够,比方说你想写个文档,输入了很多字和图片,最后想存到我这个硬盘上,你该怎么操作?
一种方法是这样的:: 硬盘,给我找20个空闲的磁盘块, 我想存我的文档
:空闲的磁盘块编号是1024, 2048, 2049 ,3000 ,......
: 把这些文字和图片存到这些磁盘块上
: 好的,存完了, 你得记住这些块啊, 这样下次才能读取。
: 拿一支笔把这些磁盘块编号都记到本子上
过了几天......
: 硬盘, 把1024,2048,2049,3000这些数据给我取出来,我要编辑。
: 好的,这是你的数据
没有人喜欢这种方式, 太折磨人了!每个人喜欢这么做:   打开word -> 新建一个文件-> 输入文字和图片-> 保存到C盘“我的文档”目录下。
这个所谓的“文件”和“目录”就是我的杰作啊,你再也不需要和烦人的磁盘块打交道, 只需要记住你的文件名和路径, 一切工作交由我和操作系统老大来搞定。
我和老大商量好了,文件对人类来说是最小存储单位, 你想存任何东西,无论多么小,非得建个文件不可。
此外为了让这个世界整洁有序, 多个文件可以放到一个目录(其实也是个特殊的文件)里, 目录之上还可以有目录,形成一个树的结构。
文件这个东西是个伟大的发明, 我估计你们还得再用100年。文件的存放我日常的主要工作就是对目录和文件做操作,当然需要操作系统老大的配合,好吧,其实是老大在主导。
这其中最重要的一个问题怎么去记录各个文件都用到哪些磁盘块?
内存给我支了一招:你可以采用连续记录的方式啊, 就像这样。文件1 占据磁盘块 1-3文件2 占据磁盘块 8-12文件3 占据磁盘块 15-20
内存说: 这种方法在随机访问文件是效率极好,因为你只要知道了开头和长度,就像数组一样可以随便访问, 就像CPU访问我一样, 只要给出地址,立刻就能定位到指定的位置。
我仔细想了想, 内存出的是一个损招, 比如说内存磁盘块 4 -7 ,以及13-14怎么没用?  
那是因为之前那里也有文件,后来被删除了,留下了空洞, 如果之后没有大小合适的文件过来,他们就永远空在那里了。
对我来说这是严重的浪费, 这是我不能容忍的。 
我说:“小样你以为我看不出来啊,你不就是嫉妒我容量大,让我浪费一点嘛”
内存坏笑了一下又说: 不喜欢也没关系嘛,试试采用链式啊:
这个文件从第一块磁盘开始,形成一个链 1->9->18->8->3   , 每一块空闲的磁盘都会得到充分的利用, 效率非常高。
我心想: 这些码农说的数据结构和算法还真是有用啊, 这里也用上链表了。
可是这种方式随机的访问效果太差, 每次都得从第一块开始,沿着绳子往后找,太痛苦了。
现在内存已经嘲笑我慢了,用这种很慢的办法,还不得笑死我?
操作系统老大说:“别听内存在那里BB了, 用索引式!”例如第16号磁盘块专门用来存放文件属性以及该文件所使用的磁盘块。
老大把这个磁盘块叫做inode,通过它可以轻松的找到这个文件所使用的所有磁盘块, 无论是顺序访问还是随机访问都很快。
唯一的缺点是得用额外的磁盘块单独存放inode 。
我觉得挺好,没有十全十美的东西,折中达到平衡最重要 ! 就是它了!
(未完待续)
你看到的只是冰山一角, 更多精彩文章,尽在“码农翻身” 微信公众号, 回复消息"m"或"目录" 查看更多文章
有心得想和大家分享? 欢迎投稿 ! 我的联系方式:微信:liuxinlehan  QQ: 14703250

时间: 2024-10-08 21:35:26

【转载】我是一块硬盘(上)的相关文章

我是一块硬盘 《转载》

我是一个硬盘,st380021a,在一个普普通通的台式机里工作.别人总认为我们是高科技白领,工作又干净又体面,似乎风光得很.也许他们是因为看到洁 白漂亮的机箱才有这样的错觉吧.其实象我们这样的小台式机,工作环境狭迫,里面的灰尘吓得死人.每天生活死水一潭,工作机械重复.跑跑文字处理看看电影还 凑活,真要遇到什么大软件和游戏,上上下下就要忙的团团转, 最后还常常要死机.我们这一行技术变化快,差不多每过两三年就要升级换代,所以人人都很有压力而且没有安全感.每个新板卡来的时候都神采飞扬踌躇满志,几 年光

【转载】我是一块硬盘(下)

原文:我是一块硬盘(下) 目录我问老大: 每个文件都需要有个inode来描述,  每个目录是不是也需要一个? ”这是自然,和文件一样, 每个目录也是一个inode,  其中有目录的属性,还有存放这个目录内容的磁盘块号,在磁盘块中才真正的存放着目录下的内容““举个例子来说吧: 有人要读取  /tmp/test.log  这个文件, 查找次序是这样的:根目录inode->根目录磁盘块->tmp目录inode->tmp目录磁盘块->test.log的 inode->读取磁盘块”(点

我是一块主板 《转载》

我是一块主板,在一台台式电脑里工作,出厂时在我的大脑里植入了intel的i845d芯片组,所以大家都叫我845.我是办公室里资格最老的成员,除了 完成本职工作以外还负责为每一位新同事安排办公位置,并且在日常生活中还要替他们传递消息,时间久了,大家尊敬的称我为模范保姆,怪不得我的大名叫 “motherboard”呢.跟我关系最好的同事是bios,也是在出厂时就被焊接在我身上的,尽管有人认为他只是我的附属品,但我一直把他当成自己最 贴心最忠实的朋友.每次接到开机请求的时候,我只是简单地把电源打开,其

我是一块声卡 《转载》

对于一个有生活气息的人来说,他的计算机里面 一定有我,虽然我只是一个配件:声卡.人们在工作的时候,其实和电脑打交道就那么几个途径:键盘.显示器,然后就是我了,还有打印机什么的.我总觉得大家 最喜欢的应该是我,要不给你一段无声的电影看,即使画面再清晰也够让你郁闷的了.对于这一点,***music和movie版的人最清楚了,但是 karaoke的k友是感触最深的了. 还记得有一天,huangshf很郁闷了,他告诉别人说他的声卡没有办法录音了.我什么都没有说,只是心里面叹了一口气:每天不断的mp3播放

简述从添加一块新硬盘到在这个硬盘上创建一个文本文件的全步骤

权限管理 添加新硬盘全步骤 简述从添加一块新硬盘到在这个硬盘上创建一个文本文件的全步骤,并注明在步骤中使用的命令 查看分区命令 fdisk -l help n add a new partition p print the partition table w write table to disk and exit 分区已经建立好 刚才未保存,重新建立了一遍 文件系统已经建立完毕! 使用mkfs创建文件系统 mkfs [-V] [-t 文件系统类型] [文件系统特有参数] 设备名 [块数量] [

Windows 7下,一块硬盘突然掉盘时的windows操作系统日志

环境:3块台式机硬盘(sata3接口的),接入同一个台式机中,没有做raid,其中一块硬盘(注意:不是一个partition)突然从"计算机管理"-"磁盘管理"中消失,当然,该块硬盘的分区(之前做了一个ntfs格式的分区)也从我的电脑中消失了,如下是当时windows操作系统日志: 日志一: 日志名称: System 来源: Disk 日期: 2015/7/22 14:47:43 事件 ID: 15 任务类别: 无 级别: 错误 关键字: 经典 用户: 暂缺 计算机

Linux下VirtualBox启动物理硬盘上已安装的Window 8系统

创建虚拟机 1.创建一个没有硬盘的windows虚拟机,与已安装在物理硬盘上的系统一致.2.通过命令行在创建的虚拟机目录下创建一个指向物理硬盘的虚拟硬盘 VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -partitions 1,2,3,4,5,8 -relative3.在创建的虚拟机中加载刚创建的vmdk虚拟硬盘.4.正常启动虚拟机,一切搞定.5.当然,要在虚拟机里

使用HDTune规避硬盘上损坏的扇区

如何使用HDTune扫描磁盘上的错误在网上已经有很多帖子了,但扫描到之后如何用HDTune来规避硬盘上损坏的扇区呢? HDTune并不能直接规避,而是需要重新划分磁盘的卷.HDTune一行有50个小方格,一格代表的大小在图例里有,一般500G的硬盘,一格代 表190MB,1000G的硬盘,一格则代表381MB.但HDTune所用的MB.GB不是通过二进制计算出来的,而是通过十进制的.也就是说一块市面 上500GB硬盘,在HDTune中的扫描范围是0~499GB,但在电脑上显示的往往是460+GB

新加了一块硬盘,在bios中可以看的到,在系统的磁盘管理器中看不到新加硬盘

今天新加了一块硬盘,进入bios中可以看到新加的硬盘,但是进入系统后在磁盘管理及磁盘驱动器中都看不到.并且在设备管理器下其他设备出现了ATA channel1,前面显示感叹号,如下图所示: 而且电脑变得特别的卡.最后在一位同事的帮助下,终于解决了. 解决方法如下: 1.在ATA channel1上右击,点击更新驱动程序软件=>浏览计算机以查找驱动程序软件=>在浏览中选择C:\windows\winsxs=>下一步 2.然后你将会在IDE ATA/ATAPI控制器中看到ATA channe