Chinaunix首页 | 论坛 | 博客
  • 博客访问: 37083
  • 博文数量: 11
  • 博客积分: 265
  • 博客等级: 二等列兵
  • 技术积分: 130
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-03 12:48
文章分类
文章存档

2012年(11)

我的朋友

分类: 服务器与存储

2012-09-04 12:19:52

存储器系统:具有不同容量,成本和访问时间的存储设备

CPU寄存器保存最常有的数据

靠近CPU的小的,快速的高速缓存存储器作为一部分存储在相对慢速的主存储器中的数据和指令缓冲区域

主存暂时存放存储在容量较大的,慢速的磁盘数据

一个编写良好的程序倾向于更频繁的访问某一个层次上的存储设备


存储器层次对于性能的影响:
若cpu需要的数据存储在cpu寄存器上,需要0周期就可以访问,在高速缓存中需要1-30周期,在主存中50-200周期,在磁盘上需要几千万个周期

具有良好局部性的程序:一次又一次访问相同的数据集合,或者倾向于访问临近的数据项集合,倾向于从存储器层次结构中较高层次处访问数据项


随机访问存储器

随机访问存储器:动态的和静态的
静态的比动态的更快

SRAM:作为高速缓存存储器,可以在CPU芯片上,可以在片下
DRAM:作为主存以及图形系统的帧缓冲区

静态RAM:

SRAM:将每个位存储在一个双稳态的存储单元中

该单元用一个六晶体电路来实现的,无限期的保持在两个不同电压配置或者状态之一

动态RAM:

DRAM:对每一个存储为对一个电容充电

抗干扰能力很差

很多原因会导致漏电,存储器系统必须周期性的读出,然后重写来刷新存储器的每一位

传统的DRAM

DRAM芯片中单元被分为d个超单元,每个超单元由w个DRAM单元组成,一个d*w的DRAM总共有dw位信息

上图中有8个数据引脚,2个addr引脚




DRAM芯片连接在存储控制器的电路上,电路一次可以传出传入w位,为了读出(i,j)超单元的内容,先将行地址i发送到DRAM,再将j发送到DRAM

若想在DRAM读出超单元(2,1),如图所示先讲第二行所有的数据都读出来保存在内部行缓冲区中接下来存储器控制器发送列地址1,读出超单元(2,1)中的8位


二维阵列组织的缺点是必须分两步发送地址,增加了访问的时间

存储器模块

DRAM芯片包装在存储器模块中,插在主板的扩展槽上

DIMM:双列直插存储器模块,以64位为块传送数据到存储控制器,168个引脚
SIMM:单列直插存储器模块,以32位为块传送数据到存储控制器,72个引脚

下图表示读出一个64位双字的过程





非易失性存储器

非易失存储器:只读存储器
  • PROM,只能被编程一次
  • ROM,可擦写,可编程
  • 闪存

访问主存

数据流通过总线的共享电子电路在处理器和DRAM主存之间来来回回

读事务:从主存传送数据到CPU
写事务:从CPU传送数据到主存


总线:一组并行的导线,能携带地址、数据和控制信号

上图表示计算机系统的配置,包括CPU芯片,IO桥的芯片组,以及组成主存的DRAM存储器模块,这些部件由一对总线连接起来,其中一条总线是系统总线,它连接IO和CPU
另一条总线是存储器总线,它连接IO桥和主存


IO桥:将总线的电子信号翻译成存储器总线的信号

考虑一下CPU的加载操作:
movl A, %eax

将地址A的内容加载到寄存器%eax中

CPU芯片上称为总线接口的电路发出读请求:
首先:CPU将地址A放到系统总线上,IO桥将该地址传到存储总线
其次:主存感觉到存储总线上的地址信号,从存储器总线上读地址,从DRAM上读数据,并将数据写到存储器总线上,IO桥将存储器总线上信号翻译成系统信号,再沿着系统总线传递
最后:CPU感觉到系统总线上的数据,从总线上读数据,并将数据拷贝到寄存器


具体操作如下图所示:



要是进行如下操作:

movl %eax, A

这里寄存器里面的值要写到地址A中:

首先:CPU将地址A放在系统总线上,存储器从存储器总线上读出地址,并等待数据到达
再次:CPU将寄存器中值拷贝到系统总线上
最后:主存从存储器总线中读出数据字,并且将这些存储到DRAM中

阅读(1054) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~