深入理解操作系统(15)第六章:存储器层次结构(1)存储技术+局部性+层次结构(包括:存储器系统/RAM,ROM,SRAM,DRAM,闪存flash/磁盘/(时间和空间)局部性/缓存命中)

1. 前沿

1.1 简单的计算机系统模型

到目前为止,在我们对系统的研究中,我们依赖于一个简单的计算机系统模型,CPU执行指令而存储器( memory)系统为CPU存放指令和数据。在我们简单的模型中,存储器系统是一个线性的字节数组,而CPU能够在一个常数时间内访问每个存储器位置。虽然迄今为止这都是一个有效的模型,但是它没有反映现代系统实际工作的方式。

1.2 存储器系统

实际上,

存储器系统( memory system)是一个具有不同容量、成本和访问时间的存储(storage)设备的层次结构。

1. CPU寄存器保存着最常用的数据。
2. 靠近CPU的小的、快速的高速缓存存储器(cachememory)作为
	存储在相对慢速的主存储器(main memory,简称主存)中数据和指令子集的缓冲区域。
	主存暂时存放存储在较大的慢速磁盘上的数据
3. 磁盘常常又作为存储在通过网络连接的其他机器的磁盘或磁带上的数据的缓冲区域

1.3 局部性原理

存储器层次结构是可行的,这是因为与下一个更低层次的存储设备相比来说,

局部性原理:一个编写良好的程序倾向于更频繁地访问某一个层次上的存储设备。

所以,下一层的存储设备可以更慢速一点,也因此更大,每个位更便宜。整体效果是一个大的存储器池,其成本与层次结构底层最便宜的存储设备相当,但是却以接近于层次结构顶部存储设备的高速率向程序提供数据。

1.4 不同存储结构的访问周期

作为一个程序员,你需要理解存储器层次结构,因为它对你应用程序的性能有着巨大的影响如果你的程序需要的数据是

1. 如果存储在CPU寄存器中的,那么在执行期间,在零个周期内就能访问到它们。
2. 如果存储在高速缓存中,需要1~10个周期。
3. 如果存储在主存中,需要50~100个周期。
4. 如果存储在磁盘上,需要大约20 000 000(2千万)个周期
	(linux 2.4内核频率大概2.1GHz,时钟周期约0.5ns,2千万个周期就是10s 貌似差不多)

1.5 基本而持久的思想

这里就是计算机系统中一个基本而持久的思想:

如果你理解了系统是如何将数据在存储器层次结构中上上下下移动的,
那么你可以编写你的应用程序,
使得它们的数据项存储在层次结构中较高的地方,在那里CPU能更快地访问到它们。

这个思想围绕着计算机程序的一个称为局部性(locality)的基本属性。

局部性的基本属性:
1. 具有良好局部性的程序倾向于一次又一次地访问相同的数据项集合,或是倾向于访问邻近的数据项集合。
2. 具有良好局部性的程序比局部性差的程序更多地倾向于从存储器层次结构中较高层次处访问数据项,
   因此运行得更快。

例如,不同的矩阵乘法核心程序执行相同数量的算术操作,但是有不同程度的局部性,它们的运行时间可以相差6倍。

1.6 本章研究对象:

在本章中,我们会看看基本的存储技术:

SRAM存储器、DRAM存储器、ROM存储器和磁盘——并描述它们是如何被组织成层次结构的。

特别地,我们将注意力集中在

CPU和主存之间作为缓存区域的高速缓存存储器上,因为它们对应用程序性能的影响最大。

我们向你展示如何分析你的C程序的局部性,而且我们还介绍改进你的程序中局部性的技术。
你还会学到一种描绘某台机器上存储器层次结构的性能的有趣方法,称为“存储器山( memory mountain)",它给出的读访次数是局部性的一个函数

1.6.1 扩展:RAM ROM SRAM DRAM 闪存flash

说明:

1. RAM (Random Access Memory)随机存取存储器。
	RAM通常都是在掉电之后就丢失数据,典型的就是计算机的内存。
	
