Memory 一个没有在总线上嗅探内存访问能力的设备如何保持其缓存的有效性?

Memory 一个没有在总线上嗅探内存访问能力的设备如何保持其缓存的有效性?,memory,x86,Memory,X86,我试图理解英特尔处理器中的MTRR(内存类型区域寄存器)。在《英特尔手册》中,我看到了有关WT缓存控制的内容: 直写(WT)-写入和读取系统内存 缓存。读取来自缓存命中时的缓存线;读取未命中原因 缓存填充。允许进行推测性读取。所有写入操作都会写入到 缓存线(如果可能)并通过它连接到系统内存。什么时候 写入内存时,无效缓存线永远不会被填充,并且 有效缓存线已填充或无效。写合并是 允许。这种类型的缓存控制适用于帧缓冲区 或当系统总线上有设备访问系统内存时, 但不要对内存访问进行窥探。它强制执行一致性

我试图理解英特尔处理器中的MTRR(内存类型区域寄存器)。在《英特尔手册》中,我看到了有关WT缓存控制的内容:

直写(WT)-写入和读取系统内存 缓存。读取来自缓存命中时的缓存线;读取未命中原因 缓存填充。允许进行推测性读取。所有写入操作都会写入到 缓存线(如果可能)并通过它连接到系统内存。什么时候 写入内存时,无效缓存线永远不会被填充,并且 有效缓存线已填充或无效。写合并是 允许。这种类型的缓存控制适用于帧缓冲区 或当系统总线上有设备访问系统内存时, 但不要对内存访问进行窥探。它强制执行一致性 在处理器和系统内存中的缓存之间


据我所知,能够窥探系统总线上的内存访问信号是设备保持自身缓存有效性(并可能帮助他人实现这一点)的关键先决条件。但是对于一个没有这种功能的设备,它如何知道何时使其缓存失效?

仅供参考,我从未见过任何关于实际使用WT内存进行性能实验以外的任何事情的讨论(与微基准点或某些工作负载的不可缓存或WB相比)。我还没意识到它并没有填满文字,但这是有道理的。不管怎样,请随意跳过WT,只需关注WB、UC和USWC。事实并非如此。这就是WT的目的:将数据一直写到内存,这样内存就可以作为正式的数据源。简单地说,PCI设备可以进行DMA。我认为这里的关键点是设备不能有缓存,或者如果有缓存,就不能保持一致性。但是它可以从主内存中读取数据,并且总是能看到CPU同意的任何内容。@MargaretBloom那么,对于DMA,PCI设备只要需要就直接从内存中读取数据?这是否意味着PCI设备根本没有读缓存?是的,正是Peter所说的。PCI设备可以读取(和写入)内存,这取决于设备的性质,它们可以或不能具有缓存。如果他们这样做了,操作系统有责任意识到这一点。不连贯。当然,PCI总线的拓扑结构及其设备有很大的不同。上述内容适用于标准x86 PC。