【问题标题】:Can address be loaded in a cache but not in the main memory?可以将地址加载到缓存中但不能加载到主存中吗?
【发布时间】:2020-08-23 23:01:27
【问题描述】:

内存地址可以加载到缓存中但不能加载到主存中吗?换句话说,如果缓存想将数据写入主内存,那会在Linux的x86-64中产生页面错误吗?

【问题讨论】:

    标签: linux cpu-architecture paging cpu-cache page-fault


    【解决方案1】:

    不,缓存是透明的(和in x86-64 caches by physical address)。只有加载或存储指令(和代码获取)会发生页面错误,并且会同步发生(在违规指令上),而不是稍后的某个随机时间。

    当然,对 L1d 缓存的实际提交会延迟 (by the store buffer),直到从乱序执行后端退出之后。但是检查错误是在加载/存储执行单元中完成的(用于存储,将数据和地址写入存储缓冲区,以便它确定发生并在一段时间后变得可见。)

    【讨论】:

    • 从技术上讲,内存访问可以在页面返回内存(或分页内存)或分配/归零(用于新内存)之前完成。 Mill 的无背式内存为未分配的页面执行此操作(读取提供零缓存块,写入写入缓存(虚拟寻址)。这对于零写入时复制页面,对于作为交换数据交错的交换页面来说是“简单的”变得可用会更复杂(但仍然可行)。即使使用物理标记的缓存,也可以使用“影子页面”进行标记。
    • @PaulA.Clayton:很有趣,我得找个时间阅读一下。还可以提到 x86 的“缓存为 ram”/“无填充”模式,但这不适用于“正常程序运行”用例,而 The Mill 确实使用该技巧加速了正常程序。
    • @PaulA.Clayton:不相关,您可能已经看到了这个最近的 cpu-architecture 问题,但如果没有,我会对您在How do weak ISAs resolve WAW memory hazards using the store buffer? 中对我的猜测的反馈感兴趣。 (此评论会自毁)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多