this is a extra element for clear the floated element
关于存储器的读和写
  • 12/31
  • 2008
速度优化 | Linux 2941 次查看
  在计算机内部,数据的读和写是逐级实现的。

  1、读的情况:一个数据要从外部到达cpu,则要通过外存---》内存---》二级缓存---》一级缓存---》cpu寄存器---》参与计算。

  2、写的情况:一般情况下,cpu产生的数据并没有(也不一定会)马上要写到外存上。那么这些数据往往是先保留在缓存或内存里,直到cpu通知写,写动作才会发生。

  3、多个数据要读时,则要排队;同样,多个数据要写时,也要排队。

  4、当同时有读和写的动作请求时,cpu必须安排好他们的顺序。

  例子:

  1、cpu要读一个数据:当前指令寄存器中找不到该数据,则cpu会从一级缓存当中查找,没有则查二级缓存,然后依次是内存、外存。

  2、cpu读入一个数据后,内存、二级缓存、一级缓存都有该数据。随着数据读入的增加,缓存会满。这时就需要一个放弃的策略。先进后出法或先进先出法,还有一种策略:使用率最高的数据保留。

  3、这样,缓存或内存中就有好多数据。当cpu要查找数据时,也要有一种策略:相联(全相联、半相联、部分相联)。就是把缓存划分成若干个相对独立的区域,查找数据时按照某个策略查找,这样效率会高些。

  4、当cpu有数据要“写”到缓存时,这种数据要优先考虑保留,直到cpu“写”通知到达。

  5、当读和写要求同时发生时,会发生2种情况:先读后写,先写后读。这两种情况都要认真考虑。比如:

  (1)要写的数据地址刚好是要读的数据地址。先读后写使得读的是旧数据,当你需要的是最新的数据时,就出错了;先写后读使得原来的数据被覆盖了,当你需要原来的数据时,这时读出来的数据也是错。

  (2)要写的数据地址虽然不是马上要读的数据,但它的中间结果还保留在缓存中。这样也会产生错误。

  这也称为数据相关性。设计程序时应尽量避免(或减少)发生数据相关。虽然程序编译时会优化数据相关性。