Windows程序员需要掌握的计算机硬件知识——存储器

我是荔园微风,作为一名在IT界整整25年的老兵,今天总结一下计算机中的存储器问题。关于这一部分,我想说的是,你要真正理解这块内容,我建议你要不就从硬件本身入手,或者大量做相关题目,不然你仅是看书和资料很难理解进去,因为太抽象了。我这篇博文打算从第二种方式入手,让大家能最快速了解Windows系统下存储器相关,我将分四部分来说。

一、存储器相关计算

1.基础概念
(1)存储容量:存储器存放数据总位数。存储容量=存储单元数×单元的位数。芯片通常用bit作为单位。用W*B来表示,W是存储单元(word字),B表示每个字由多少位(bit)构成。
(2)存取时间:从CPU给出有效的存储器地址启动一次存储器读/写操作,到完成操作的总时间。
(3)存取周期:指连续两次启动存储器所需的最小时间间隔。

通常,存取时间<存取周期


2.主存储器构成与内存地址编址
存储器由一片或者多片存储芯片构成。如果用规格为w*b的a芯片,组成W*B的A存储器,则需要(W*B)/(w*b)个a芯片。

编址也就是给“内存单元”编号,通常用十六进制数字表示,按照从小到大的顺序连续编排成为内存的地址。每个内存单元的大小通常是8bit,也就是1个字节。内存容量与地址之间有如下关系:

内存容量=最高地址-最低地址+1

每次讲到这里时,已经有小伙伴大叫受不了了。别急,我们来举例。

举例,若Windows系统的内存按双字节编址,地址从B5000H到DCFFFH共有多大容量?若用存储容量为16K*8bit的存储芯片构成该内存,至少需要多少片芯片?

我们用上面公式试一下,DCFFF-B5000+1=28000,就可以得出具体的容量大小,再除以1024转为K单位,于是得到10100000,也就160K ,又因为系统是双字节,所以总容量为160K*16bit。而存储的容量是16K*8bit,所以只要160*16/(16*8)=20片才能实现。

3.存储层次的性能参数(主存一辅存层次)
假定主存存取时间为T主存,辅存存取时间为T辅存。


(1)主存命中率H:所需信息在主存中找到的概率。失效率F=1-H。

H=N主存/(N主存+N辅存)     N主存为访问主存的次数,N辅存为访问辅存的次数。

(2)平均存取时间L:

L=T主存*H+T辅存*(1-H)

(3)访问效率E:

E=T主存/(T主存+T辅存)

注意:相关计算方法适用于高速缓存一主存;寄存器一高速缓存等层次。

还是来举一个例子,若主存读写时间为30n,高速缓存的读写时间为3ns,平均读写时间为3.27ns,求高速缓存的命中率h。
据命中率公式类得到方程:3.27=30*(1-h)+3*h,解得h=0.99,所以高速缓存的中率为99%。

二、高速缓存

高速缓冲存储器(Cache)技术就是利用程序访问的局部性原理,把程序中正在便用的部分(活跃块)存放在一个小容量的高速Cache中,使CPU的访问操作大多针对Cache进行,从而解决高速CPU和低速主存之间速度不匹配的问题,使程序的执行速度大大提高。


局部性原理就是CPU在一段较短的时间内,对连续地址的一段很小的主存空间频繁地进行访问,而对此范围以外地址的访问甚少。

1.Cache读/写
(1)Cache读操作。CPU发出读请求,产生访问主存地址,如果Cache命中(数据在Cache中),则通过地址映射将主存地址转换为Cache t地址,访问Cache。如果Cachet命中失败,且Cache未满,则将把数据装入Cache,同时把数据直接送给CPU。如果Cache命中失败,且Cache已满,则用替换策略替换旧数据并送回内存,再装入新数据。

(2)Cache写操作。为保障Cache与主存内容保持一致的问题,常采用的方法有:
1)写直达:CPU向Cache写入的同时也向主存写入数据,始终保持它们数据的一致性。
2)写回法:CPU暂时只向Cache写入,并标记,直至该数据从Cache替换出时,才写入主存。
3)直接写入主存:若被修改的单元不在Cache中,直接写内存。

常用的替换Cache内数据的策略算法有:
1)FIFO(先进先出):替换Cache中驻留时间最长的数据块。
2)LRU(近期最少使用):替换Cache中近期最少使用的数据块。

2.Cache的性能指标
Cache命中率H:所需信息在Cache中找到的概率。

H=Ncache/(N主存+Ncache)     N主存为访问主存的次数,Ncache为访问Cache的次数。

Cache等效加权平均访问时间=Htcache-+(1-H)t主存    tcache和t主存分别表示Cache的存取时间、主存的访问时间。

3.Cache-一主存的地址映射

CPU访存时,得到的是主存地址,但它是从Cache中读/写数据。因此,需要将主存地址和Cache地址对应起来,这种对应方式称为Cache:地址映像。

(1)直接映像。在直接映像方式中,主存的块只能存放在Cache的相同块中。这种方式,地址变换简单,但是灵活性和空间利用率较差。例如:当主存不同区的第1块不能同时调入Cache的第1块时,即使Cache的其他块空闲也不能被利用。

 (2)全相联映像。在全相联映像方式中,主存任何一块数据可以调入Cache的任一块中。这种方式灵活,但地址转换比较复杂。

  (3)组相联映像。结合了前两种方式,在组相联映像方式中,Cache和主存均进行了分组;组号采用直接映像方式,而块使用全相联映像方式。

 根据映像特点可以知道,冲突次数排序为:全相联映像<组相联映像<直接映像。

三、RAID

独立磁盘冗余阵列RAID是利用一个磁盘阵列控制器和一组磁盘组成一个可靠的、高速的、大容量的逻辑硬盘。你们看看,现在的书和资料上为什么就喜欢讲这种让人无法理解的概念呢。还是让我来说吧,我用大家都听得懂的话,就是说一块硬盘如果单独使用,如果坏掉,上面数据就全部丢失了,但是如果用RAID,把很多硬盘通过这个技术一起工作,如果其中一块坏掉,不用怕,数据还在。而且在某些RAID细分技术中可以在硬盘坏掉后把故障硬盘拿掉,再插入一块硬盘到RAID阵列里,RAID还能自动修复数据,不错吧。

RAID概念

(1)条带。条带(Stip)就是将连续数据分成者干个大小相同的数据块,将每块数据分别存入阵列中不同磁盘相同位置上的方法。条带是一种将多个磁盘合并为一个卷的方法。通常数据条带化由硬件完成。

(2)条带长度。条带长度是一个条带横跨过的扇区或块的个数或者字节容量。条带长度=条带深度*条带经过的所有磁盘数。

(3)条带深度。条带深度又称为条带大小。一个条带在单块磁盘上所占的区域,称为一个Segment。条带深度(Stripe Length)就是一个Segment所包含数据块或者扇区的个数或者字节容量。

RAID条带大小值一般为2KB、4KB、8KB、16KB等。调整条带大小的影响如下:
减少条带大小:该情况下,文件被分割更小,更多个,数据块可能分散存储到更多硬盘上,这种情况导致传输性能增加,但磁盘定位性能减少。
增加条带大小:与减少条带大小相反,这种情况导致传输性能降低,磁盘定位性能增加。

(4)条带宽度。条带宽度是指可以同时读、写条带数量,等于RAID中的物理硬盘数量。

RAID分为很多级别,常见的RAID如下。

1.RAID0
无容错设计的条带磁盘阵列(Striped Disk Array without Fault Tolerance)。数据并不是保存在一个硬盘上,而是分成数据块保存在不同的驱动器上。因为将数据分布在不同的驱动器上,所以数据吞吐率大大提高。如果是n块硬盘,则读取相同数据时间减少为1/n。由于不具备冗余技术,如果一块盘坏了,则阵列数据全部丢失。实现RAID0至少需要2块硬盘。

2.RAID1
磁盘镜像,可并行读数据,由于在不同的两块磁盘写入相同数据,写入数据比RAID0慢一些。安全性最好,但空间利用率为50%,利用率最低。实现RAID1至少需要2块硬盘。

3.RAID2
RAID2使用了海明码校验和纠错。将数据条块化分布于不同硬盘上,现在几乎不再使用。实现RAID2至少需要2块硬盘。

4.RAID3
RAID3使用单独的一块校验盘进行奇偶校验。磁盘利用率=(n-1)/n,其中n为RAID中的磁盘总数。实现RAID3至少需要3块硬盘。

5.RAID5
RAID5具有独立的数据磁盘和分布校验块的磁盘阵列,无专门的校验盘,常用于I/O较频繁的事务处理上。RAID5可以为系统提供数据安全保障,虽然可靠性比RAID1低,但是磁盘空间利用率要比RAID1高。RAID5具有与RAID0近似的数据读取速度,只是多了一个奇偶校验信息,写人数据的速度比对单个磁盘进行写入操作的速度稍慢。磁盘利用率=(n-1)/n,其中n为RAID中的磁盘总数。实现RAID5至少需要3块硬盘。RAID5将数据分别存储在RAID各硬盘中,因此硬盘越多,并发数越大。

6.RAID6
RAID6具有独立的数据硬盘与两个独立的分布校验方案,即存储两套奇偶校验码。因此安全性更高,但构造更复杂。磁盘利用率=(n-2)/n,其中n为RAID中的磁盘总数。实现RAID6至少需要4块硬盘。

