zoukankan      html  css  js  c++  java
  • 存储器层次结构 --《深入理解计算机系统》第六章读书笔记

    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告诉缓存存储器。而后来随着系统内部各存储器结构之间速度差距的不断增大,缓存这项技术也被用到了各存储器结构之间,比如磁盘和内存。

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

  • 相关阅读:
    利用Java脚本实现弹出窗口后,按确定实现跳转
    客服利用QQ实现即时聊天
    获取页面可见区域,屏幕区域的尺寸
    圆角模板百度知道
    利用javascript实现web页面刷新的方法
    论:命名空间,程序集和类
    我从少年时候就非常喜欢的诗歌:雨巷
    魔兽世界 圣骑士唯一的远程武器任务
    又想起我年少时候熟记的抒情诗致海伦
    System.Text.Encoding.UTF8 字符串和字节数组的互相转换
  • 原文地址:https://www.cnblogs.com/listenfwind/p/5862547.html
Copyright © 2011-2022 走看看