跳转至

存储器


RAM

随机存取存储器(英语:Random Access Memory,缩写:RAM)。
它可以随时读写(刷新时除外),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。
RAM工作时可以随时从任何一个指定的地址写入(存入)或读出(取出)信息。

特点

  • 随机存取
  • 易失性,断电就丢失数据。
  • 对静电敏感,静电会干扰存储器内电容器的电荷,引致数据流失,甚至烧坏电路。
  • 需要刷新,由于使用电容,电容或许会漏电,因此需要定期刷新。

SRAM

静态存储单元是在静态触发器的基础上附加门控管而构成的。
因此,它是靠触发器的自保功能存储数据的。
SRAM存放的信息在不停电的情况下能长时间保留,状态稳定,不需外加刷新电路,从而简化了外部电路设计。
但由于SRAM的基本存储电路中所含晶体管较多,故集成度较低,且功耗较大。

SRAM特点
* 存储原理:由触发器存储数据。 * 单元结构:六管NMOS或OS构成。 * 优点:速度快、使用简单、不需刷新、静态功耗极低;常用作Cache。 * 缺点:元件数多、集成度低、运行功耗大。

DRAM

DRAM利用电容存储电荷的原理保存信息,电路简单,集成度高。
由于任何电容都存在漏电,
因此,当电容存储有电荷时,过一段时间由于电容放电会导致电荷流失,使保存信息丢失。
解决的办法是每隔一定时间(一般为2ms)须对DRAM进行读出和再写入,
使原处于逻辑电平“l”的电容上所泄放的电荷又得到补充,原处于电平“0”的电容仍保持“0”,这个过程叫DRAM的刷新。

DRAM的刷新操作不同于存储器读/写操作,主要表现在以下几点
* 刷新地址由刷新地址计数器产生,不是由地址总线提供 * DRAM基本存储电路可按行同时刷新,所以刷新只需要行地址,不需要列地址 * 刷新操作时存储器芯片的数据线呈高阻状态,即片内数据线与外部数据线完全隔离

DRAM与SRAM相比具有集成度高、功耗低、价格便宜等优点,所以在大容量存储器中普遍采用。 DRAM的缺点是需要刷新逻辑电路,且刷新操作时不能进行正常读,写操作。

DRAM特点如下
* 存储原理:利用MOS管栅极电容可以存储电荷的原理,需刷新(早期:三管基本单元;之后:单管基本单元)。 * 刷新:为及时补充漏掉的电荷以避免存储的信息丢失,必须定时给栅极电容补充电荷的操作。 * 刷新时间:定期进行刷新操作的时间。该时间必须小于栅极电容自然保持信息的时间(小于2ms)。 * 优点: 集成度远高于SRAM、功耗低,价格也低。 * 缺点:因需刷新而使外围电路复杂;刷新也使存取速度较SRAM慢,所以在计算机中,DRAM常用于作主存储器。

尽管如此,由于DRAM存储单元的结构简单,所用元件少,集成度高,功耗低,所以已成为大容量RAM的主流产品。

存储类型

cache

存储访问时间

cycle

CPU cache 架构

cache-arch
如上图所示
* 每个核独有L1指令和数据cache。 * 每个核都有L2cache。 * 所有核共享L3cahce。应该是每个CPU插槽上所有核共享。

CPU cache例子

i9
如上如右下角所示: * L1级cache分为数据指令两种,总大小为:核心数 * cache对应大小。 * L1级cache均为8路关联。

linux下查看cache

linux下在/sys目录下查看cache相关信息

Bash
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#例如:查看某一cpu0下cache
ll /sys/devices/system/cpu/cpu0/cache
#下列4个分别对应L1指令和数据cache,L2和L3级cache
index0 index1 index2 index3
## 例如:看看index0目录下的数据
###chache 等级
cat /sys/devices/system/cpu/cpu0/cache/index0/level
###cache类型
cat /sys/devices/system/cpu/cpu0/cache/index0/type
###cache大小
cat /sys/devices/system/cpu/cpu0/cache/index0/size
###该cache组数
cat /sys/devices/system/cpu/cpu0/cache/index0/number_of_sets
###路数,即每组内有都少cahceline
cat /sys/devices/system/cpu/cpu0/cache/index0/ways_of_associativity
###cacheline大小
cat /sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size

cache结构

cache以固定大小的块与主存交换,该块叫做cache块,或者cache line。 cache-size
如上图所示: cache分组,每组若干行。

地址计算:
* 假设cpu访问内存使用的虚拟地址长度为m(x86-64上为48), * cache每块大小为B字节, * cache有S组 * 每组E个, * tag位长度为:t = m - b - e - s

注意:
* 计算cache总大小时,不包含每行的tag和flag字段。 * 标志位实际还有效位(valid bit)、脏位(dirty bit)、使用位(use bit)等。

cache映射

直接关联

当E=1时

组关联

当 1 < E < S时

全关联

当E=S时,即为全关联

map