计算机的存储层次(memory hierarchy)之中,存储起的读取速度:

寄存器(register)最快,内存其次,最慢的是硬盘(固态硬盘SSD 高于 普通硬盘)

说明:

CPU的寄存器和高速缓存,是每个CPU内核独享的,

多个CPU核就分别有多个寄存器和高速缓存

 

 

PC电脑的主要硬件信息

CPU 一级缓存,包含数据和指令缓存,加速给CPU指令执行和数据计算

其中:

L1 Cache:每个内核独享,KB级,例如 32KB;

L2 Cache:可能每个内独享,可能多个内核共享,KB、MB级;

L3 Cache:共享,MB级,例如 3072KB = 3MB;

如下图,两根内存条,每根内存条大小2GB,两根内存条共4GB

如下图,显卡大小 512MB,主要供图形处理器GPU计算时的加速

如下图,机械硬盘的大小512GB,自2018年后固定硬盘SSD已经流行了

 

普通硬盘和固态硬盘的区别

1)普通硬盘(HDD)

2)固定硬盘(SSD)

二者区别

1、性能方面:固态硬盘和机械硬盘的构造是完全不同的。固态硬盘启动快,没有电机加速旋转的过程

2、基本的读写原理不一样:固态硬盘是按位读写,机械硬盘是基本可以理解为顺序读写,这也是为什么固态硬盘不需要做磁盘碎片整理,而机械硬盘用久了就必须做一次磁盘碎片整理;   

3、读写速度不同:固态硬盘在传输速度上有很大的优势,最高可达500M/秒,其中读取速度达到400-600M/秒,写入速度同样可以高达200M/秒。而传统的IDE硬盘读取速度极限是无法超越200M/秒,写入速度也很难突破100M每秒,平时基本在几十M每秒;

4、数据安全:普能硬盘是通过磁头读取盘片来完成数据读写的,在高速旋转过程中盘片和磁头碰撞更容易造成数据受损,还有就是运输过程中也容易造成盘片受损造成数据丢失,而固态硬盘没有盘片,所以只要其芯片不受到外形挤压产生形变,数据就能获得安全的保存;

5、写入次数:固态硬盘拥有写入次数限制,也就是说有寿命问题,SLC主控SSD具备10万次写入,而普通硬盘采用的MLC主控,其写入次数仅有1万次,理论上说,SSD寿命会较短;

6、数据恢复:固态硬盘上的数据删除后,是无法借助数据恢复等软件恢复的,而传统的普通机械硬盘可以通过一些专业的数据恢复软件找回,这也是固态硬盘的一个不足。

拓展资料:

硬盘是电脑主要的存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成,碟片外覆盖有铁磁性材料

硬盘有固态硬盘(SSD 盘,新式硬盘)、机械硬盘(HDD 传统硬盘)、混合硬盘(HHD 一块基于传统机械硬盘诞生出来的新硬盘)。SSD采用闪存颗粒来存储,HDD采用磁性碟片来存储,混合硬盘(HHD: Hybrid Hard Disk)是把磁性硬盘和闪存集成到一起的一种硬盘。绝大多数硬盘都是固定硬盘,被永久性地密封固定在硬盘驱动器中。

 

 

同样都是晶体管存储设备,为什么寄存器比内存快呢?

Mike Ash写了一篇很好的解释,非常通俗地回答了这个问题,有助于加深对硬件的理解。

原因一:距离不同

距离不是主要因素,但是最好懂,所以放在最前面说。

内存比起寄存器离CPU比较远,所以要耗费更长的时间读取

以3GHz的CPU为例,电流每秒钟可以振荡30亿次,每次耗时大约为0.33纳秒(1秒 / 30亿 = 1/3纳秒 = 0.33纳秒)

光在1纳秒的时间内,可以前进30厘米。光速为30万公里每秒,即 30万*1000*100厘米 / 10亿纳秒 = 30厘米/纳秒

也就是说,在CPU的一个时钟周期内,光可以前进10厘米。因此,如果内存距离CPU超过5厘米,就不可能在一个时钟周期内完成数据的读取,这还没有考虑硬件的限制和电流实际上达不到光速。相比之下,寄存器在CPU内部,距离更短,当然读起来会快一点

距离对于桌面电脑影响很大,对于手机影响就要小得多。

手机CPU的时钟频率比较慢(iPhone 5s为1.3GHz),而且手机的内存紧挨着CPU。

 

原因二:硬件设计不同

苹果公司新推出的iPhone 5s,CPU是A7,寄存器有6000多位(31个64位寄存器,加上32个128位寄存器)而iPhone 5s的内存是1GB,约为80亿位(bit)

这意味着,高性能、高成本、高耗电的设计可以用在寄存器上,反正只有6000多位,而不能用在内存上

因为每个位的成本和能耗只要增加一点点,就会被放大80亿倍。

事实上确实如此,内存的设计相对简单,每个位就是一个电容和一个晶体管,而寄存器的设计则完全不同,多出好几个电子元件

并且通电以后,寄存器的晶体管一直有电,而内存的晶体管只有用到的才有电,没用到的就没电,这样有利于省电。

