gpt4 book ai didi

memory - cpu 如何决定将哪些数据放入哪些内存(ram、缓存、寄存器)?

转载 作者:行者123 更新时间:2023-12-04 14:12:07 24 4
gpt4 key购买 nike

当 cpu 正在执行程序时,它是否通过内存管道移动所有数据?然后任何数据将从 ram->cache->registers 移动,因此所有执行的数据都会在某个时候进入 cpu 寄存器。或者它是否以某种方式选择了放入那些更快的内存类型中的代码,或者您作为程序员是否可以选择您想要保留的特定代码,例如,用于优化的缓存?

最佳答案

这个问题的答案本身就是一门完整的类(class)!对(通常)发生的事情的一个非常简短的总结是:

  • 您,程序员,指定 RAM 中的内容。好吧,编译器代表你做这件事,但你可以通过你如何声明你的变量来控制它。
  • 每当您的代码访问一个变量时,CPU 的 MMU 将检查该值是否在缓存中,如果不在,则它将从 RAM 中提取包含该变量的“行”到缓存中。某些 CPU 指令集可能允许您防止它为特定的低频操作这样做(导致停顿),但它需要非常低级的代码才能这样做。当您更新一个值时,MMU 将执行“缓存刷新”操作,将缓存的内存提交到 RAM。同样,您可以通过低级代码影响这种情况发生的方式和时间。它还取决于 MMU 配置,例如缓存是否为直写等。
  • 如果您要对值进行任何类型的操作,需要它被 ALU(算术逻辑单元)或类似设备使用,那么它将从缓存中加载到适当的寄存器中。哪个寄存器将取决于编译器生成的指令。

  • 一些 CPU 支持动态内存访问 (DMA),它为不需要 CPU 参与的操作提供了捷径。这些包括内存到内存的复制以及内存和内存映射外设控制块(例如 UART 和其他 I/O 块)之间的数据传输。这些将导致在 RAM 中移动、读取或写入数据,而实际上根本不会影响 CPU 内核。

    在更高层次上,一些支持多进程的操作系统会在进程换出时将分配给当前进程的 RAM 保存到硬盘,并在进程再次运行时从磁盘重新加载。 (这就是为什么您可能会在 C: 驱动器上找到“页面文件”以及限制其大小的选项的原因。)这允许所有正在运行的进程利用大部分可用 RAM,即使它们实际上无法全部共享同时。分页是另一门值得单独学习的主题。 (感谢 Leeor 提到这一点。)

    关于memory - cpu 如何决定将哪些数据放入哪些内存(ram、缓存、寄存器)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27839790/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com