Cache中的所有数据都必须在Primary Memory中吗?
Does all the data in Cache have to be in Primary Memory?
我正在研究Virtual Memory、TLB以及它们与Cache的关系:
Source
我不明白最后一句话背后的原因("Impossible – data not allowed in cache if page is not in memory"),如果有人能解释我,我将不胜感激。
TLB 和缓存的共同目的是最大限度地减少内存查找和遍历,同时生成完整的分段内存以编程内存管理单元本身内置的页面交换机制。
要在页面中找到确切的内存位置,通常首先检查缓存,如果未找到,tlb 和内存管理单元会负责交换适当的页面并使其看起来就在那里。实际上,任何程序数据都驻留在内存管理单元提供的页面内,除非您明确告诉它利用硬件功能,否则它们无法逃脱内存管理,它们都将完整的虚拟内存 space 视为它们的虚拟内存,并且硬件负责地址转换。
Givencsource 是真理 table,它陈述了所有可能的状态和状态的结果。
最后两种情况,当缓存被命中但数据并不真正存在于物理内存中时,这是不可能实现的状态。因为数据实际上并不存在并且程序试图访问任何内存段中的无效内存位置因此缓存 hits/miss 是不可能的并且运行时或操作系统抛出内存异常。
如果您想了解更多信息,请从高级微处理器(如 intel 8086、80286、80386 和一些 RISC 机器)的案例研究开始,以了解如何在软件中使用硬件寄存器来监控用户程序!
干杯快乐学习!
编辑:
为了给这个答案更多的上下文,这里有一些要点:
- OS配合带有特殊寄存器位的MMU进行内存管理,两者离不开它们的共同努力。
- 交换数据实际上传输到那里,但应用程序总是看到从 0x0 到最大值的完整地址 space,这是在数据管理上下文中说明的。
- 给定的 tableOP 就像所有可能性的真相 table。如果数据不存在,程序将永远不会命中缓存或 tlb,因此它被标记为不可能状态,这样的状态在状态机方面是无效的。
出于安全原因,程序及其基指针始终以不干扰其他程序的方式保存。
在外部访问内存是内存违规,并且在该机制之上有很多支持通过编程 API 访问内存
当操作系统换出一个虚拟内存页面时,属于分配给该虚拟页面的物理页面的所有缓存条目都必须被刷新。如果不是这样,下一个为其分配物理页面的进程可能会在不应该命中缓存时命中 - 并从另一个进程的内存中读取数据!这是一个明显的安全隐患,因此在缓存中拥有属于换出页面的数据确实是不可能的。
但是,即使数据还在缓存中,在这种情况下也不可能获得缓存命中。这是因为缓存数据通常由其物理地址标记,并且在没有有效的虚拟到物理内存地址转换的情况下,您将无法访问正确的缓存条目。
我正在研究Virtual Memory、TLB以及它们与Cache的关系:
Source
我不明白最后一句话背后的原因("Impossible – data not allowed in cache if page is not in memory"),如果有人能解释我,我将不胜感激。
TLB 和缓存的共同目的是最大限度地减少内存查找和遍历,同时生成完整的分段内存以编程内存管理单元本身内置的页面交换机制。
要在页面中找到确切的内存位置,通常首先检查缓存,如果未找到,tlb 和内存管理单元会负责交换适当的页面并使其看起来就在那里。实际上,任何程序数据都驻留在内存管理单元提供的页面内,除非您明确告诉它利用硬件功能,否则它们无法逃脱内存管理,它们都将完整的虚拟内存 space 视为它们的虚拟内存,并且硬件负责地址转换。
Givencsource 是真理 table,它陈述了所有可能的状态和状态的结果。 最后两种情况,当缓存被命中但数据并不真正存在于物理内存中时,这是不可能实现的状态。因为数据实际上并不存在并且程序试图访问任何内存段中的无效内存位置因此缓存 hits/miss 是不可能的并且运行时或操作系统抛出内存异常。
如果您想了解更多信息,请从高级微处理器(如 intel 8086、80286、80386 和一些 RISC 机器)的案例研究开始,以了解如何在软件中使用硬件寄存器来监控用户程序!
干杯快乐学习!
编辑: 为了给这个答案更多的上下文,这里有一些要点:
- OS配合带有特殊寄存器位的MMU进行内存管理,两者离不开它们的共同努力。
- 交换数据实际上传输到那里,但应用程序总是看到从 0x0 到最大值的完整地址 space,这是在数据管理上下文中说明的。
- 给定的 tableOP 就像所有可能性的真相 table。如果数据不存在,程序将永远不会命中缓存或 tlb,因此它被标记为不可能状态,这样的状态在状态机方面是无效的。
出于安全原因,程序及其基指针始终以不干扰其他程序的方式保存。
在外部访问内存是内存违规,并且在该机制之上有很多支持通过编程 API 访问内存
当操作系统换出一个虚拟内存页面时,属于分配给该虚拟页面的物理页面的所有缓存条目都必须被刷新。如果不是这样,下一个为其分配物理页面的进程可能会在不应该命中缓存时命中 - 并从另一个进程的内存中读取数据!这是一个明显的安全隐患,因此在缓存中拥有属于换出页面的数据确实是不可能的。
但是,即使数据还在缓存中,在这种情况下也不可能获得缓存命中。这是因为缓存数据通常由其物理地址标记,并且在没有有效的虚拟到物理内存地址转换的情况下,您将无法访问正确的缓存条目。