印象系列-磁盘和内存的基本认识

若是问起内存和磁盘的区别,我相信大部分开发者都会列举一二。事实确实这样,最近在团队的一次内部分享上,四五位同窗说出了不一样的答案:内存存储速度快、磁盘容量大、磁盘可保存长久数据、磁盘体积比较大~缓存

固然了,这都是对的,但任何问题应该抛开表象探究背后缘由,当我问到为什么大部分计算机的磁盘容量都很大、为什么磁盘的存储速度就是慢、为什么磁盘可保存长久数据,甚至,为什么磁盘的体积就是非得那么大呢?不是每一个人都能清楚地说出缘由,甚至对这两种存储器并不敏感,不知从哪一个角度解答!尽管大部分人平时在开发过程折腾着机器都会涉及到这两样东西,下面来分享下个人一些理解,但愿在总体上能体会到一些细节和特性。优化

内存(DRAM )做为一种易失性存储器在断电状况下是不能保存数据的,这是由于内存自己是经过电容来实现二进制位的存储,每个位的电容都很是小,只不过内存制造的很是密集因此能够保存不少位。一个位就是一个bit,每一个位在内存里面都称做一个内存单元,总体的构造可简化成以下图所示:3d


注意看图中的网格区域,这是内存单元的编排方式,简单说就是一个二维矩阵,咱们假设如今有一个内存很是小,它被分割成16个超单元,超单元这东西又包含了8个内存单元,那么能够知道这个内存最大可保存16*8=108bit的信息。cdn

那么如何实现数据的读写呢?blog

图中存储控制器和内存单元块中间标明了addr的地址线,上面的数字2表示有两条,两条地址线在实际过程当中会经过发送0、1信号来标识地址信息。内存

若是想指定内存矩阵某一行某一列的超单元时,存储控制器就会分两次对addr线发送电信号。这两次分别指定了目标超单元的行地址和列地址,好比第一次发送中第一二两条地址线分别发送了0、1的电信号,那么就是01的值,指定内存矩阵中的第二行(注意第一行数值是0),随即第二次发送中第一二条地址线分别发送了一个一、1的电信号,就是11的值,指定第四列的数据,最终就是指定了第一行第四列的超单元。存储控制器再对这个超单元的数据进行读写操做。开发

内存的数据又该如何传送呢?it

你们可能已经注意到了图中标示data的双箭头,上面的数字8表示有8根数据线,说明该内存每一次读写最多能传递8bit,也就是一个字节的信息。具体的细节能够不用作进一步探究,反正咱们只需知道内存的构造中正是经过地址线和数据线链接到二维的矩阵单元中实现读写操做的。io

上面就是我想分享的关于内存的一些基本印象,这个印象首先对我来讲就是,内存在读写和存储过程当中都离不开电。在内存持续的运行当中,我脑海里就是无数电流在内存芯片快速流动着,你们要知道电的速度但是和光同样的。class

磁盘(硬盘)做为一种非易失性存储器适合资料的长久存储,要理解长久保存的缘由一样须要从磁盘构造开始了解。

为了简化说明,我用光驱来作个示例,咱们知道光驱读取数据时会有一个激光头对准光盘,播放光盘的过程当中伴随着光盘的不断旋转。其实磁盘的数据读取过程就相似这种操做,光盘的盘面经过凹下去的坑的变化记录二进制信息,激光会对准光盘的某个扇区,旋转中的光盘带来了位置的变化,从而激光头能够对准光盘盘面的不一样区域,实现全部数据的读取。

在这里,必须理解扇区、磁道的概念,下图是磁盘的一个盘面,可辅助各位创建磁盘的第一印象:


你们能够对光盘外形的理解转移到磁盘上去,如上图,磁盘的盘面可理解为不少不一样半径的磁道一环环组成的,每一个磁道就是空心圆,这个圆又由多个扇区组成,扇区就是磁盘保存数据的最小单位(通常为512字节),因此一个盘面就包含了不少这样的扇区。

光盘是经过上面悬浮的激光头对准着扫描读取的,磁盘也有这么个相似的东西,一样对准着磁盘,以下图:


磁盘上方有一个传动臂,传动臂末端就是读写头(相似于光盘的激光头),传动臂可在水平上调整不一样角度摆动,而磁盘能够在必定速率下进行旋转,这两个特性很是重要,下面会联系读写过程进行说明。

那么磁盘的数据读写过程是怎样的呢?

联系上文咱们知道内存经过电信号和电流对内存单元进行定位和数据传送,整个物理过程是电的变化。而磁盘就不同了,若是想读取磁盘的某个数据,必定要先肯定目标地址(扇区位置),而后让读写头定位到这个扇区的起始位置处。

注意了,读写头如何定位到目标扇区的位置呢?

经过磁盘盘面的构造咱们知道,首先要经过控制传动臂的角度肯定目标扇区在哪一个磁道上,而后让磁盘旋转必定角度,使得最终的目标扇区恰好停在读写头的正下方,这样的一系列过程咱们称为机械运动(因此知道为何不少人把普通硬盘称为机械硬盘了吧?),当磁盘要进行不少读写操做时,若是目标数据分布在盘面不一样位置的扇区上,那么这个过程须要传动臂不断调整角度,不断旋转磁盘,因为都是机械过程,因此磁盘的读写瓶颈就出如今这里了。

在实际的磁盘中每每不止一个盘片,而是多个盘片在垂直角度上叠加的,以下图:


每一个盘片都有两个盘面,对应都配有读写头,但这不妨碍咱们只针对一个盘面来理解磁盘的读写过程。

好了,上面就是本次分享的对内存和磁盘的构造的基本理解,有了这么个印象我相信回到文中开头的几个问题,或许能给出更根本的解释。好比,内存存储速度快是由于这个过程是电传输的过程,电的速度很快,而磁盘的读取是机械过程,自己具备很大的限制;磁盘容量大是由于磁盘经过磁性材料保存数据,适合长久保存数据,同时也决定了制形成本更低,在当前环境下相对经济,而内存成本较高,适合做为数据高速缓存的角色。磁盘体积较大是由磁盘的构造方式决定的,有多个盘面还有传动臂,须要作机械运动,再精细的磁盘也有必定的空间要求。

其实分享这个主题,只是想给开发者一个体会,就是对数据存储成本具有敏感性。如今的计算机CPU已经很强大了,计算速度超越了咱们的通常理解,但在I/O这块的速度并无大幅提升,如今不少项目的处理瓶颈其实就是出如今这块。经过文中理解,咱们能认识到频繁从磁盘操做数据是怎样的一个物理过程,这个过程能自动在脑海给咱们一种警示:机械运动实在是太慢了。因此后续的不少优化其实都是在减小磁盘I/O,不管技术多么牛逼,这个主题在很长一段时间都会被拿来讨论。

相关文章
相关标签/搜索