zoukankan      html  css  js  c++  java
  • 第六章、存储器层次结构

    存储器层次结构

     6.1存储技术

      6.1.1随机访问存储器

       随机访问存储器分为两类:静态和动态

    1、静态RAM

      静态RAM 的基本存储电路为触发器,每个触发器存放一位二进制信息,由若干个触发器组成一个存储单元,再由若干存储单元组成存储器矩阵,加上地址译码器和读/写控制电路就组成静态RAM。但由于静态RAM 是通过有源电路来保持存储器中的数据,因此,要消耗较多功率,价格也较高。

    2、动态RAM

      每一个比特的数据都只需一个电容跟一个晶体管来处理,相比之下在SRAM上一个比特通常需要六个晶体管。正因这缘故,DRAM拥有非常高的密度,单位体积的容量较高因此成本较低。但相反的,DRAM也有访问速度较慢,耗电量较大的缺点。

    3、传统的DRAM

      采用二位阵列组织

    6.1.2磁盘存储

    1、磁盘构造

    盘片
    表面
    :每个盘片有两个表面
    主轴:盘片中央,可旋转 
    旋转速率:通常5400~15000/min 
    磁道:同心圆们 
    扇区:每个磁道被划分为一组扇区 
    数据位:每个扇区包含相等数量的~,通常为512字节 
    间隙:存储用来标识扇区的格式化位 
    磁盘驱动器-磁盘-旋转磁盘
    柱面
    :所有盘片表面上到主轴中心的距离相等的磁道的集合

    2.磁盘容量

          记录密度:(位/英寸)磁道一英寸的段中可以放入的位数

          磁道密度:(道/英寸)从盘片中心出发半径上一英寸的段内可以有的磁道数

          面密度:(为/平方英寸)记录密度*磁道密度

          磁盘容量  =  (字节数/扇区) * (平均扇区数/磁道)*(磁道数/表面)*(表面数/盘片)*(盘片数/磁盘)

    3.磁盘操作

          访问时间=寻道时间+旋转时间+传送时间

          旋转时间:最大旋转延迟=(1/旋转速率)*(60sec*1000ms/sec)

               平均旋转延迟=(1/2) * 最大旋转延迟

          传送时间:平均传送时间=(1/旋转速率)*(60sec*1000ms/sec)*(1/平均扇区数/磁道)

    4、访问磁盘

    CPU使用一种称为存储器映射I/O的技术来向I/O设备发出命令。在使用存储器映射I/O的系统中,地址空间中有一块地址是为与I/O设备通信保持的,这样的地址称为一个I/O端口。

    CPU通过将命令、逻辑块号和目的存储器地址写到与磁盘相关联的存储器映射地址,发起一个磁盘读。

    CPU执行对地址的存储命令,发起磁盘读: 
    第一条指令时发送一个命令字;第二条指令指明应该读的逻辑块号;第三条指令指明应该存储磁盘扇区内内容的主存地址。 
    直接存储器访问:设备可以自己执行读或者写总线事务,而不需要CPU干涉的过程。这种数据传送称为DMA传送 
    基本思想:中断会发信号到CPU芯片的一个外部引脚上。这会导致CPU暂停它当前正在做的工作,跳转到一个操作系统例程。这个程序会记录下I/O已经完成,然后将控制返回到CPU被中断的地方.

    6.2局部性

      1、局部性原理: CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。

    2、三种不同类型的局部性:时间局部性(Temporal Locality):如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。程序循环、堆栈等是产生时间局部性的原因。空间局部性(Spatial Locality):在最近的将来将用到的信息很可能与现在正在使用的信息在空间地址上是临近的。顺序局部性(Order Locality):在典型程序中,除转移类指令外,大部分指令是顺序进行的。顺序执行和非顺序执行的比例大致是5:1。此外,对大型数组访问也是顺序的。指令的顺序执行、数组的连续存放等是产生顺序局部性的原因

    3、取指令的局部性

    循环体里的指令是按照连续的存储器顺序执行的,因此循环有良好的空间局部性,因为循环体会被执行多次,所以它也有良好的时间局部性。 
    代码区别于程序数据的一个重要属性时在运行时是不能被修改的。

     

    6.3 存储器层次结构

     

    1、缓存命中

    若需要访问k+1层里的数据块d,如果d已经缓存在第k层,则称缓存命中。这样从第k层取块d要比k+1层更块。

    2、缓存不命中

    若d不在第k层,则是缓存不命中,此时将k+1层存储中取出块d,放入k层。可能需要替换掉k层中已有的块。替换策略是:随机,最近最少使用等。

    需要有个东西对缓存进行管理,比如怎么进行块的划分,各层次间怎么传送块,判断是否命中,不命中该如何处理,写回数据的时候该如何处理。

    都是需要考虑的问题,可用硬件管理如cache,也可用软件管理如虚拟内存。

    3、缓存的管理

    i)相关假定

    假定存储器的地址有m位,便有M=2m 不同地址。

    一个缓存被分成S=2s个的高速缓存组(cache set),

    每个组包含 E 个高速缓存行。

    每个缓存行由一个B=2b字节的数据块,一个有效位,t=m-(b+s)个标记位组成。

    一个高速缓冲区的大小C = S * E * B。

    ii)如何访问缓存

    当要访问存储器中的一个字节时,给出的访问地址的m位中,前t位表示标记位,中间s位为组索引,最后b位为块偏移。

    iii)缓存不命中时

    当缓存不命中时,则若需要将存储器中的块放入缓存对应的组中。

    若组中的行都有数据,则需要进行替换,替换策略是:LFU或这LRU(不想细说了)

    iv)三种缓存方式的划分

    分为直接映射高速缓存,组相联高速缓存,全相联高速缓存

    若指定了S,E,B的值,则缓存的划分方式就已经确定了。

    缓存块与存储块之间也就建立了一种映射关系。

     

     

    参考资料

    1、《深入理解计算机系统》课本第六章

    2、51cto.com

    3、zengxg14的博客

    4、百度百科

     

    本章小结

    在数字逻辑电路中有对RAM 和 ROM有简短的介绍。但是并不具体,通过这一章的学习,了解了存储器的分类,工作原理,以及如何提高性能等方面的知识。

  • 相关阅读:
    python--模块与包
    内置函数 的总结
    迭代器 生成器 列表推导式 生成器表达式的一些总结
    函数的有用信息 带参数的装饰器 多个装饰器装饰一个函数
    函数名的应用(第一对象) 闭包 装饰器
    动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结
    函数的初识 函数的返回值 参数
    文件操作 常用操作方法 文件的修改
    遍历字典的集中方法 集合的作用 以及增删查的方法
    计算机硬件的小知识
  • 原文地址:https://www.cnblogs.com/5320zhq/p/4915069.html
Copyright © 2011-2022 走看看