本节书摘来自华章出版社《计算机存储与外设》一书中的第1章,第1.5节,作者Computer Organization and Architecture: Themes and Variations[英]艾伦·克莱门茨(Alan Clements) 著,沈 立 肖晓强 王苏峰 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1.5 虚拟存储器和存储器管理
存储器管理(Memory Management)是操作系统和硬件的切合点,它关注的是管理主存储器和磁盘。从许多方面看,存储器管理是一种扩展的Cache技术。
计算机刚出现时,计算机生成的地址对应物理或真实存储器中操作数的位置。即使在今天,各种控制器中的8位微处理器通常不使用存储器管理技术。在PC和工作站等高性能计算机上产生的逻辑地址(logical address),并不是操作数在存储器中的物理地址(physical address)。考虑指令LDR r2,[r3],其作用是将由r3寄存器指向的存储器位置中的内容送入r2寄存器,假定寄存器r3的内容是0x00011234。数据可能来自基于DRAM的主存储器中0x00A43234这个地址。将地址00011234翻译成00A43234的过程叫作存储器管理(memory management)。在本节中,将解释为什么存储器管理是必要的,它是怎样实现的。
虚拟存储器(virtual memory)是从光学领域借用的术语,其中虚拟用于描述一种似乎在某个位置的虚拟图像,例如,望远镜可以使处于很远位置的物体看起来好像就在面前一样。虚拟存储空间是逻辑地址空间(logical address space)的同义词,用来描述计算机可以访问的地址空间。具有64位地址和指针寄存器的计算机的虚拟(逻辑)地址空间为264字节,即使它在系统中可能只有2G(231)字节的物理主存储器。
存储器管理起源于20世纪50年代~60年代,它代表将CPU产生的逻辑地址转化成实际地址(即物理地址)的所有技术。存储器管理允许DRAM和硬盘的物理地址空间无缝地合并到计算机的虚拟存储器空间中。
1.5.1 存储器管理
计算机使用如Windows或UNIX这样的操作系统对存储器管理技术进行扩展使用。图1-26给出了一个具有存储器管理单元(memory management unit,MMU)的系统的结构。原则上,操作非常简单:来自CPU的逻辑地址送入MMU,然后被转换为操作数在存储器中的物理地址。将逻辑地址转换成物理地址需要一个查找表(look-up table)。因为将每个逻辑地址都转换成物理地址确实需要非常大的表,因此存储空间通常被分成页(page),每个逻辑页中的地址被转换成物理页中对应的地址。一个页通常为4KB。例如,如果页大小为4KB,处理器有32位地址空间,逻辑地址0xFFFFAC24可能被转换为0x00002C24。
处理器逻辑地址空间的大小与指定操作数的寻址方式无关。它也与程序是用高级语言、汇编语言还是机器代码编写无关。在32位的系统中,指令LDR r4,[r6]允许使用4GB的逻辑空间。无论采用何种技术,处理器不能指定4GB(范围从0~232-1)以外的逻辑地址,这仅仅是因为其程序计数器的位数是有限的32位。
物理地址空间由处理器使用存储器系统中所有的实际地址位置构成。该存储器不是抽象的,是真正实现的。换句话说,系统的主存储器构成物理地址空间。计算机逻辑地址空间的大小由指定地址所需的位数决定,而物理地址空间的大小通常只受其成本限制。
现在可以看到,为什么微处理器的逻辑和物理地址空间的大小是不同的。更奇怪的是为什么微处理器使用存储器管理,将例如0x00001234这样的逻辑地址转换为物理地址0x861234。存储器管理系统的基本目的如下:
1)实现对物理地址空间大小超过了逻辑地址空间大小这样的系统的控制(例如,某8位微处理器具有16位地址总线(64KB的逻辑空间)来访问2MB的物理内存)。
2)实现对逻辑地址空间大小超过了物理地址空间大小这样的系统的控制(例如,某32位微处理器具有4GB的逻辑地址空间,管理64MB的RAM)。
3)存储器保护,包括防止一个用户访问分配给另一个用户的存储空间的机制。
4)存储器共享,一个程序可以与另一个程序共享资源(例如,公共数据区或公共代码)。
5)高效利用存储器,最有效地使用物理地址空间。
6)将程序员从考虑程序和数据应该位于存储器的何处中解放出来。即程序员可以根据其意愿使用任意的地址,而存储器管理系统会将逻辑地址映射到可用的物理地址。
一个真正的存储器管理单元可以不必实现上述所有目标(注意前两个目标是互斥的)。第二个目标(即逻辑地址空间大于物理地址空间)对于设计64位系统尤其重要。当针对该问题使用存储器管理时,这就是经常所说的虚拟存储器技术(virtual memory technology)。虚拟存储器几乎就是逻辑存储器的代名词。
可用物理地址空间小于处理器的逻辑地址空间是由于经济问题所造成的,并一直困扰着主流企业。20世纪50年代末,大型机可使用大的逻辑地址空间,但只能使用2K左右的RAM。英国曼彻斯特大学的一组计算机科学家提出存储器管理技术(现被称为虚拟存储器)来解决该问题。他们将部分的逻辑(虚拟)地址空间映射到可用的物理地址空间,如图1-27所示。该例中,256KB的一段逻辑地址,范围从780000~7BFFFF,被映射到物理存储器范围从00000~3FFFF的区域。只要处理器访问逻辑地址空间中的数据,其地址将被映射到相应的物理地址,一切都很顺利。这里假定从CPU发出的地址将直接(即不改变地)交给系统的地址总线。
当处理器产生操作数的逻辑地址不能被映射到可用的物理地址空间时就会出现问题。曼彻斯特大学采用的解决方案非常简单。每当处理器生成没有物理地址对应的逻辑地址时,操作系统中止当前程序的执行并处理该问题。操作系统从磁盘存储器中取出一块包含所需操作数的块,并把该块放在物理存储器中(覆盖所有旧的数据),然后告诉存储器管理单元,逻辑地址空间和物理地址空间之间存在一个新的关系。换句话说,程序或数据被保存在磁盘中,只有当前需要的部分程序被传送到物理RAM中。存储器管理单元跟踪由处理器产生数据的逻辑地址与该数据在物理存储器中位置之间的关系。整个过程非常复杂,需要在处理器体系结构、存储器管理单元以及操作系统之间进行协调。人们希望看到简单的虚拟存储器系统,但实际这是一场噩梦。
1.5.2 虚拟存储器
虚拟存储器系统有4个作用:支持比物理地址空间更大的逻辑存储空间,实现逻辑地址到物理地址的映射,为逻辑地址空间中运行的任务分配物理存储器,更加方便地建立多任务的系统。
使用有限的文字就能讨论清楚虚拟存储器的所有话题是不可能的。设计者和程序员组成的团队花费很长的时间来设计虚拟存储器系统,这是因为虚拟存储器的管理不仅复杂而且几乎在支持多用户或多任务操作系统的系统中通常都是各不相同的。本节只对虚拟存储器进行概述。
1.存储器管理和多任务
多任务系统通过周期性地在任务之间进行切换以支持两个或多个进程同时执行。显然,多任务处理只有当几个任务同时驻留在主存储器中时才是可行的。如果任务每次运行都必须从硬盘装载,则切换新任务需要的时间将过长。
图1-28演示了具有两个任务的系统中如何将逻辑地址空间映射到物理地址空间。图中,任务A和B同时驻留在物理存储器中。每个任务都有其自己的逻辑存储空间(例如,程序和堆栈)可以访问位于物理存储空间的共享资源。程序员可以完全自由地为任务的不同组件选择其自身的地址。因此,图1-28中,任务A和B可以访问物理存储器中相同的数据结构,即使它们使用不同的逻辑地址。即每个任务只知道自己与另一个任务共享数据的一个副本。
存储器管理单元将程序员选择的逻辑地址映射到物理存储器空间,而操作系统负责建立逻辑地址到物理地址的映射表。当创建一个新的任务时,将告知操作系统任务对存储器的需求。操作系统搜索可用的物理存储器空间,寻找空闲的存储块并将其分配给任务。可以想象,一段时间后,物理存储器空间可能会变得支离破碎,每个任务占用不同的存储块,以非常复杂的方式交织在一起。一个好的操作系统应该有效地执行存储器分配,不允许物理存储器中存在大量未使用的块。存储器分块的方式取决于存储器映射实现的方式和操作系统。
存储器映射的一个强大功能是,每个逻辑存储器块可被赋予各种权限。例如,存储器可以是只读、只写、只能通过操作系统或给定的任务访问或在一组任务之间共享。通过确保物理存储器块只能被预先定义的任务访问,可以确保一个任务的执行不会导致另一个任务崩溃。有两种实现存储器管理的基本方式。使用固定大小的存储器块,称为页(page);另一种使用可变大小的存储器块,称为段(segment)。
2.地址翻译
存储器管理提供了两种不同的服务。第一种是将逻辑地址映射到可用的物理存储器中。第二种功能发生在物理地址空间耗尽时(即由于数据不在随机访问存储器中,逻辑地址到物理地址的映射已不能完成)。
图1-29显示了一个页式存储系统是如何实现的。该例使用24位逻辑地址总线和512KB的存储器系统。来自处理器的24位逻辑地址被分成16位的偏移(被直接传给物理存储器)以及8位的页地址。页地址指向处理器当前访问的页(28=256个页中的一个)。逻辑地址的位移量可以访问64KB页中的216个位置上的数据。
页表包含256项,每一项对应一个逻辑页。例如,在图1-29中,CPU正访问8位逻辑页地址000001112。每项包含3位的页帧地址,是物理地址最重要的3位。该例中,物理页地址为110。逻辑地址从8+16位变成了3+16位,逻辑地址00000111 0000101000110010被映射到物理地址110 0000101000110010。
虽然在页表中有256个可能的项(每项对应一个逻辑页),物理页地址只有3位,它限制物理页只有8个。因此,随机访问存储器中不同的物理页不能与每个可能的逻辑页相对应。每个逻辑页地址有一位R字段与之相关联表示驻留。如果R位置为1,表示该页当前在物理存储器中。如果R位被清零,对应的页将不在物理存储器中,页地址字段的内容将毫无意义。
每当产生逻辑地址且与当前逻辑页相关的R位被清除,将发生页故障(page fault)事件。一旦开始访问某个逻辑地址,由于R位被清除表示当前页不在存储器中,当前的指令必须暂停,因为它无法完成。
典型的微处理器具有总线错误输入引脚,表明存储器访问无法完成。当发生这种情况时,操作系统开始干预处理。虽然CPU试图访问的数据目前不在随机访问存储器中,但它在磁盘中。操作系统从磁盘检索包含所需存储器位置的页,将其加载到物理存储器中,并相应地更新页表。被暂停的指令可以继续执行。
该过程简单吗?完全不简单。当操作系统从磁盘获取一个新的页,它必须覆盖一个随机访问物理存储器的页。注意,虚拟存储器的一个功能是允许使用相对小的物理存储器来模拟大容量存储器。如果要用新页替换旧页,此时需要一个策略选择替换哪个旧页。经典的替换策略是最近最少使用(least recently used,LRU)算法,最长时间没有被访问的页将被新的页覆盖(也就是说,如果最近没有访问这个页,则在不久的将来也不太可能访问它)。
LRU算法已在实践中被检验可以很好地工作。不幸的是,如果采用该策略,操作系统必须知道每个页是什么时候被访问的,这需要复杂的硬件(每个页必须在被访问后打上时间戳)。操作系统必须处理的另一个问题是,存储在RAM中和保存在磁盘上的数据之间的一致性问题。如果从磁盘上读取的页只包含程序的信息,它不会在RAM中被修改,因此,重写它不会导致任何问题。然而,如果页的内容是数据表或其他数据结构,它可能在RAM中被改写。在这种情况下,它不能被新的页覆盖。
在图1-29中,可以看到,页表中的每一项都有一个M位(修改位)。每当页由一个写操作访问,M位被置位。当该页需要被覆盖,操作系统首先检查M位,如果被置位,则首先需要将被改写的页写回磁盘,然后再取新的页。
最后,当加载新的页后,将修改地址转换表,清除M位,将R位置位(表示该页是有效的),处理器可以重新执行被暂停的指令。
显然,每次页错误带来的开销非常大。只要页错误比较罕见,系统就可以因为访问局部性而工作正常。多数数据是簇聚在一起的,所以一旦从磁盘中载入一页,大部分要访问的数据都会在该页中找到。如果数据不是有序组织的或有许多不相关的任务,处理器将花费几乎所有的时间用于交换页,系统的有效工作将停顿。这种情况被称为抖动(thrashing)。抖动是指一种频繁访问资源导致计算机性能急剧下降的行为。然而,抖动在很大程度上是指由于需要加载和重新加载页而导致虚拟存储器系统发生故障的情况。
3.两级表
图1-29给出的情况在现代高性能处理器中实际不存在。假设一个32位的计算机使用13位偏移(偏移指的是页内地址)访问8KB的页。这使得可以使用32-13=19位来选择219个逻辑页。在快速RAM中不可能构建这样大的页表(注意,相同问题在Cache的设计中也存在)。
图1-30给出了怎样使用多级(multi level)页表来实现地址转换而不需要大容量的页表。来自计算机的逻辑(虚拟)地址首先被分为19位的页地址和13位的页内偏移。页地址进一步被分为对应第一级页表的10位和对应第二级页表的9位。这两个表分别有210=1024项和29=512项。
图1-30是个简图,真正的页表包含更多地址转换过程的信息而不仅仅是指针。图1-31给出了PowerPC的地址转换表。
真正的页表结构包括多个指向其他表的指针。在这种层次地址转换表中,页表项包含指向下一级的指针。链表的终点为实际物理页,包含了MMU所需关于该页的信息。在实践中,典型的存储器管理单元包含的页表描述符可以描述以下信息。
描述符类型
描述符类型告诉MMU表是否存在下一级。
写保护位(W)
表示其指向的页不可写。如果W=1,树中的所有后续级别的写保护位都为1。
使用位(U)
该位在建立描述符表时被操作系统初始化为零。当描述符第一次被访问时,MMU自动将其置为1。虚拟存储器系统中,U位用来描述当页需要被替换时,是否要将物理页写到磁盘。
管理员位(S)
当该位被置位,所指向的页只能使用管理员方式访问(即操作系统级别的访问权限)。管理员态指的是操作系统运行的状态,具有比用户态更高的优先权。例如,如磁盘这样的I/O设备只能在管理员态下访问。
全局共享位(SG)
设置为1时,表示页描述符可以共享,即如果SG=1,系统中所有的任务都可以访问物理页。SG告诉MMU,在页表Cache中只要保持该页的一个描述符。转换旁视缓冲器(translation look-aside buffer,TLB)是一个小的全相联Cache,可以通过同时搜索所有条目实现地址转换。
写访问级别(WAL)
通过该描述符指出页的最低优先级。
读访问级别。由3位组成,用于根据WAL位实现相应的读操作。
限制域(Limit)。该域为转换表的下一级指出索引(index)值的下限或上限;即限制域限制了下一级表的大小。例如,逻辑地址域为7位,因此具有128项。然而,在实际系统中,在本级可能只有不超过20个页描述符。通过设置Limit为5,可以限制表项为32个而不是128个。
上/下位(L/U)
表示Limit位给出的是下限还是上限。如果L/U=0,则Limit域包含索引的无符号上限,下一级表的所有表索引都必须小于或等于Limit域中的值。如果L/U=1,则Limit域包含索引的无符号下限,所有表索引都必须大于或等于Limit域中的值。在这两种情况下,如果实际索引超出最大/最小值范围,将出现Limit违例。层次访问最终得到页描述符用来执行实际的逻辑地址到物理地址的转换。
逐级访问多级页表(例如,如图1-30所示)产生的页描述符将被用于实际的逻辑地址到物理地址的转换。除了上面给出的描述符外,页描述符可能还有以下的控制位:
修改位(M)
指示相应的物理页是否被改写。由于MMU可以将其置位但不会清除,故该位在建立描述符表时被操作系统初始化为零。注意,使用位U在表描述符被访问后被置位,而M位在页被修改后置位。
锁位(L)
表示相应的页描述符应规避MMU的页置换算法。当L=1,物理页不能通过MMU替换。因此,可以使用L位来保持地址转换Cache中的页描述符。
Cache抑制位(CI)
表明相应的页是否可以被缓存。如果CI=1,那么该访问就不能被缓存。
本章小结
使用存储器可以将指令和数据保存在计算机中。由于技术本身的原因和受制造技术发展的限制,目前尚没有某种单一的设备或技术可以满足所有的个人计算机或工作站的需求。简单地说就是:速度很快的存储器价格昂贵,如果便宜的话速度就慢。
当开发大型计算机用于满足政府、工业以及军事需求时,设计人员很快发现,实际存储器系统的限制可以减少,或者说被屏蔽。的确,可以把不需要的数据存储在慢速的存储器中。用计算机的话说就是,把经常访问的数据保存在快速存储器中,而用慢速存储器实现数据归档。这种想法既简单又有效,对计算机性能产生了重要影响。但另一方面,它在实现起来可不简单。
计算机中有两种基本类型的存储器:主存储器中的随机访问半导体存储器(通常是DRAM)和磁记录或光存储器等顺序访问的二级存储器。这两种存储器系统使用相似的技术来克服其速度限制:使用Cache存储器(cache memory)来加速主存储器,使用虚拟存储器(virtual memory)来加速二级存储器。Cache存储器和虚拟存储器机制的原理相似,但在细节和实现技术上有很大不同。
本章第一部分介绍了用来加速主存储器的Cache。相对小容量的Cache(例如,4GB的DRAM使用1MB的Cache)可以显著提高系统的性能。因为数据和指令不是随机访问的,真实的数据和指令表现出时间(temporal)和空间(spatial)局部性,通常CPU需要访问存储器的数据/指令中超过90%的都可以在Cache中找到。如果找不到,必须从存储器中读取数据,并将数据副本放入Cache。
本章研究了Cache的几个内容,如它是如何组织的;即物理存储器中的数据是如何被映射到容量较小的Cache中的。虽然直接映射Cache设计最简单,本章已经说明了它具有的局限性会降低其效率。本章还说明了如何利用它来构建组相联Cache——这是一种在所有微处理器系统中都能找到的Cache类型。
本章的第二部分讨论虚拟存储器。硬盘读写速度比主存储器的DRAM慢若干数量级。虚拟存储器系统将存储器通常划分为4KB的页。4KB的数据块可以从磁盘中调入主存储器中任意一个4KB的页中;即物理存储空间并不像处理器使用的虚拟或者逻辑地址空间那样是连续的。当计算机访问存储器,存储器管理单元将逻辑页地址转换为物理页地址,然后从存储器中的该页读取数据。然而,如果被访问的逻辑页不在存储器中,存储器管理单元就会产生页故障,操作系统开始从磁盘中将所需页调入主存储器中的页。当然,如果所有的物理页当前都在使用,操作系统必须牺牲一个页,替换它,再装入新的页。
习题
1.1 Cache是什么?为什么计算机要使用Cache?
1.2 解释下列术语的含义?时间局部性;空间的局部性。
1.3 试推导出具有Cache的存储器系统的加速比表达式(假定命中率为h,主存储器访问时间是Cache访问时间的k倍,其中k>1)。假设该系统是一个理想的系统,不必考虑时钟周期时间的影响。
1.4 对以下的理想系统,计算加速比S。每种情况下,tc为Cache的访问时间,tm是主存储器的访问时间,h为命中率。
a. tm = 60 ns, tc = 3 ns, h = 0.99
b. tm = 60 ns, tc = 3 ns, h = 0.90
c. tm = 60 ns, tc = 3 ns, h = 0.80
d. tm = 60 ns, tc = 3 ns, h = 0.70
1.5 对以下的理想系统,计算得到给定加速比S所需的命中率h。
a. tm = 50 ns, tc = 2 ns, S = 1.5
b. tm = 50 ns, tc = 2 ns, S = 5.0
c. tm = 50 ns, tc = 2 ns, S = 10.0
d. tm = 50 ns, tc = 2 ns, S = 20.0
1.6 微处理器的操作通常在给定时间间隔内完成(即时钟周期的整数倍)。例如,如果时钟为100MHz,时钟周期时间就是10ns,所有操作的时间必须为10ns的整数倍。下面的数据中tcyc为处理器的时钟周期时间,tm为主存储器的访问时间(包括所有开销,例如地址译码)。针对每种情况,计算访问存储器实际需要的时间。
a. tcyc = 50 ns, tm = 100 ns
b. tcyc = 50 ns, tm = 105 ns
c. tcyc = 10 ns, tm = 75 ns
d. tcyc = 20 ns, tm = 75 ns
1.7 针对以下微处理器系统,计算当h接近100%时可以获得的最大加速比。
a. tcyc = 20 ns, tm = 75 ns, tc = 25 ns
b. tcyc = 10 ns, tm = 75 ns, tc = 15 ns
c. tcyc = 20 ns, tm = 75 ns, tc = 15 ns
1.8 实际使用中,计算机有时在执行存储器访问的时候执行内部操作。因此,降低了有效加速比,因为Cache对内部操作没有作用。执行一条指令所需的平均时间可以写为:
tave = Finternal?·?tcyc + Fmemory[htc +(1-h) (tc + td)]·tcyc
其中:
Finternal为执行内部操作所花时间所占的比例(0~1之间);
Fmemory为执行存储器访问操作所花时间所占的比例(0~1之间);
tcyc为时钟周期时间;
tc为以时间周期为单位的Cache访问时间;
td为以时间周期为单位的Cache失效开销;
请计算下列系统的平均周期时间。
a. Finternal = 20%, tcyc = 20 ns, tc = 1, td = 3, h = 0.95
b. Finternal = 50%, tcyc = 20 ns, tc = 1, td = 3, h = 0.9
1.9 针对上题中的系统,如果参数变成:Finternal = 40%, tcyc = 20 ns, tc = 1, td = 4,试计算将平均指令时间减半所需的命中率。
1.10 主存储器的数据是如何映射到如下Cache中的?
a. 直接映射Cache
b. 全相联Cache
c. 组相联Cache
1.11 在一个直接映射Cache存储器系统中,下列术语的含义是什么?
a.字
b.块
c.组
1.12 为什么构建一个全相联Cache很困难?为什么组相联Cache如此受欢迎?
1.13 画图说明如何使用Cache标志RAM来实现直接映射Cache。对比直接映射Cache和全相联Cache的优缺点。
1.14 什么是Cache一致性?
1.15 突发模式的操作是什么(在具有Cache的环境下)?
1.16 按道理,Cache是非常简单的概念,只需要将经常访问的数据放在高速RAM中即可。在实践中,相对其他计算机部件,Cache存储器系统的设计是很困难的。这种说法是否正确?
1.17 讨论工程师在为Cache选择合适的块大小(容量)时需要考虑的因素。
1.18 Cache系统可以位于CPU和MMU之间(即逻辑Cache)或在MMU与系统随机访问存储器(即物理Cache)之间。是什么因素决定了Cache的最佳位置?
1.19 当CPU写Cache时,Cache中的项和存储器中对应的项都需要更新。如果数据不在Cache中,它必须从存储器中取出,然后装入Cache。如果t1为Cache失效时重新加载需要的时间,证明存储器系统的有效平均访问时间由下式给出:
tave = htc + (1-h)tm + (1-h)t1
1.20 为什么设计数据Cache比设计指令Cache要困难?
1.21 Cache可以相对于主存储器以串行或并行的方式工作。在串行访问模式下,在Cache中查找数据,如果发生失效,然后再访问主存。在并行访问模式下,Cache和主存储器同时被访问。如果命中,中止对主存储器的访问。
假设系统的命中率为h,Cache访问时间与主存储器访问时间的比例为k(k<1)。推导出的并行访问Cache和串行访问Cache加速比的表达式。
1.22 如果使用串行访问Cache,可以容忍其加速比比并行访问Cache的加速比小5%,此时命中率为多少才能达到要求?假定主存储器的访问时间为30ns,Cache的访问时间为3ns。
1.23 什么是一级Cache和二级Cache(即L1和L2 Cache)?
1.24 某系统具有一级Cache和二级Cache。一级Cache的命中率为90%,二级Cache的命中率为80%。访问一级Cache需要1个周期,访问二级Cache需要4个周期,访问主存储器需要50个周期。平均访问时间是多少?
1.25 计算机的Cache访问时间为一个周期,平均命中率为95%,失效开销为100个周期。
a.该计算机的平均周期时间是多少?
b.如果增加二级Cache的命中率为80%,其失效开销为6个周期。对平均周期时间的影响如何?
c.具有一级Cache和二级Cache的计算机执行了10000次存储器访问。测试程序运行时,记录到一级Cache失效了500次,二级Cache失效了300次。一级Cache和二级Cache的总体失效率是多少?
1.26 考虑多级Cache命中率,局部命中率和总体命中率之间有何区别?
1.27 为什么经常引用(使用)失效率而不是命中率?什么是Victim Cache,如何使用它?Victim Cache能够减少何种类型的失效?Victim Cache和Annex Cache的本质区别是什么?
1.28 某处理器的存储器管理使用4KB大小的页。它有一个32KB的Cache,Cache块大小为16B。为了加快存储器访问,可以使访问Cache与逻辑到物理地址的转换同时进行。为了实现该方案,需要实现什么样的相联度?
1.29 假设混合Cache具有以下特性:
Cache读写开销 1个周期
失效率 3%
Load指令所占比例 20%
Store指令所占比例 5%
失效开销 20个周期
平均访问时间是多少?
1.30 某64位处理器有8MB的四路组相联Cache,块大小为32B。地址位是如何按照组、块、块内偏移位进行设置的?
1.31 某计算机具有分离的数据Cache,采用写回策略。Cache块大小为64B。读访问占全部存储器操作的80%。处理器、存储器和数据总线都是64位的。主存储器访问延迟(第一次访问)为20个周期,后续访问需要2个周期。Cache命中率为96%。试计算Cache的失效开销。
1.32 导致Cache失效的3个原因是:强制失效、容量失效和冲突失效。给出这些术语的定义。简要解释如何尽量减少它们的影响。
1.33 CPU中的Cache和硬盘中的Cache有什么根本差异?
1.34 为什么在使用硬盘的系统中必须使用存储器管理?存储器管理可以提供哪些保护功能?存储器管理系统具有保护功能,该功能在Cache中也存在吗?
1.35 写回Cache和写直达Cache之间有何差异,对系统性能有何影响?
1.36 32位地址体系结构计算机的存储器管理系统具有一级4KB的页表。该页表对应多大的存储器空间?
1.37 考虑全相联的16字节的Cache具有4个块,每块4个字。Cache使用LRU(最近最少使用)算法处理块替换。Cache初始是空的,块从第0块开始装载。
给定下面的十六进制地址序列,指出命中或失效情况。给出所有读操作结束后Cache的状态。
00 03 05 08 13 14 11 04 0F 0C 23 00 01 02 04 06 05 07 09 21
1.38 计算机指令集具有下表中的特点。
每条指令的平均周期数是多少?
1.39 考虑下面的代码,访问存储器中的整数x和s以及整数向量y[i]这3个值。
该系统具有一级Cache和二级Cache。一级Cache的访问时间是2个周期,二级Cache的访问时间是6个周期,主存储器的访问时间为50个周期。在此情况下,所有的存储器和Cache的访问是并行执行的。假设没有缓存数组,每次新的对数组的访问都将导致失效。每个循环中以时钟周期数表示的存储器延迟(第一次迭代后)为多少?
1.40 假设采用与题1.39相同的系统,如果采用预取技术,每次对主存储器的访问将导致下一块调入二级Cache,此时循环的平均存储器延迟为多少?假设对二级Cache采用预取技术不会导致进一步的存储器访问开销。
1.41 某64位计算机有128KB的八路组相联Cache。Cache有128组,每块为16个字。每个地址需要多少位标志位?
1.42 哪种类型的Cache,可以用来减少由于频繁交换而导致的Cache抖动?
1.43 给定以下数据,假设时钟频率为1000MHz。
计算平均存储器访问时间。假定二级Cache和DRAM可以与一级Cache并行访问。
1.44 某16位CPU的Cache有32块,每块16B。CPU访问一个字节的十进制地址为3210。这将导致失效,调入新块。该块位于Cache中的什么位置?
1.45 某计算机具有256B的地址空间和两路32B的组相联Cache。计算机字的大小是一个字节,每个Cache块包含4个字节,每个Cache有4块。如果Cache最初是空的,按照如下十六进制地址序列读取,显示相应的命中和失效的情况。
48, 0C, 48, 4C, 5C, 3A, 20, 21, 22, 24, 81, 49, 30, 34, 27, 3E, 24, 28, 2C, 40
1.46 人们总是在寻找更有效的Cache机制,特别是减少失效开销的方法(例如,使用Annex Cache或Victim Cache)。某个学生提出下面的建议。并非所有数据都相同。有些数据使用比别的更频繁,特别是数值小的数。所以为什么不这样安排Cache:当有两个候选位置的块可能被替换时,首先把数值大的块替换出去?这种方法是否可行?
1.47 计算机Cache的命中率为95%,每块为4个32位的字。处理器平均访问Cache的频率为1亿次/s。20%的CPU操作为load/store操作(其中读和写操作分别占70%和30%)。Cache使用写直达机制,在写失效时会替换一个块。在此情况下,32位CPU-存储器总线可使用的带宽是多少?
1.48 重做题1.47。此时Cache使用写回方式,Cache中平均25%的块为脏块(已被修改)。
1.49 计算机的存储器容量为256个字,Cache容量为16个字。按照以下地址顺序读数据:
0, 1, 2, 3, 4, 5, 10, 13, 16, 19, 21, 4, 8, 12, 30, 40, 41, 42, 35, 1, 3, 13
假设所有Cache块最初都是无效的,指出Cache是如何访问的。针对以下几种Cache,为每次访问做出标记:命中、容量失效、强制失效或者冲突失效。
a.全相联Cache
b.两路组相联Cache
c.直接映射Cache
1.50 某系统的存储器访问时间为50ns,Cache访问时间为2ns。指令执行时间为4ns(不包括存储器访问),平均每条指令需要0.25次存储器访问。如果命中率是0.90,指令的平均时间是多少?
1.51 某计算机具有24位地址总线,存储器容量为16MB,Cache容量为64KB。字长为两个字节。
a.块容量为32个字的直接映射Cache的地址格式是什么?
b.块容量为32个字的全相联Cache的地址格式是什么?
c.块容量为32个字的四路组相联Cache的地址格式是什么?
1.52 某计算机的存储器访问时间为38ns且不使用Cache。为其添加一个访问时间为10ns的Cache。计算机的运行速度提高了90%。试估计其命中率是多少。
1.53 为什么二级Cache的命中率通常低于一级Cache的命中率?
1.54 某系统一级Cache的命中率为87%(命中需要1个周期)。二级Cache的命中率为90%,访问时间为10个周期。主存储器的访问时间为200个周期。平均访问时间是多少?