zoukankan      html  css  js  c++  java
  • 三种Cache写入方式原理简介

      
    在386以上档次的微机中,为了提高系统效率,普遍采用Cache(高速缓冲存储器),现在的系统甚至可以拥有多级Cache。Cache实际上是位于CPU与DRAM主存储器之间少量超高速的静态存储器(SRAM),通常的大小为8KB~512KB。

      
    对Cache的工作原理可以进行如下描述:具有Cache的计算机,当CPU需要进行存储器存取时,首先检查所需数据是否在Cache中。如果存在,则可以直接存取其中的数据而不必插入任何等待状态,这是最佳情况,称为高速命中。当CPU所需信息不在Cache中时,则需切换存取主储器,由于速度较慢,需要插入等待,这种情况称高速未命中。在CPU存取主存储器的时候,按照最优化原则将存储信息同时写入到Cache中以保证下次可能的高速命中。因此,同一数据可能同时存储在主存储器和Cache中;同样,按照优化算法,可以淘汰Cache中的一些不常使用的数据。

      所以,提高高速命中率的最好方法是尽量使Cache存放CPU最近一直在使用的指令与数据,当
    Cache 装满后,可将相对长期不用的数据删除,提高 Cache 的使用效率。为保持
    Cache
    中数据与主存储器中数据的一致性,避免CPU在读写过程中,将Cache中的新数据遗失,造成错误的读数据,确保Cache
    中更新过程的数据不会因覆盖而消失,必须将 Cache
    中的数据更新及时准确地反映到主存储器中,这是一个写入过程,通常采用的处理方法有:直写式、缓冲直写式与回写式三种。

      1.直写式系统:
    CPU对Cache写入时,将数据同时写入到主存储器中,这样可保证Cache中的内容与主存储器的内容完全一致。这种方式比较直观,而且简单、可靠,但由于每次对Cache更新时都要对主存储器进行写操作,而这必须通过系统总线来完成,因此总线工作频繁,系统运行速度就会受到影响。

      2.缓冲直写式系统:为解决直写式系统对总线速度的影响问题,在主存储器的数据写入时增加缓冲器区。当要写入主存储器的数据被缓冲器锁存后,CPU
    便可执行下一个周期的操作,不必等待数据写入主存储器 。
    这相对于给主存储器增加了一个单向单次高速缓存。比如,在写入周期之后可以紧接着一个数据已存在于Cache中的读取周期,这样就可避免直写式系统造成的操作延时。但这个缓冲器只能存储一次写入的数据,当连续两次写操作发生时,CPU仍需等待。

      3.回写式系统:以前的两种写入方式系统,都是在写Cache的同时,对主存储器进行写操作。实际上这不仅是对总线带宽的占用,浪费了宝贵的执行时间,而且对于有的情况是不必要的,可以通过增加额外的标准来判断是否有必要更新数据。回写式系统就是通过在Cache中的每一数据块的标志字段中加入一更新位,解决主存储器不必要的写操作。比如,若Cache中的数据曾被CPU更新过但还未同时更新主存储器,则该更新位被置1。每次CPU将一块新内容写入Cache时,首先,检查Cache中该数据块的更新位,若更新位为0,则将数据直接写入Cache;反之,若更新位为1,则先将
    Cache 中的该项内容写入到主存储器中相应的位置,再将新数据写回到Cache中。

      与直写式系统相比,回写式系统可省下一些不必要的立即回写操作,而在许多情况下这是很频繁出现的。即使一个Cache被更新,若未被新的数据所取代,则没有必要立刻进行主存储器的写操作。也就是说,实际写入主存储器的次数,可能少于CPU实际所执行的写入周期的次数,但回写式系统的结构较复杂,Cache也必须用额外的容量用来存储标志。

      由于回写系统的高效率,现代的Cache大多采取这种方式进行操作。

  • 相关阅读:
    linux命令大全
    【转载】nginx的五种负载算法
    nginx服务器安装及配置文件详解
    查看linux系统核数
    利用nginx实现分流
    ntohs, ntohl, htons,htonl的比较和详解
    Nginx反向代理之HTTP 请求头中的 X-Forwarded-For
    javascript中 for in 、for 、forEach 、for of 、Object.keys().
    vue里面路由传参的三种方式
    vue中ref在input中详解
  • 原文地址:https://www.cnblogs.com/lidp/p/1698070.html
Copyright © 2011-2022 走看看