2. ROM (Read Only Memory 只读存储器或者固化存储器) 内部存储,如bios存储在rom中
	ROM在系统停止供电的时候仍然可以保持数据
	种类:
		ROM也有很多种:PROM(可编程的ROM)、EPROM(可擦除可编程ROM)、EEPROM
		EEPROM是通过电子擦出,写入时间很长,写入很慢; 手机软件一般放在EEPROM中
	磁盘和ROM区别:
		外部存储器中采用了类似磁带的装置的东东就叫磁盘。软盘、硬盘、U盘等都是磁盘的一种。
		1. 硬盘属于外部存储器,而ROM是内部存储器
		2. 硬盘可以轻易地改写内容,但是ROM不可以
			ROM数据不能随意更新,但是在任何时候都可以读取。即使是断电,ROM也能够保留数据。
			如 BIOS 存储在rom
		3. 电脑硬盘是磁盘不是ROM,BIOS存在ROM当中)
	
3. SRAM 是“static RAM(静态随机存储器)”的简称,之所以这样命名是因为当数据被存入其中后不会消失。
	CPU中的二级缓存属于SRAM
	
4. DRAM 动态随机存储器不同,DRAM 必须在一定的时间内不停的刷新才能保持其中存储的数据。
	电脑中的内存属于DRAM,	
	
5. 闪存flash
它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,
还不会断电丢失数据同时可以快速读取数据(NVRAM的优势)
年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位
它用作存储Bootloader以及操作系统或者程序代码,或者直接当硬盘使用(U盘)。
如:U盘和MP3里用的就是这种存储器。	
分类: 
	目前Flash主要有NOR(或非) Flash和NADN与非) Flash
	1.NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写次数是十万次
	2.工业领域,NOR 用的较多,特别是程序存储,少量数据存储等。
		在消费领域,大量数据存储,NAND较多。

2. 存储技术

2.1 随机访问存储器

随机访问存储器(random-access memory,RAM)分为两类:

静态的和动态的。
1. 静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵得多。
	SRAM用来作为高速缓存存储器,既可以在CPU芯片上,也可以不在CPU芯片上。
	
2. DRAM用来作为主存以及图形系统的帧缓冲区。
	典型地个桌面系统的SRAM不会超过几兆字节,但是DRAM却有几百或几千兆字节。

2.1.1 静态RAM

SRAM将每个位存储在一个双稳态的( bistable)存储器单元(cell)里。
每个单元是用一个六晶体管电路来实现的。

2.1.2 动态RAM

DRAM将每个位存储为对电容的充电。
这个电容非常小,通常只有大约千万亿分之一法拉也就是,30×10的15次方法拉。
DRAM存储器可以制造得非常密集一每个单元由一个电容和一个访问晶体管组成。
但是,与SRAM不同,DRAM存储器单元对干扰非常敏感。当电容的电压被扰乱之后,它就永远不会恢复了。暴露在光线下会导致电容电压改变。
实际上,数码照相机和摄像机中的传感器本质上就是DRAM单元的阵列

2.1.3 常规DRAM

2.1.4 存储器模块

DRAM芯片包装在存储器模块(memory module)中,它插到主板的扩展槽上。
常见的包装包括168个管脚的双列直插存储器模块( Dual Inline Memory Module,DMM),它以64位为块传送数据到存储控制器和从存储控制器传出数据,还包括72个管脚的单列直插存储器模块( Single InIiMemory Module,SMM),它以32位为块传送数据。

2.1.5 增强的DRAM

有许多种DRAM存储器,而生产厂商试图跟上迅速增长的处理器速度,市场上会定期推出新的种类。
每种都是基于传统的DRAM单元,并进行了一些优化,改进了访问基本DRAM单元的速度
如:FPM/EDO/DDR等 DRAM

2.1.6 非易失性储器

如果断电,DRAM和SRAM会丢失它们的信息,从这个意义上说,它们是易失的(volatile)。
另一方面,非易失性存储器(nonvolatile memory)即使是在关电后,仍然保存着它们的信息。

有很多种非易失性存储器。出于历史原因,虽然ROM中有的类型既可以读也可以写,但是它们整体上都被称为ROM(read-only memory,只读存储器)。
ROM是以它们能够被重编程(写)的次数和对它们进行重编程所用的机制来区分的

2.1.7 访问主存

数据流通过称为总线(bus)的共享电路在处理器和DRAM主存之间来来回回。每次CPU和主存之间的数据传送都是通过一系列步骤来完成的,这些步骤称为总线事务(bus transaction)。

读事务(read transaction)从主存传送数据到CPU
写事务(write transaction)从CPU传送数据到主存

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

下面展示了一台典型的桌面系统的结构。
图6.6
在这里插入图片描述

2.2 磁盘存储

磁盘是广为应用的保存大量数据的存储设备,存储数据的数量级可以达到几十到几百千兆字节,而基于RAM的存储器只能有几百或几千兆字节。不过,从磁盘上读信息需要几毫秒,比从DRAM读慢了10万倍,比从SRAM读慢了100万倍。

