一个简单的例子:在缓存之前
缓存是基于您的内存子系统的技术吗电脑.缓存的主要目的是加速你的计算机,同时保持计算机的低价格。缓存可以让你更快地完成你的计算机任务。
为了理解缓存系统背后的基本思想,让我们从一个超级简单的示例开始,该示例使用图书管理员来演示缓存概念。让我们想象一个图书管理员站在他的桌子后面。他会把你要的书给你。为了简单起见,假设你自己无法获得书籍——你必须向图书管理员要任何你想读的书,他会从储藏室的一组书架中为你取书(华盛顿特区的国会图书馆就是这样设置的)。首先,让我们从一个没有缓存的图书管理员开始。
广告
第一个顾客来了。他要那本书白鲸记.图书管理员走进储藏室,拿起书,回到柜台,把书递给顾客。之后,客户回来还书。图书管理员拿起书,把它放回储藏室。然后他回到柜台等待另一位顾客。假设下一个顾客要求白鲸记(你看到了…)然后,图书管理员必须回到储藏室,把他最近处理过的书交给客户。在这种模式下,图书管理员必须做一次完整的往返行程来取每一本书——即使是那些经常被要求的非常受欢迎的书。有没有办法提高图书管理员的工作表现?
是的,有办法,我们可以放一个缓存图书管理员。在下一节中,我们将看到相同的示例,但这一次,图书管理员将使用缓存系统。
广告
一个简单的例子:缓存之后
让我们给图书管理员一个背包,里面可以放10本书(用计算机术语来说,图书管理员现在有一个10本书的缓存)。在这个背包里,他会放客户还给他的书,最多10本。让我们使用前面的示例,但现在使用新的和改进的缓存图书管理员。
新的一天开始了。图书管理员的背包是空的。我们的第一个客户来了,要求白鲸记.这里没有魔法——图书管理员必须去储藏室拿书。他把它交给客户。之后,客户返回并把书还给图书管理员。图书管理员没有回到储藏室去还书,而是把书放在背包里,站在那里(他先检查书包是否满了——后面会详细介绍)。另一个客户来了,要求白鲸记.在去储藏室之前,图书管理员检查了一下他的背包里是否有这本书。他找到了!他所要做的就是把书从背包里拿出来交给客户。无需进入仓库,因此客户得到了更有效的服务。
广告
如果客户端要求的标题不在缓存中(背包)怎么办?在这种情况下,有藏书的图书管理员比没有藏书的图书管理员效率要低,因为图书管理员要先花时间在背包里找书。缓存设计的挑战之一是最小化缓存搜索的影响,而现代硬件已经将这个时间延迟减少到几乎为零。即使在我们简单的图书管理员示例中,搜索缓存的延迟时间(等待时间)与走回储藏室的时间相比也非常小,以至于与此无关。这个藏书库很小(只有10本书),发现一本书丢失所花费的时间只是前往储藏室所需时间的一小部分。
从这个例子中,你可以看到关于缓存的几个重要事实:
- 缓存技术是使用更快但更小的内存类型来加速较慢但更大的内存类型。
- 使用缓存时,必须检查缓存中是否有项。如果它在那里,就叫a缓存命中.如果不是,则称为a缓存错过计算机必须等待从更大、更慢的内存区域返回。
- 缓存具有比较大存储区域小得多的最大大小。
- 可以有多个缓存层。在我们的图书管理员示例中,较小但较快的内存类型是背包,储藏室表示较大且较慢的内存类型。这是一个一级缓存。柜台后面可能还有一个书架,可以放100本书。图书管理员可以检查背包,然后是书架,然后是储藏室。这将是一个两级缓存。
广告
电脑缓存
计算机是一种机器,我们在其中以非常小的增量测量时间。当微处理器访问主内存(内存),它在大约60纳秒(一秒的600亿分之一)内完成。这已经相当快了,但比典型的微处理器要慢得多。微处理器的循环时间短至2纳秒,所以对微处理器来说60纳秒就像是永恒。
如果我们在主板上建立一个特殊的内存库,很小但非常快(大约30纳秒)呢?这已经比主存快两倍了。这叫做二级缓存L2高速缓存.如果我们直接在微处理器的芯片上建立一个更小但更快的存储系统呢?这样,内存将以微处理器的速度访问,而不是内存总线的速度。这是一个L1缓存在233兆赫(MHz)的奔腾上,它比L2缓存快3.5倍,而L2缓存比访问主存快两倍。
广告
一些微处理器在芯片中内置了两级缓存。在这种情况下,主板缓存——存在于微处理器和主系统内存之间的缓存——变成了第3级,或者L3缓存.
计算机中有很多子系统;您可以在它们之间放置缓存以提高性能。举个例子。我们有微处理器(电脑里最快的东西)。然后L1缓存缓存L2缓存缓存主存,可以(而且经常被使用)作为更慢的外围设备的缓存硬盘而且只读光盘存储器.硬盘也被用来缓存更慢的介质——你的互联网连接。
广告
缓存子系统
你的网络连接是计算机中最慢的链接。所以你的浏览器(Internet Explorer, Netscape, Opera等)使用硬盘存储HTML页面,将它们放入磁盘上的一个特殊文件夹中。当您第一次请求一个HTML页面时,您的浏览器会呈现它,并且它的副本也存储在磁盘上。下次请求访问该页时,浏览器将检查Internet上文件的日期是否比缓存的日期更新。如果日期相同,浏览器会使用硬盘上的文件,而不是从网上下载。在这种情况下,较小但较快的内存系统是硬盘,较大且较慢的内存系统是互联网。
缓存也可以直接构建外围设备.现代硬盘具有512左右的高速内存千字节连接到硬盘上。计算机并不直接使用这些内存,而是硬盘控制器使用。对于计算机来说,这些存储芯片就是磁盘本身。当计算机从硬盘请求数据时,硬盘控制器在移动硬盘的机械部分之前检查到这个内存(与内存相比非常慢)。如果它在缓存中找到了计算机请求的数据,它将返回存储在缓存中的数据,而不实际访问磁盘本身的数据,从而节省了大量时间。
广告
这里有一个你可以尝试的实验。你的电脑缓存你的软盘驱动器主存,你可以看到它发生的过程。从软盘访问一个大文件——例如,在文本编辑器中打开一个300kb的文本文件。第一次,你会看到你软盘上的灯亮了,然后你就会等待。软盘非常慢,因此需要20秒才能加载文件。现在,关闭编辑器并再次打开相同的文件。第二次(不要等待30分钟或在两次尝试之间进行大量的磁盘访问),您不会看到灯亮起,并且您不会等待。的操作系统检查了软盘的内存缓存,找到了它要找的东西。因此,在内存子系统中找到数据的速度比您第一次尝试时快得多(一次访问软盘需要120毫秒,而一次访问主内存需要大约60纳秒——快得多),而不是等待20秒。您可以在您的硬盘上运行相同的测试,但是在软盘驱动器上更明显,因为它非常慢。
为了让你更全面地了解它,这里有一个普通缓存系统的列表:
如您所见,L1缓存缓存L2缓存,L2缓存缓存主存,主存可用于缓存磁盘子系统,等等。
广告
缓存技术
在这一点上,一个常见的问题是,“为什么不让所有的计算机内存以与L1缓存相同的速度运行,这样就不需要缓存了?”这是可行的,但会非常昂贵。缓存背后的思想是使用少量昂贵的内存来加速大量较慢、较便宜的内存。
在设计计算机时,目标是使微处理器以尽可能低的成本全速运行。一个500兆赫的芯片在一秒钟内经历5亿次循环(每两纳秒一次)。如果没有L1和L2缓存,对主存的访问需要60纳秒,或者大约浪费了30个访问内存的周期。
广告
仔细想想,这么小的内存却能最大限度地利用大得多的内存,真是令人难以置信。想想一个256千字节的L2缓存,缓存64兆字节的RAM。在本例中,256,000字节有效地缓存了64,000,000字节。为什么会这样?
在计算机科学中,我们有一个理论概念叫做参考地点.这意味着在一个相当大的程序中,每次只使用很小的部分。尽管看起来很奇怪,但参考的局部性适用于绝大多数程序。即使可执行文件的大小为10兆字节,在任何时候也只有少数几个字节在使用,而且它们的重复率非常高。在下一页中,您将了解更多关于参考位置的知识。
广告
参考地点
让我们看一下下面的伪代码,看看为什么引用的局部性可以工作(参见18新利最新登入C语言编程原理要真正深入了解它):
输出到屏幕«输入1到100之间的数字»读取用户输入将用户的值放入变量X将值100放入变量Y将值1放入变量Z循环Y时间数将Z除以X如果除法的余数= 0,则输出«Z是X的倍数»将Z加1返回循环结束
这个小程序要求用户输入1到100之间的一个数字。它读取用户输入的值。然后,程序将1到100之间的每一个数字除以用户输入的数字。它检查余数是否为0(模除法)。如果是,对于1到100之间的每个数字,程序输出“Z是X的倍数”(例如,12是6的倍数)。然后程序结束。
广告
即使你对计算机编程不太了解,也很容易理解,在这个程序的11行中,包含了循环部分(第7行到第9行)执行100次。所有其他行都只执行一次。由于缓存,第7行到第9行将运行得更快。
这个程序非常小,可以很容易地完全装入最小的L1缓存中,但是让我们假设这个程序非常大。结果是一样的。当你编程时,很多动作发生在循环中。文字处理器要花费95%的时间等待你的输入并显示在屏幕上。文字处理程序的这一部分在缓存中。
这个95%对5%的比例(大约)就是我们所说的参考位置,这就是为什么缓存工作得如此高效。这也是为什么如此小的缓存可以有效地缓存如此大的内存系统。你可以明白为什么不值得到处建造一台内存最快的计算机。我们可以用很小的成本实现95%的效率。
有关缓存和相关主题18luck手机登录的更多信息,请查看下一页上的链接。
广告