Cache和DMA本身是否是两个毫不相关的事物?

2026年09月29日 04:35
有3个网友回答
网友(1):

Cache和DMA本身似乎是两个毫不相关的事物。Cache被用作CPU针对内存的缓存,利用程序的空间局部性和时间局部性原理,达到较高的命中率,从而避免CPU每次都必须要与相对慢速的内存交互数据来提高数据的访问速率。DMA可以作为内存与外设之间传输数据的方式,在这种传输方式之下,数据并不需要经过CPU中转。假设DMA针对内存的目的地址与Cache缓存的对象没有重叠区域,DMA和Cache之间将相安无事。
但是,如果DMA的目的地址与Cache所缓存的内存地址访问有重叠,经过DMA操作,与Cache缓存对应的内存中的数据已经被修改,而CPU本身并不知道,它仍然认为Cache中的数据就是内存中的数据,那在以后访问Cache映射的内存时,它仍然使用陈旧的Cache数据。这样就会发生Cache与内存之间数据“不一致性”的错误。所谓Cache数据与内存数据的不一致性,是指在采用Cache的系统中,同样一个数据可能既存在于Cache中,也存在于主存中,Cache与主存中的数据一样则具有一致性,数据若不一样则具有不一致性。需要特别注意的是,Cache与内存的一致性问题经常被初学者遗忘。在发生Cache与内存不一致性错误后,驱动将无法正常运行。如果没有相关的背景知识,工程师几乎无法定位错误的原因,因为这时所有的程序看起来都是完全正确的。Cache的不一致性问题并不是只发生在DMA的情况下,实际上,它还存在于Cache使能和关闭的时刻。例如,对于带MMU功能的ARM处理器,在开启MMU之前,需要先置Cache无效,对于TLB,也是如此。

网友(2):

运动神经元病是一个不明原因的,发生在运动神经元的一个变性坏死性的疾病。
可以表现为上运动神经元的损伤,也可以表现为下运动神经元的损伤,也可以是上下运动神经元都出现损伤,那么可以出现肌肉的萎缩、无力,肌肉的束颤,也可以表现为腱反射的亢进,病理反射的出现等等。
随着病程的进展,患者全身的肌肉都可以出现萎缩和无力。如果累及了呼吸肌之后,患者可以出现呼吸的困难,呼吸的无力,或者是呼吸肌的麻痹,导致患者的死亡。所以运动神经元病最终是出现患者的呼吸困难和死亡。运动神经元病的危害,可表现为肢体无力和萎缩,可出现手指活动笨拙、无力,随病程延长,肌无力和萎缩,可扩展至躯干和颈部,最后累及面肌和咽喉肌。患者可出现延髓麻痹,多在晚期时出现,舌肌首先受累,表现为舌肌萎缩、束颤和伸舌无力,随后出现咽、喉、咀嚼肌萎缩无力,以致患者构音不清、吞咽困难、咀嚼无力,面肌中口轮匝肌受累较明显。运动神经元病的疾病进展常有一定的模式,通常从首先受累的上肢,发展到对侧的上肢,到同侧的下肢,再到对侧的下肢,最后是球部受累。运动神经元病,可以危及生命,多在3~5年内,死于呼吸肌麻痹或肺部感染,因此运动神经元病的危害较大。

网友(3):

1.Cache的两个类型 --Write Through 当写数据进Cache时,也同时更新了相应的Memory里的内容 --Write back 只是写到Cache里,Memory的内容要等