扩展,磁盘和ROM区别:

外部存储器中采用了类似磁带的装置的东东就叫磁盘。软盘、硬盘、U盘等都是磁盘的一种。
1. 硬盘属于外部存储器,而ROM是内部存储器
2. 硬盘可以轻易地改写内容,但是ROM不可以
	ROM数据不能随意更新,但是在任何时候都可以读取。即使是断电,ROM也能够保留数据。
	如 BIOS 存储在rom
3. 电脑硬盘是磁盘不是ROM,BIOS存在ROM当中)

2.2.1 磁盘构造

磁盘结构包括:盘片、磁头、盘片主轴、控制电机、磁头控制器、数据转换器、接口、缓存等几个部份。

1. 所有的盘片(一般硬盘里有多个盘片,盘片之间平行)都固定在一个主轴上。
2. 在每个盘片的存储面上都有一个磁头,磁头与盘片之间的距离很小(所以剧烈震动容易损坏)
	磁头连在一个磁头控制器上,统一控制各个磁头的运动。
3. 磁头沿盘片的半径方向动作,而盘片则按照指定方向高速旋转,这样磁头就可以到达盘片上的任意位置了。

参考:
硬盘知识:硬盘结构、盘片、磁道、扇区、柱面、磁头数、寻址模式
https://blog.csdn.net/lqy971966/article/details/120042406

2.2.2 磁盘容量

磁盘上可以记录的最大位数被称为它的最大容量,或者简称为容量。
磁盘容量是由以下技术因素决定的

1. 记录密度(recording density)(位英寸):磁道一英寸的段中可以放入的位数
2. 磁道密度(track density)(道英寸):从盘片中心出发半径为一英寸的段内可以有的磁道数
3. 面密度(areal density)(位严平方英寸):记录密度与磁道密度的乘积

2.2.3 磁盘操作

磁盘用连接到一个传动臂的读/写头来读写存储在磁性表面的位,如图6.10所示。
通过沿着半径轴移动这个传动臂,驱动器可以将读/写头定位在盘面上的任何磁道上。

这样的机械运动称为寻道(seek)。

一旦读/写头定位到了期望的磁道上,那么当磁道上的每个位通过它的下面时,读门写头可以感知到这个位的值(读该位),也可以修改这个位的值写该位)。有多个盘片的磁盘针对每个盘面都有一个独立的读/写头,如图60(b)所示。读/写头垂直排列,一致行动。在任何时刻,所有的读/写头都位于同一个柱面上

图6.10
在这里插入图片描述

在传动臂末端的读/写头在磁盘表面高度大约0.1微米处的一层薄薄的气垫上飞翔。速度大约为80km/h。在这样小的间隙里,盘面上一粒微小的灰尘都像一块巨石。如果读/头碰到了这样的一块巨石,读/写头会停下来,

撞到盘面就是所谓的读/写头冲撞(head crash)。

为此,磁盘总是密封包装的磁盘以扇区大小的块来读写数据。
对扇区的访问时间( access time)有三个主要的部分:

寻道时间(seek time)、旋转时间(rotational latency)和传送时间(transfer time)

2.2.4 逻辑磁盘块

正如我们看到的那样,现代磁盘构造复杂,有多个盘面,这些盘面上有不同的记录区。为了对操作系统隐藏这样的复杂性,现代磁盘将它们的构造简化为一个b个扇区大小的逻辑块的序列,编号为0,1,…,b-1。磁盘中有一个小的硬件/固件设备,称为磁盘控制器,维护着逻辑块号和实际(物理)磁盘扇区之间的映射关系。

当操作系统想要执行一个I/O操作时,例如读一个磁盘扇区的数据到主存,操作系统会发送一个命令到磁盘控制器,让它读某个逻辑块号。控制器上的固件执行一个快速表查找,将一个逻辑块号翻译成一个(盘面,磁道,扇区)的三元组,这个三元组惟一地标识了对应的物理扇区。控制器上的硬件解释这个三元组,将I/O头移动到适当的柱面,等待扇区移动到I/O头下,将U/O头感知到的位放到控制器上的一个小缓冲区中,然后将它们拷贝到主存中。

2.2.5 格式化的磁盘容量

在磁盘可以存储敷据之前,它必须被磁盘控制器格式化。

这包括用标识扇区的信息填写扇区之间的隙,标识出表面有故障的柱面并且不使用它们,以及在每个区中预留出一组柱面作为备用,如果区中的柱面在磁盘使用过程中坏拌了,就可以使用这些备用的柱面。

因为存在着这些备用的柱面,所以磁盘制造商所说的格式化容量比最大容量要小。

2.2.5 访问磁盘

像图形卡、监视器、鼠标、键盘和磁盘这样的设备都是通过诸如Intel的PCI(Peripheral Component Interconnect,外围设备互连)总线这样的I/O总线连接到CPU和主存的。同系统总线和存储器总线不同(它们是与CPU相关的),诸如PCI这样的T/O总线设计成与底层CPU无关。
例如,PC和 Macintosh都可以使用PCI总线。
图6.11展示了一个典型的IO总线结构(以PCI为模型),它连接了CPU主存和I/O设备

图6.11
在这里插入图片描述

2.2.5.1 不同I/O设备

虽然IO总线比系统总线和存储器总线慢,但是它可以容纳种类繁多的第三方I/O设备。例如
上图中,有三个不同类型的没备连接到总线:

1. USB(Universal Serial Bus,通用串行总线)控制器是一个将设备连接到USB的电路。
	USB吞吐率可以达到12 Mbius,是为慢速或中速串行设备设计的,
	例如键盘、鼠标、调制解调器、数码相机、操纵杆、CD-ROM驱动器和打印机
2. 图形卡(或适配器)包含硬件和软件逻辑,它们负责代表CPU在显示器上画像素
3. 磁盘控制器包含硬件和软件逻辑,它们用来代表CPU读写磁盘数据。

其他的设备,例如网络适配器,可以通过将适配器插入到主板上空的扩展槽中,从而连接到I/O总线,这些插槽提供了到总线的直接电路连接

2.2.5.2 DMA

在磁盘控制器收到来自CPU的读命令之后,它将逻辑块号翻译成一个扇区地址,读该扇区的内容,然后将这些内容直接传送到主存,不需要CPU的干涉。

这个设备可以自己执行读或者写总线事务,而不需要CPU干涉的过程,称为DMA
DMA(direct memory access,直接存储器访问)
这种数据传送称为DMA传送( DMA transfer)在DMA传送完成,

磁盘扇区的内容被安全地存储在主存中以后,磁盘控制器通过给CPU发送个中断信号来通知CPU,如图6.12©所示。基本思想是中断会发信号到CPU芯片的一个外部管脚上。这会导致CPU暂停它当前正在做的工作,跳转到一个操作系统函数。这个函数会记录下IO已经完成,然后将控制返回到CPU被中断的地方

2.6 存储技术趋势

从我们对存储技术的讨论中,可以总结出几个很重要的思想:·

1.不同的存储技术有不同的价格和性能折中

SRAM比DRAM快一点,而DRAM比磁盘要快很多。
另一方面,快速存储总是比慢速存储要贵的。SRAM每字节的造价比DRAM高DRAM的造价又比磁盘高得多

2. 不同存储技术的价格和性能属性以截然不同的速率变化着

自从1980年以来,SRAM技术的成本和性能基本上是以相同的速度改善的。访问时间下降了大约100倍,而每兆字节的成本下降了200倍。不过,DRAM和磁盘的变化更大,而且不一致。DRAM每兆字节的成本下降了8000倍所示几乎是四个数量级),而DRAM的访问时间只下降了大约6倍。磁盘技术有DRAM相同的趋势,甚至于变化更大。从1980年以来,磁盘存储的每兆字节成本增长了50000倍,访问时间改善得很少,只有10倍左右。
这些惊人的长期趋势突出了存储器和磁盘技术的一个

基本事实:增加密度(从而降低成本)比降低访问时间更容易

3. DRAM和磁盘访问时间滞后于CPU时钟周期时间

从1980年到200年,CPU时钟周期提高了600倍。相比于CPU性能,SRAM的性能是稍差的,尽管SRAM的性能在保持增长。然而,DRAM和磁盘性能与CPU性能之间的差距实际上是加大许多。

图6.16
在这里插入图片描述

3. 局部性

3.1 对程序数据引用的局部性

3.1.1 局部性定义/原理

一个编写良好的计算机程序倾向于展示出良好的局部性(locality)。也就是,

局部性定义:
	它们倾向于引用的数据项邻近于其他最近引用过的数据项,
	或者邻近于最近自我引用过的数据项。

