内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。 内存是由内存芯片、电路板、金手指等部分组成的。
首先介绍一下关于内存的一下概念性的东西:
CHANNEL:双通道,使内存的带宽增加一倍,数据存取速度也相应增加一倍(理论上)。(内存的带宽决定“桥梁”的宽窄) 内存通道独立,CPU可分别寻址、读取数据。
BANK:Memory chip中的存储单元,假如是X4的话有一个存储单元里面有四个bit数据, Bank,Row,column 组成了内存中cell的定位坐标。
RANK:CPU每次会从cache里面读取64bit的数据,内存控制器从内存读取的也是64bit的数据,这是大佬规定好的。
对于X4的话,那我们就需要16颗芯片。为了组成所需的位宽(64bit ),就需要多颗芯片颗粒并联工作,那么这一个64bit的数据芯片的集合就是一个内存条的Rank。对于X4颗粒, 需要16(64/4)颗芯片颗粒
关于SRAM和DRAM,之前也写过一下:https://mp.youkuaiyun.com/postedit/83007445
SRAM:大概理解为MEMORY
DRAM:大概理解为CACHE
CACHE:高速缓冲存储器,其作用是为了更好的利用局部性原理,减少CPU访问主存的次数。CPU是不会直接去访问内存的,都是通过cache间接访问主存, 每次需要访问主存时, 遍历一遍全部cache line(固定为64bit), 查找主存的地址是否在某个cache line中. 如果cache中没有找到, 则分配一个新的cache entry, 把主存的内存copy到cache line中, 再从cache line中读取.
cache entry包含:
1) cache line
2) tag : 标记cache line对应的主存的地址
3) flag : 标记当前cache line是否invalid, 如果是数据cache, 还有是否dirty
回写策略:cache中的数据更新后,需要回写到主存, 回写的时机有:
1) 每次更新都回写. write-through cache
2) 更新后不回写,标记为dirty, 仅当cache entry被evict(驱赶)时才回写
3) 更新后, 把cache entry送如回写队列, 待队列收集到多个entry时批量回写.
cache一致性问题 有两种情况可能导致cache中的数据过期
1) DMA, 有其他设备直接更新主存的数据
2) SMP, 同一个cache line存在多个CPU各自的cache中. 其中一个CPU对其进行了更新.
SPD(SerialPresenceDetect串行存在探测)
1个8针的SOIC封装(3mm*4mm)256字 EEPROM 芯片。记录了诸如内存的速度、容量、电压与行、列地址带宽等参数信息。当开机时PC的BIOS将自动读取SPD中记录的信息,如果没有SPD,就容易出现死机或致命错误的现象。
SPD的内容一般由内存模组制造商写入。实际上,SPD的有效信息只用了128个字节,一般的一个字节至少对应一种参数,有的参数需要多个字节来表述(如产品序列号,生产商在DEDEC组织中的代码)。
ECC内存:Error Checking and Correction即应用了能够实现错误检查和纠正技术(ECC)的内存条。
有没有发现这照片里面是十九块大的芯片,其中中间的一块是内存控制器,那么剩下十八块是什么呢?不是只需要十六块吗?
其中十六块是我们上面所说的十六颗芯片,剩下两块呢?
有没有想过为什么要用16颗芯片,而不用一块芯片,这样不就节省空间吗?
当使用一颗芯片的时候,芯片坏了,就直接凉了。然后当我们使用16颗芯片的时候,当有一块坏了,我们可以使用一颗ECC芯片对数据进行纠错和恢复。再坏一颗,那就再算一次。