Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3009412
  • 博文数量: 167
  • 博客积分: 613
  • 博客等级: 中士
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-13 21:35
个人简介

人, 既无虎狼之爪牙,亦无狮象之力量,却能擒狼缚虎,驯狮猎象,无他,唯智慧耳。

文章分类
文章存档

2015年(19)

2014年(70)

2013年(54)

2012年(14)

2011年(10)

分类: C/C++

2011-10-09 23:37:29

计算机中的所有数据和指令都存储在存储器中,计算机系统中一个基本而持久的思想是:如果你理解了系统是如何将数据在存储器层次结构中上上下下移动的,那么在编写应用程序时就可以使得它们的数据项存储在层次结构中较高的地方,在那里CPU能更快地访问到它们,从而提高程序的执行效率。
1.存储器的层次结构
@系统在组织存储器的时候选择了层次结构,由上往下依次为:
寄存器---高速缓存1---高速缓存2---高速缓存3---主存---本地二级存储(本地磁盘)---远程二级存储(NFS,Web服务器等)。由上往下,访问速度依次降低,但是存储容量却依次增大,并且每bit成本也在降低。
@每一层的存储器都作为其低一层的缓存使用。即:相邻的层间可以进行以块为单位的数据传递,而且自然的相邻层的传递的块大小相同,非相邻层间不然;每一层都维护着其下一层的数据的一个子集;需要读取数据时,先查询缓存,若不命中,才查询其下一层。
@专业术语:
缓存命中(cache hit),缓存不命中(cache miss)
cache miss——1)cold miss缓存中尚未初始化数据,查询一定不命中。2)conflict miss冲突不命中。有时为了避免在层与层间传递数据时随机存储带来的低效率,硬件缓存设置了比较严格的放置策略,如将k+1层的某些块限制放置在k层的一个子集中。当属于同一子集的块重复被查询时,就会出现反复不命中。3)capacity miss容量不命中。缓存太小,不能处理这个工作集。
2.程序的局部性
明了了存储器的层次结构,显然,尽量将数据存储在更高层次的存储器中或者提高缓存命中率,都可以带来程序执行效率的提升。这里的principle of locality主要有两项考虑:
@时间局部性(temporal locality),被引用过一次的存储器位置随后将再被多次引用(避免了查询开支)
@空间局部性(spatial locality),被引用的存储器位置间的步长很小
@Exa:时间局部性的典型例子是循环求和中对于sum的重复调用;而空间局部性的典型例子是对于数组的顺序读写要优于以大于1的步长操作。
3.存储器的基本常识
@随机访问存储器(RAM)——分为静态RAM(SRAM)和动态RAM(DRAM)。SRAM拥有双稳态性,因而状态稳定不易受到干扰影响,常用来作CPU的高速缓存。DRAM常用来作主存。一般SRAM的访问毒素是DRAM的10倍。
@存储器模块——一个内存条就是一个内存模块。上面有多个内存芯片,存储时采取超单元地址(i,j)对所有的芯片在相同位置进行读写的机制。
@磁盘构造——磁盘,盘面---磁道,扇区,间隙---柱面
@磁盘扇区的访问时间主要是寻道时间和旋转延迟
@格式化磁盘——work:1)将标识扇区的信息填写在扇区之间的间隙;2)标识出表面有故障的柱面并且不适用它们;3)在每个区中预留出一组柱面作为备用。所以格式化的大小通常小于最大容量。
@总线结构——
CPU【寄存器文件,ALU,总线结构】------系统总线-------I/O桥接器------存储器总线--------主存
I/O桥接器----  I/O总线 ------USB控制器,图形适配器,主机总线适配器(磁盘)等


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