这种倾向性,被称为局部性原理(principle of locality),是一个持久的概念,对硬件和软件系统的设计都有着极大的影响

3.1.2 局部性的两种形式:时间和空间局部性

局部性通常有两种形式:时间局部性(temporal locality)和空间局部性(spatial locality)。

1. 时间局部性(temporal locality)
	在一个具有良好时间局部性的程序中,
	被引用过一次的存储器位置很可能在不远的将来再被多次引用。
	
2. 空间局部性(spatial locality)
	在一个具有良好空间局部性的程序中,如果一个存储器位置被引用一次,
	那么程序很可能在不久的将来引用附近的一个存储器位置。

3.1.3 程序员应该理解局部性原理

因为一般而言,有良好局部性的程序比局部性差的程序运行得更快。现代计算机系统的各个层次,从硬件到操作系统、到应用程序,它们的设计都利用了局部性。在硬件层,局部性原理允许计算机设计者通过引入称为高速缓存存储器的小而快速的存储器来保存最近被引用的指令和数据项,从而提高对主存的访问速度。在操作系统级,局部性原理允许系统使用主存作为虚拟地址空间最近被引用块的高速缓存。类似地,操作系统用主存来缓存磁盘文件系统中最近被使用的磁盘块。

3.1.4 局部性例子:web服务器

局部性原理在应用程序的设计中也扮演着重要的角色。
例如web浏览器将最近被引用的文档放在本地磁盘上,利用的就是时间局部性。大量的web服务器将最近被请求的文档放在前端磁盘高速缓存中,这些缓存能满足对这些文档的请求,而不需要服务器的任何干涉。

3.1.4 例子说明局部性

图617(a)中的简单函数,sumvec函数它对一个向量的所有元素求和。
这个程序有良好的局部性吗?

1. 变量 sum 在每次循环迭代中被引用一次,因此,对于sum来说,有好的局部性。
2. 另一方面,因为sum是标量,对于sum来说没有空间局部性。

正如我们在图617(b)中看到的,向量v的元素是被顺序读取的,一个接一个,按照它们存储在存储器中的顺序。

因此,对于变量v函数有很好的空间局部性,但是时间局部性很差,因为每个向量元素只被访问一次。

因为对于循环体中的每变量,这个函数要么有好的空间局部性,要么有好的时间局部性,所以我们可以断定 sumvec函数有良好的局部性

图6.17
在这里插入图片描述

图6.18 好的局部性
在这里插入图片描述

图6.19 局部性差的例子,交换i和j的顺序
在这里插入图片描述

3.2 取指令的局部性

因为程序指令是存放在存储器中的,CPU必须取出(读出)这些指令,所以我们也能够评价个程序关于取指令的局部性。例如,图617中for循环体里的指令是按照连续的存储器顺序执行的,因此循环有良好的空间局部性。因为循环体会被执行多次,所以它也有很好的时间局部性。

代码区别于程序数据的一个重要属性是在运行时它是不能被修改的。

当程序正在执行时,CPU只从存储器中读出它的指令。CPU决不会重写或修改这些指令。

3.3 局部性小结

在这一节中,我们介绍了局部性的基本思想,还给出了一些量化评价一个程序中局部性的简单原则

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

到本章后面,在我们学习了高速缓存存储器以及它们是如何工作的之后,我们会向你展示如何用高速缓存命中率和不命中率来量化局部性的概念。你还会弄明白为什么有良好局部性的程序通常比局部性差的程序运行得更快。

尽管如此,了解如何看一眼源代码就能获得对程序中局部性的高级感觉,是程序员要掌握的一项有用而且重要的技能。

4. 存储器层次结构

4.1 存储器层次结构中的缓存

4.1.1 存储器层次结构

基于上述的一些认识:

1. 不同存储设备的访问时间差异很大。
	速度较快的设备每字节的成本要比速度较慢的设备高
	而且容量较小。CPU和主存之间的速度差距在增大
2. 一个编写良好的程序倾向于展示出良好的局部性

一个典型的存储器层次结构
图6.21
在这里插入图片描述

4.1.2 缓存基本原理

高速缓存(cache)是一个小而快速的存储设备,它作为存储在更大也更慢的设备中的数据对象的缓冲区域。

存储器层次结构的中心思想是:

对于每个k,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存。

换句话说,层次结构中的每一层都缓存来自较低一层的数据对象
例如,本地磁盘作为通过网络从远程磁盘取出的文件(例如Web页面)的缓存,主存作为本地磁盘上数据的缓存,依此类推,直到最小的缓存CPU寄存器集合。
下图展示了存储器层次结构中缓存的一般性概念。

