首页 > 解决方案 > 缓存中的所有数据都必须在主内存中吗?

问题描述

我正在研究虚拟内存、TLB 以及它们与缓存的关系:

资源

而且我不明白最后一句话背后的原因(“不可能 - 如果页面不在内存中,则数据不允许在缓存中”),如果有人能解释我,我将不胜感激。

标签: cachingmemoryvirtual-memorytlb

解决方案


TLB 和 Cache 的目的是尽量减少内存查找和遍历,同时生成完整的分段内存,以编程内存管理单元本身内置的页面交换机制。

为了在页面中找到确切的内存位置,通常首先检查缓存,如果它丢失,tlb 连同内存管理单元负责交换适当的页面并使其看起来像在那里。实际上,任何程序数据都驻留在内存管理单元给定的页面内,除非您明确告诉它使用硬件功能,否则它们都无法逃脱内存管理,它们都看到完整的虚拟内存空间,因为它们和硬件负责地址转换。

Givencsource 是一个真值表,它说明了所有可能的状态和状态的结果。最后两种情况,当缓存被命中但数据并没有真正存在于物理内存中时,这是不可能实现的状态。因为数据实际上并不存在,并且程序正试图访问任何内存段中的无效内存位置,因此缓存命中/未命中是不可能的,并且运行时或操作系统会引发内存异常。

如果您想了解更多信息,请从英特尔 8086、80286、80386 和一些 RISC 机器等高级微处理器的案例研究开始,了解如何在软件中使用硬件寄存器来监控用户程序!

祝学习愉快!

编辑:为了给这个答案更多的背景,这里有几点:

  1. OS与带有特殊寄存器位的MMU一起进行内存管理,两者都离不开彼此的共同努力。
  2. 交换的数据实际上是在那里传输的,但应用程序总是看到从 0x0 到最大值的完整地址空间,这是在数据管理的上下文中说明的。
  3. 给定表的 OP 就像所有可能性的真值表。如果数据不存在,程序永远不会命中缓存或 tlb,因此它被标记为不可能的状态,这种状态在状态机方面是无效的。

出于安全原因,程序及其基指针始终以不干扰其他程序的方式保存。

访问外部内存是内存冲突,并且在该机制之上还有很多支持通过编程 API 访问内存的机制


推荐阅读