计算机体系结构基础知识介绍之内存层次结构设计

文章探讨了保护和虚拟化在指令集架构中的作用,以及IBM主机如何优化虚拟机性能。处理器的自主取指令单元、推测执行和内存访问对性能的影响被详细阐述,特别是在处理缓存预取和推测导致的缺失率方面。此外,还讨论了缓存数据一致性问题在多处理器和I/O环境中的重要性,提出了软件和硬件解决方案。
摘要由CSDN通过智能技术生成

一、保护、虚拟化和指令集架构

保护是体系结构和操作系统的共同努力,但是当虚拟内存变得流行时,架构师不得不修改现有指令集架构的一些不合理的细节。例如,为了支持虚拟内存,IBM 370的架构师不得不改变6年前公布的成功的IBM 360指令集架构。类似的调整今天也在为适应虚拟机而进行。

IBM主机硬件和VMM为提高虚拟机的性能采取了三个步骤:
1.降低处理器虚拟化的代价。
2.降低由于虚拟化而产生的中断开销。
3.通过将中断引导到适当的虚拟机而不调用VMM来降低中断开销。

二、自主取指令单元

许多具有乱序执行甚至只有深流水线的处理器使用一个单独的指令取出单元来分离指令取出(有时还有初始解码)。通常,指令取出单元访问指令缓存来取出一个完整的块,然后再将其解码成单独的指令;当指令长度变化时,这样的技术特别有用。因为指令缓存是按块访问的,所以将缺失率与每条指令访问一次指令缓存的处理器进行比较就没有意义了。此外,指令取出单元可能会预取块到L1缓存中;这些预取可能会产生额外的缺失,但实际上可能会减少总缺失惩罚。许多处理器还包括数据预取,这可能会增加数据缓存缺失率。

三、推测和内存访问

高级流水线使用的一种主要技术是推测,即在处理器知道是否真正需要之前暂时执行一条指令。这种技术依赖于分支预测,如果预测错误,则需要将推测出来的指令从流水线中清除。在支持推测的内存系统中有两个独立的问题:保护和性能。由于推测,处理器可能会产生一些内存引用,这些引用永远不会被使用,因为指令是由于错误的推测而产生的。如果执行这些引用,可能会产生保护异常。显然,只有当指令实际执行时,才应该发生这样的故障。因为一个推测处理器可能会对指令和数据缓存产生访问,并随后不使用这些访问的结果,所以推测可能会增加缓存缺失率。与预取一样,这种推测实际上可能会降低总缓存缺失惩罚。使用推测,就像使用预取一样,使得将缺失率与没有推测的处理器进行比较变得具有误导性,即使在ISA和缓存结构相同的情况下也是如此。

四、特殊指令缓存 

在超标量处理器中,提供指令带宽是一个很大的挑战。对于那些将指令转换为微操作的设计,例如大多数最近的Arm和i7处理器,可以通过保持一个最近转换指令的小缓存来减少指令带宽需求和分支错误预测的惩罚。

超标量处理器是一种可以在一个周期内执行多条指令的处理器,它使用硬件来自动选择哪些指令可以并行执行,从而提高指令级并行度和性能。超标量处理器的指令执行方式可以分为顺序执行和乱序执行,前者按照程序指定的顺序执行指令,后者根据指令的数据依赖关系和资源可用性来动态调度指令。超标量处理器的流水线一般包括取指、译码、发射、执行、访存和写回等阶段,其中取指和译码阶段可能需要多个端口来同时访问指令缓存,发射阶段可能需要检查指令的相关性和资源冲突,执行阶段可能需要多个功能单元来并行处理不同类型的指令,访存阶段可能需要多个端口来同时访问数据缓存,写回阶段可能需要重排序缓冲区来保证指令的顺序一致性。超标量处理器的设计需要考虑很多因素,如流水线级数、分支预测、寄存器重命名、乱序执行、异常处理等,以达到最佳的性能和效率。

五、缓存数据的一致性

数据可以在内存和缓存中找到。只要处理器是唯一改变或读取数据的组件,并且缓存位于处理器和内存之间,处理器看到旧的或过时的副本的危险就很小。多处理器和I/O设备增加了副本不一致和读取错误副本的可能性。缓存一致性问题的频率对于多处理器和I/O是不同的。对于I/O来说,多个数据副本是一个罕见的事件,但是在多处理器上运行的程序会希望在几个缓存中有相同数据的副本。多处理器程序的性能取决于共享数据时系统的性能。

I/O缓存一致性问题是这样的:I/O在计算机中发生在I/O设备和缓存之间还是在I/O设备和主存之间?如果输入将数据放入缓存,并且输出从缓存中读取数据,那么I/O和处理器都会看到相同的数据。这种方法的困难在于它干扰了处理器,并可能导致处理器因为I/O而停顿。输入也可能通过用不太可能很快被访问的新数据替换一些信息而干扰缓存。

带有缓存的计算机中I/O系统的目标是在尽可能少地干扰的同时防止过时数据问题。因此,许多系统更喜欢I/O直接发生在主存中,主存充当一个I/O缓冲区。如果使用写穿缓存,那么内存将拥有信息的最新副本,并且对于输出来说,就不会有过时数据问题了。然而,今天写穿通常只在由使用写回的L2缓存支持的第一级数据缓存中找到。输入需要一些额外的工作。
软件解决方案是保证输入缓冲区没有块在缓存中。包含缓冲区的页面可以被标记为不可缓存,并且操作系统总是可以输入到这样一个页面。或者,操作系统可以在输入发生之前从缓存中刷新缓冲区地址。
硬件解决方案是检查输入地址是否在缓存中。如果有I/O地址与缓存中的地址匹配,那么缓存条目被无效化以避免过时数据。所有这些方法也可以用于带有写回缓存的输出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

D了一天bug忘了编译

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值