图6.22
在这里插入图片描述

如上所示。
第k+1层存储器被划分成16个大小固定的块,编号为0~15类似地,第k层的存储器被划分成较小的块的集合,每个块的大小与k+1层的块的大小一样。在任何时刻,第k层的缓存包含第k+1层块的一个子集的拷贝。

4.1.3 缓存命中

当程序需要第k+1层的某个数据对象d时,它首先在当前存储在第k层的一个块中查找d。

如果d刚好缓存在第k层中,那么就是我们所说的缓存命中(cache hit)。

该程序直接从第k层读取根据存储器层次结构的性质,这要比从第k+1层读取d更快。
例如,一个有良好时间局部性的程序可以从块14中读出一个数据对象,得到一个对第k层的缓存命中。

4.1.4 缓存不命中

如果第k层中没有缓存数据对象d,那么就是我们所说的缓存不命中(cache miss)

当发生缓存不命中时,第k层的缓存从第k+1层缓存中取出包含d的那个块,如果第k层的缓存已经满了的话,可能就会覆盖现存的一个覆盖一个现存的块的过程被称为替换(repg)或驱逐(evicting)这个块。

被驱逐的这个块有时也被称为牺牲块block)。

决定该替换哪个块是由缓存的替换策略来控制的。
1. 一个具有随机替换策略的缓存会随机选择一个牺牲块。
2. 一个具有最近最少被使用(LRU)替换策略的缓存会选择那个最后被访问的时间距现在最远的块

4.1.5 缓存不命中的种类

1. 强制性不命中(compulsory miss)或冷不命中(cold miss)
	如果第k层的缓存是空的,那么对任何数据对象的访问都会不命中。
	一个空的缓存有时被称为冷缓存( cold cache)
	冷不命中很重要,因为它们通常是短暂的事件
	
2. 冲突不命中(conflict miss)
	这个策略将第k+1层的某个块限制放置在第k层块的一个小的子集中(有时只是一个块)
	例如,第k+1层的块0、4、8和12会映射到第k层的块0
	块1、5、9和13会映射到块1
	这种限制性的放置策略会引起一种不命中,叫做冲突不命中
	因为这些对象会映射到同一个缓存块,缓存会一直不命中
	
3. 容量不命中(capacity miss)
	当工作集的大小超过缓存的大小时,缓存会经历容量不命中
	换句话说,缓存就是太小了,不能外理这个动作。

4.1.6 高遠缓存管理

高遠缓存管理

存储器层次结构的本质是,每一层存储设备都是较低一层的缓存。

在每层上,某种形式的逻辑必须管理缓存。
这里,我们的意思是指某个东西要将缓存划分成块,在不同的层之间传送块,判定是命中还是不命中,并处理它们。管理缓存的逻辑可以是硬件、软件,或是两者的结合。
例如,编译器管理寄存器文件,缓存层次结构的最高层。它决定当发生不命中时何时发射加载以及确定哪个寄存器来存放数据。
L1和L2层的缓存完全是由内置在缓存中的硬件逻辑来管理的在一个有虚拟存储器的系统中
DRAM主存作为存储在磁盘上的数据块的缓存,是由操作系统软件和CPU上的地址翻译硬件共同管理的。
对于一个具有像AFS这样的分布式文件系统的机器来说本地磁盘作为缓存,它是由运行在本地机器上的AFS客户端进程管理的。在大多数时候,缓存都是自动运行的,不需要程序采取特殊的或显式的行动

4.2 存储器层次结构概念小结

概括来说,存储器层次结构行之有效,是因为较慢的存储设备比较快的存储设备更便宜,还因为程序倾向于展示局部性

1. 利用时间局部性:
	根据时间局部性,同一数据对象可能会被多次使用,一个数据对象
	在第一次不命中时被拷贝到缓存中,我们就会期望后面对该目标有一系列的访问命中。
	因为缓存比低一层的存储设备更快,对后面的命中的服务会比最开始的不命中快很多
	
2. 利用空间局部性:
	块通常包含有多个数据对象。根据空间局部性,我们会期望后面对该块
	其他对象的访问能够补偿不命中后拷贝该块的花费。

现代系统中到处都使用了缓存。正如从下图中能够看到的那样,CPU芯片、操作系统、分布式文件系统中和万维网上都使用了缓存。各种各样硬件和软件的组合构成和管理着缓存。

图6.23
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值