【发布时间】:2020-04-22 21:18:29
【问题描述】:
【问题讨论】:
标签: caching memory virtual-memory tlb
【问题讨论】:
标签: caching memory virtual-memory tlb
TLB 和 Cache 的共同目的是最大限度地减少内存查找和遍历,同时生成完整的分段内存,以便对内存管理单元本身内置的页面交换机制进行编程。
为了在页面中找到准确的内存位置,通常首先检查缓存,如果它丢失,tlb 和内存管理单元会负责交换适当的页面并使其看起来像在那里。实际上,任何程序数据都驻留在内存管理单元给定的页面内,除非您明确告诉它使用硬件功能,否则它们都无法逃脱内存管理,它们都会看到完整的虚拟内存空间,而硬件负责地址转换。
Givencsource 是一个真值表,它说明了所有可能的状态和状态的结果。 最后两种情况,当缓存被命中但数据并没有真正存在于物理内存中时,这是不可能实现的状态。因为数据实际上并不存在,并且程序正试图访问任何内存段中的无效内存位置,因此缓存命中/未命中是不可能的,并且运行时或操作系统会引发内存异常。
如果您想了解更多信息,请从英特尔 8086、80286、80386 和一些 RISC 机器等高级微处理器的案例研究开始,了解如何在软件中使用硬件寄存器来监控用户程序!
干杯快乐学习!
编辑: 为了给这个答案提供更多背景信息,这里有几点:
出于安全原因,程序及其基指针始终以不干扰其他程序的方式保存。
在外部访问内存是内存违规,并且在该机制之上还有很多支持通过编程 API 访问内存的机制
【讨论】:
当操作系统换出一个虚拟内存页面时,所有属于分配给该虚拟页面的物理页面的缓存条目必须被刷新。如果不是这样,那么接下来为其分配物理页面的进程可能会在不应该命中时获得缓存命中 - 并从另一个进程的内存中读取数据!这是一个明显的安全隐患,因此在缓存中存在属于换出页面的数据确实是不可能的情况。
但是,即使数据仍在缓存中,在这种情况下也不可能获得缓存命中。这是因为缓存数据通常由其物理地址标记,并且在没有有效的虚拟到物理内存地址转换的情况下,您将无法访问正确的缓存条目。
【讨论】: