1

在我的计算机架构课上,教授向我们提出了以下问题:

"Caches can have serious limitations when dealing with devices. Why is this?"

我不知道为什么会有限制或它们可能是什么。在谷歌上搜索后,我似乎无法找到准确的答案。有人可以解释为什么存在限制以及这些限制可能是什么,或者指出一个可能有助于我回答问题的方向吗?

4

3 回答 3

2

换句话说,您无法控制实际发送到设备的内容/时间。

于 2011-07-04T15:03:21.977 回答
2

缓存和设备有两个问题。第一个问题是基本功能正确性。也就是说,系统通常必须将设备的内存映射寄存器放置在完全绕过缓存的地址范围内。想象一下这并没有发生,缓存“挡道”了。在这种情况下,试图读取设备上状态寄存器的软件将改为读取缓存提供的陈旧值!祝你的设备驱动程序正常工作。一些 CPU 为不可缓存的访问提供了特殊的指令,但基本结果是相同的,因为缓存没有任何好处,只会在处理设备内存时使事情复杂化。

第二个问题是能够与内存进行直接内存访问 (DMA) 事务的智能设备的性能问题。当设备执行 DMA 写入时,系统中的硬件总线逻辑会按照 MESI 协议将高速缓存行完全远离 CPU。核心在很大程度上依赖于将数据保存在紧密的缓存中以提高效率。现在,该设备刚刚将所有缓存线拉走,这会迫使内核在下一次软件访问时对缓存线进行高延迟重新加载。即使对于 DMA 读取,通常也会发生相同的窥探,因为 CPU 通常会避免数据线处于共享状态。

集成到 CPU 本身中的设备可能能够将缓存行保留在 CPU 的最后一级缓存中,与 CPU 封装之外的设备相比,这可以显着提升性能。

于 2011-07-04T16:15:48.183 回答
0

基本上,您必须有一种方法可以准确地知道数据何时从缓存中刷新并进入您正在与之交谈的设备。RAM 与其他任何设备一样,它会记住写入某个位置的最后数据。如果它不会存储在 RAM 中,那么设备也不会看到写入。Linux 使用依赖于架构的称为读/写屏障的函数。

Linux如何处理它

于 2011-07-04T15:15:27.543 回答