caching - 缓存中的所有数据都必须在主内存中吗?
解决方案
TLB 和 Cache 的目的是尽量减少内存查找和遍历,同时生成完整的分段内存,以编程内存管理单元本身内置的页面交换机制。
为了在页面中找到确切的内存位置,通常首先检查缓存,如果它丢失,tlb 连同内存管理单元负责交换适当的页面并使其看起来像在那里。实际上,任何程序数据都驻留在内存管理单元给定的页面内,除非您明确告诉它使用硬件功能,否则它们都无法逃脱内存管理,它们都看到完整的虚拟内存空间,因为它们和硬件负责地址转换。
Givencsource 是一个真值表,它说明了所有可能的状态和状态的结果。最后两种情况,当缓存被命中但数据并没有真正存在于物理内存中时,这是不可能实现的状态。因为数据实际上并不存在,并且程序正试图访问任何内存段中的无效内存位置,因此缓存命中/未命中是不可能的,并且运行时或操作系统会引发内存异常。
如果您想了解更多信息,请从英特尔 8086、80286、80386 和一些 RISC 机器等高级微处理器的案例研究开始,了解如何在软件中使用硬件寄存器来监控用户程序!
祝学习愉快!
编辑:为了给这个答案更多的背景,这里有几点:
- OS与带有特殊寄存器位的MMU一起进行内存管理,两者都离不开彼此的共同努力。
- 交换的数据实际上是在那里传输的,但应用程序总是看到从 0x0 到最大值的完整地址空间,这是在数据管理的上下文中说明的。
- 给定表的 OP 就像所有可能性的真值表。如果数据不存在,程序永远不会命中缓存或 tlb,因此它被标记为不可能的状态,这种状态在状态机方面是无效的。
出于安全原因,程序及其基指针始终以不干扰其他程序的方式保存。
访问外部内存是内存冲突,并且在该机制之上还有很多支持通过编程 API 访问内存的机制
推荐阅读
- bash - 使用文本文件中的列表重命名目录中的文件
- android - 检查房间中是否已经存在对象
- c# - 是否可以在非静态类中进行扩展?
- node.js - 将 zip 文件从 reactjs 上传到 nodejs
- bash - 如何正确组合“xargs”、“bash -c”和环境变量?
- asp.net-core - 如何通过 Moq 验证扩展方法
- ios - self 何时保留闭包?
- asp.net - 将数据从一个视图传输到另一个视图
- javascript - textarea 值更新而不删除之前的 Javascript
- r - 为什么这个命令在手写时有效,但从 data.table 中提取相同的输入时无效