首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

关于存储器的读和写

关于存储器的读和写

在计算机内部,数据的读和写是逐级实现的。

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

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

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

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

例子:

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

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



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

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

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

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

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

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


这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm
返回列表