CPU如何将信息写入ram?


10

我的问题是,CPU如何将数据写入ram?

据我了解,现代CPU使用不同级别的缓存来加速内存访问。RAM获取命令以获取信息,然后向CPU发送一连串数据,该数据将所需的数据(以及一堆多余的数据存储在CPU想要的地址附近)存储到最高级别的高速缓存中,然后CPU逐步询问不同的高速缓存将在高速缓存的各个级别之间发送越来越小的数据块,直到它位于1级高速缓存中,然后直接将其读取到CPU寄存器中。

当CPU写入内存时,此过程如何工作?计算机是否将缓存级别向后降低(与读取顺序相反)?如果是这样,如何将不同缓存中的信息与主存储器同步?另外,与读操作相比,写操作的速度如何?如果我不断向RAM中写入数据(例如存储桶排序),会发生什么情况?

提前致谢,

-法肯

编辑:我仍然没有真正得到我完全可以接受的答案。我想特别了解RAM写入的同步部分。我知道我们直接从CPU写入L1高速缓存,并且当我们同步不同级别的高速缓存时数据会被降低到高速缓存级别,最终主RAM与最高层高速缓存同步。但是,我想知道的是何时缓存与主RAM同步和同步,以及它们相对于读取命令的速度有多快。

Answers:


11

啊,这是答案很简单的简单问题之一。简单的答案是,这取决于写入的完成方式和缓存类型。这是有关缓存如何工作的有用入门

CPU可以通过多种方式写入数据。没有任何缓存,数据立即存储在内存中,并且CPU等待写入完成。使用缓存时,CPU通常按程序顺序存储数据,即,如果程序将地址写入地址A,然后将地址B写入,则无论缓存如何,都将在存储器B之前先写入存储器A。缓存仅在更新物理内存时才会影响,这取决于所使用的缓存类型(请参见上面的链接)。一些CPU还可以非临时存储数据,也就是说,可以对写入进行重新排序以充分利用内存带宽。因此,先写入A,然后写入B,然后写入(A + 1),可以在单个突发中将其重新排序为先写入A然后写入A + 1,然后写入B。

另一个复杂之处是当存在多个CPU时。根据系统的设计方式,一个CPU的写入将不会被其他CPU看到,因为数据仍位于第一个CPU缓存中(缓存是脏的)。在多个CPU系统中,使每个CPU的缓存与物理内存中的内容匹配称为缓存一致性。有多种方法可以实现。

当然,以上内容适用于奔腾处理器。其他处理器可以通过其他方式执行操作。以PS3的Cell处理器为例。Cell CPU的基本体系结构是一个PowerPC内核和几个Cell内核(在PS3上有八个单元,其中之一始终被禁用以提高产量)。每个单元都有其自己的本地内存,属于一种L1高速缓存,永远不会写入系统RAM。可以使用DMA(直接内存访问)传输在此本地RAM和系统RAM之间传输数据。该单元可以使用看似正常的读取和写入访问系统RAM和其他单元的RAM,但这只会触发DMA传输(因此它很慢,因此应避免使用)。该系统背后的思想是,游戏不仅仅是一个程序,

综上所述,在CPU速度与RAM速度匹配的日子里,写入RAM确实非常简单,但是随着CPU速度的提高和缓存的引入,使用许多不同的方法使过程变得更加复杂。

斯基兹


2

是的,它已向下移至缓存级别并保存到内存,但重要的注意事项是在多处理系统中,缓存在2个或更多处理器(核心)之间共享,并且数据必须保持一致,这是通过对所有多处理器进行共享缓存来完成的或不同的缓存,但通过使用关键部分来保存一致性(如果一个缓存中的数据发生更改,则会强制其写入内存并更新其他缓存)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.