7.RAID10
RAID10是高可靠性与高性能的组合。RAID10是建立在RAID0和RAID1基础上的,即为个条带结构加一个镜像结构,这样既利用了RAID0极高的读写效率,又利用了RAID1的高可靠性。磁盘利用率为50%。实现RAID10至少需要4块硬盘。

四、硬盘存储器

硬盘是由一个或多个铝制或者玻璃制的碟片组成的存储器。可以分为机械硬盘和固态硬盘。如果你要问我现在的电脑大多是哪种,那以上两种基本上打平手吧。

1.机械硬盘
机械硬盘即传统普通硬盘,由盘片、磁头、接口、缓存、传动部件、主轴马达等组成。

(1)硬盘的物理参数。硬盘的主要物理参数有盘片、磁道、柱面、扇区等。关于这个大家不能自己去想像,一定要看图。但是现在网上的图实在是画的太复杂,把初学者都吓跑了。我找来找去,发现这个图画的最好,简单明了。

盘片:硬盘由很多盘片组成,每个盘片有两个面,每面都有一个读写磁头。
磁道(Head):每个盘面都被划分为数目相等的磁道,且外缘从“0"开始编号。
柱面(Cylinder):相同编号的磁道形成一个圆柱,称为柱面。磁盘的柱面数与单个盘面上的磁道数是相等的。
扇区(Sector):每个盘片上的每个磁道又被划分为若干个扇区。

(2)硬盘其他参数。
硬盘容量:指硬盘能存储数据的数据量大小。硬盘容量=柱面数*磁道数*扇区数*512B。
硬盘转速:硬盘主轴电机的转动速度,单位RPM,即每分钟盘片转动次数(Revolutions per Minute,RPM)。RPM越大,访问时间越短,内部传输率越快,硬盘整体性能越好。
硬盘缓存:硬盘与外部总线交换数据的暂时存储数据的场所。
平均访问时间:硬盘磁头找到目标数据的平均时间。
平均寻道时间:硬盘磁头从一个磁道移动到另一个磁道所需要的平均时间。

看了一堆概念是不是已经记不住了??如果你死记硬背,那学习方法就错了,其实你只需要看一个例子。

举例,某磁盘有100个磁道,磁头从一个磁道移至另一个磁道需要6ms。文件在磁盘上非连续存放,逻辑上相邻数据块的平均距离为10个磁道,每块的旋转延迟时间及传输时间分别为100ms和20ms,则读取一个100块的文件需要多少ms呢?


我们来破解一下这个问题:

总时间=文件数*(读取一个文件所需的时间)

           =文件数*(寻道时间+旋转延迟时间+传输时间)

           =100*(6ms×10+100ms+20ms)
  

2.常见硬盘种类

(1)SATA。早期的硬盘使用PATA硬盘,PATA叫作并行ATA硬盘(Parallel ATA)。该方式下会产生高噪声,为解决该问题需要采用高电压,从而导致生产成本上升。由于数据是并行传输的,受并行技术限制,总体传输率最快只能达到133Mb/s。SATA硬盘(Serial ATA),又被称为串口硬盘。SATA采用差分信号系统,能有效滤除噪声,因此不需要使用高电压传输去抑制噪声,只需使用低电压操作即可。目前SATA3.0的传输速率可达600Mb/s。


(2)SAS。串行连接SCSI接口(Serial Attached SCSI,SAS)即串行连接SCSI,是新一代的SCSI技术,和SATA相同,都是采用串行技术以获得更高的传输速度,并通过缩短连结线改善内部空间。
SAS的接口技术可以向下兼容SATA。具体来说,二者的兼容性主要体现在物理层和协议层的兼容。目前SAS的传输速率可达12Gb/s。


(3)固态硬盘。固态硬盘(Solid State Drives,SSD)是用固态电子存储芯片组成的硬盘,由控制单元和存储单元(FLASH、DRAM)组成。固态硬盘与传统机械硬盘相比,优点是快速读写、质量轻、能耗低、体积小:缺点是价格较为昂贵、容量较低、一且硬件损坏数据较难恢复等。

目前,存储系统(尤其是SAN架构)中,为了均衡价格、速度、稳定性,构建存储池采用的硬盘往往是SSD、SAS等多种硬盘混合形式。这样可以达到数据分级存储的目的,需要高速率存取的数据存放在SSD盘中,大容量数据往往存储在机械硬盘中。

作者简介:荔园微风,1981年生,高级工程师,浙大工学硕士,软件工程项目主管,做过程序员、软件设计师、系统架构师,早期的Windows程序员,Visual Studio忠实用户,C/C++使用者,是一位在计算机界学习、拼搏、奋斗了25年的老将,经历了UNIX时代、桌面WIN32时代、Web应用时代、云计算时代、手机安卓时代、大数据时代、ICT时代、AI深度学习时代、智能机器时代,我不知道未来还会有什么时代,只记得这一路走来,充满着艰辛与收获,愿同大家一起走下去,充满希望的走下去。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值