这些设计上的因素,决定了寄存器比内存读取速度更快

 

原因三:工作方式不同

寄存器的工作方式很简单,只有两步:

(1)找到相关的位

(2)读取这些位。

内存的工作方式就要复杂得多:

(1)找到数据的指针。(指针可能存放在寄存器内,所以这一步就已经包括寄存器的全部工作了)

(2)将指针送往内存管理单元(MMU),由MMU将虚拟的内存地址翻译成实际的物理地址。

(3)将物理地址送往内存控制器(memory controller),由内存控制器找出该地址在哪一根内存插槽(bank)上。

(4)确定数据在哪一个内存块(chunk)上,从该块读取数据。

(5)数据先送回内存控制器,再送回CPU,然后开始使用。

内存的工作流程比寄存器多出许多的寻址步骤

每一步都会产生延迟,累积起来就使得内存比寄存器慢得多。

为了缓解寄存器与内存之间的巨大速度差异,硬件设计师做出了许多努力,包括在CPU内部设置缓存(寄存器、高速缓存L1)、优化CPU工作方式,尽量一次性从内存读取指令所要用到的全部数据等等。

 

寄存器、缓存、内存、硬盘、存储器

能存储数据的器件都可以称之为存储器,它的含义覆盖了寄存器,缓存,内存,硬盘

CPU 访问快慢的速度依次为: 寄存器 -> 缓存 -> 内存 -> 硬盘 -> 软盘 -> 磁带 -> 纸孔

寄存器(register)

寄存器是中央处理器CPU的组成部分,是一种直接整合到CPU中的有限的高速访问速度的存储器,它是有一些与非门组合组成的,分为通用寄存器和特殊寄存器。CPU访问寄存器的速度是最快的,ns纳秒级别。那为什么我们不把数据都存储到寄存器中呢,因为寄存器是一种容量有限的存储器,并且非常小。因此只把一些计算机的指令等一些计算机频繁用到的数据存储在其中,来提高计算机的运行速度。

内核的控制部件(CU)中,含指令寄存器(IR)和程序计数器(PC)

内核的算术及逻辑部件(ALU)中,累加器(ACC)

 

缓存(cache)

缓存其实是内存中高速缓存(cache),它之所以存在,是因为当CPU要频繁访问内存中的一些数据时,如果每次都从内存中去读,花费的时间会更多,因此在寄存器和内存之间有了缓存,把CPU要频繁访问的一些数据存储在缓冲中,这样效率就会更高,但需要注意的是,缓冲的大小也是很小的,不能存放大量的数据,并且缓存中存放的数据会因为CPU的访问而被替代,必须某个数据开始被CPU频繁访问,但后来不再频繁,那这个数据的空间会被其他访问频繁的数据所占据(那些数据会被暂时存储在缓存中是算法问题)。

缓存又可以分为一级和二级缓存,一级的速度大一二级的速度

因此CPU在访问数据时,先到缓存中看有没有,没有的话再到内存中读取。

缓存不在CPU内核,而是在内存中:

L1 Cache:每个内核独享,KB级;

L2 Cache:可能每个内独享,可能多个内核共享,MB级;

L3 Cache:共享,MB级;

Cache运作机制

系统开机时,Cache中无内容。当CPU送出一组地址去访问内存时,被访问的内存的内容才被同时“拷贝”到Cache中。

此后,每当CPU访问内存时,Cache 控制器要检查CPU送出的地址,判别CPU要访问的地址单元是否在Cache 中。

若在,称为Cache 命中,CPU可用极快的速度对它进行读/写操作;

若不在,则称为Cache未命中,这时就需要从内存中访问,并把与本次访问相邻近的存储区内容复制到Cache 中。

未命中时,对内存访问可能比访问无Cache 的内存要插入更多的等待周期,反而会降低系统的效率。

而程序中的调用和跳转等指令,会造成非区域性操作,则会使命中率降低。

因此,提高命中率是Cache 设计的主要目标。

 

内存(Memory)

存储器分为内存(易失性存储器)和外存(非易失性存储器)

分为只读(ROM)和随机存储器(RAM)一级最强悍的高速缓存存储器(cache)。

其中RAM应用非常广泛,例如在平常用的开发板中的内存指的就是RAM,还有我们电脑上的内存条指的就是RAM。

内存:SRAM和DRAM

SRAM,静态RAM。每个单元由6个晶体管组成,用于CPU和GPU缓存;

DRAM,动态RAM。每个单元由1个晶体管组成,用于内存条;

 

硬盘、软盘、U盘

存储器都归入外存储器,它们的访问速度是最慢的。

SSD=SSD接口芯片/晶振+SSD主控芯片/固件+NAND闪存;

机械式 HDD固态硬盘

 

 

参考推荐:

程序员应当更新现代CPU的知识

编写你的第一个垃圾收集器

C语言编译全过程剖析

JVM 基础知识

最经典的程序员笑话

PHP 线程,进程,并发

Java虚拟机 JVM 的结构与机制

C++用new和不用new创建类对象区别