博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
存储器层次结构 --《深入理解计算机系统》第六章读书笔记
阅读量:6486 次
发布时间:2019-06-24

本文共 1239 字,大约阅读时间需要 4 分钟。

1.几种存储技术

  • 随机访问存储器RAM,RAM又分为两类:静态的SRAM和动态的DRAM。
    • 静态SRAM特点:容量较小,速度较之动态DRAM要快很多,故而价格也较高。一般用作CPU与内存的缓存。
    • 动态DRAM特点:容量较大,速度比SRAM慢,价格相对较低。一般用作系统内存。
  • 磁盘存储,存盘属于外部I/O设备,其特点是存储容量大,但读取速度更慢,价格也更加便宜。一般而言,从磁盘上读信息的时间为毫秒级,从DRAM读比从磁盘读快10万倍,从SRAM读比从磁盘读快100万倍。
    • 因为磁盘的构造是一个圆盘,盘上分布着一条条磁道(不同半径就有不同的磁道),每次访问都要找到相应的磁道,然后磁盘旋转到对应的启示位置,故而,磁盘扇区访问时间=寻道时间+旋转时间+传输时间。

2.局部性

  在程序中,程序倾向于引用邻近于其他最近引用过的数据项的数据项,或者就是最近引用的数据项本身,这种倾向,称为局部性原理。打个比方,在如下一个二维数组的循环中,循环1的局部性就比循环2的更优秀。

/*有良好局部性的程序*/ int loop1( int array[M][N] ){    int i = 0,j = 0,sum = 0;    for( i = 0;i < M;i++ ){        for( j = 0;j < N;j++ )            sum += a[i][j];    return sum;}
/*局部性很差的程序*/ int loop2( int array[M][N] ){    int i = 0,j = 0,sum = 0;    for( i = 0;i < M;i++ ){        for( j = 0;j < N;j++ )            sum += a[j][i];    return sum;}

   程序局部性可以总结为以下:

  • 重复引用一个变量的程序有良好的时间局部性。
  • 对于具有步长为k的引用模式的程序,步长越小,空间局部性越好。相对得,在存储器中以大步长跳来跳去的程序空间局部性会很差。
  • 对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。

3.高速缓存存储器

  随着CPU与主存之间的速度差距不见增加,故而早期的系统设计者被迫在CPU寄存器和主存之间插入了一个小的SRAM告诉缓存存储器。而后来随着系统内部各存储器结构之间速度差距的不断增大,缓存这项技术也被用到了各存储器结构之间,比如磁盘和内存。

  缓存是为了减少各存储器层次结构之间的速度差异而存在的,其作用就是在访问更低级的存储器结构的时候,直接低层次存储器结构的一个较大的块存放到缓存存储器中。这样,下次要访问之前数据的邻近数据时,就能快速得从缓存存储器中得到数据。要编写局部性良好的程序也是基于这个原因。

转载于:https://www.cnblogs.com/listenfwind/p/5862547.html

你可能感兴趣的文章
Shell编程-环境变量配置文件
查看>>
Struts2和Spring MVC的区别
查看>>
git代码冲突
查看>>
HDOJ-1010 Tempter of the Bone
查看>>
190行代码实现mvvm模式
查看>>
兼容几乎所有浏览器的透明背景效果
查看>>
Linux VNC server的安装及简单配置使用
查看>>
阿里宣布开源Weex ,亿级应用匠心打造跨平台移动开发工具
查看>>
Android项目——实现时间线程源码
查看>>
招商银行信用卡重要通知:消费提醒服务调整,300元以下消费不再逐笔发送短信...
查看>>
js的AJAX请求有关知识总结
查看>>
三分 POJ 2420 A Star not a Tree?
查看>>
修改OBS为仅直播音频
查看>>
OCA读书笔记(3) - 使用DBCA创建Oracle数据库
查看>>
ClickStat业务
查看>>
spring3.0.7中各个jar包的作用总结
查看>>
Windows 10 /win10 上使用GIT慢的问题,或者命令行反应慢的问题
查看>>
我的路上
查看>>
DB2与oracle有什么区别
查看>>
创建一个多级文件目录
查看>>