缓存是个啥?

上一篇 / 下一篇  2008-03-12 13:17:12

虚拟内存:-------顾名思义就是虚拟的而不是实际的硬件,是为满足程序的运行要求,扩大可用“内存”空间而设置的。在系统区根目录下有一个pagefile.sys文件,这就是Win dows使用的虚拟内存的文件。通常情况下,大家在使用时都是按照系统默认的设置让Windows管理高速缓存缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速度的重要因素,能够大幅度地提高硬盘整体性能。当硬盘存取零碎数据时需要不断地在硬盘与内存之间交换数据,如果有大缓存,则可以将那些零碎数据暂存在缓存中,减小外系统的负荷,也提高了数据的传输速度。

硬盘的缓存主要起三种作用:一是预读取。当硬盘受到CPU指令控制开始读取数据时,硬盘上的控制芯片会控制磁头把正在读取的簇的下一个或者几个簇中的数据读到缓存中(由于硬盘上数据存储时是比较连续的,所以读取命中率较高),当需要读取下一个或者几个簇中的数据的时候,硬盘则不需要再次读取数据,直接把缓存中的数据传输到内存中就可以了,由于缓存的速度远远高于磁头读写的速度,所以能够达到明显改善性能的目的;二是对写入动作进行缓存。当硬盘接到写入数据的指令之后,并不会马上将数据写入到盘片上,而是先暂时存储在缓存里,然后发送一个“数据已写入”的信号给系统,这时系统就会认为数据已经写入,并继续执行下面的工作,而硬盘则在空闲(不进行读取或写入的时候)时再将缓存中的数据写入到盘片上。虽然对于写入数据的性能有一定提升,但也不可避免地带来了安全隐患——如果数据还在缓存里的时候突然掉电,那么这些数据就会丢失。对于这个问题,硬盘厂商们自然也有解决办法:掉电时,磁头会借助惯性将缓存中的数据写入零磁道以外的暂存区域,等到下次启动时再将这些数据写入目的地;第三个作用就是临时存储最近访问过的数据。有时候,某些数据是会经常需要访问的,硬盘内部的缓存会将读取比较频繁的一些数据存储在缓存中,再次读取时就可以直接从缓存中直接传输。

缓存容量的大小不同品牌、不同型号的产品各不相同,早期的硬盘缓存基本都很小,只有几百KB,已无法满足用户的需求。2MB和8MB缓存是现今主流硬盘所采用,而在服务器或特殊应用领域中还有缓存容量更大的产品,甚至达到了16MB、64MB等。 大容量的缓存虽然可以在硬盘进行读写工作状态下,让更多的数据存储在缓存中,以提高硬盘的访问速度,但并不意味着缓存越大就越出众。缓存的应用存在一个算法的问题,即便缓存容量很大,而没有一个高效率的算法,那将导致应用中缓存数据的命中率偏低,无法有效发挥出大容量缓存的优势。算法是和缓存容量相辅相成,大容量的缓存需要更为有效率的算法,否则性能会大大折扣,从技术角度上说,高容量缓存的算法是直接影响到硬盘性能发挥的重要因素。更大容量缓存是未来硬盘发展的必然趋势。

什么是高速缓存技术?高速缓存的作用是什么?2007-09-25 10:41 A.M.什么是高速缓存技术:
高速缓存英文是cache。一种特殊的存储器子系统,其中复制了频繁使用的数据,以利于CPU快速访问。存储器的高速缓冲存储器存储了频繁访问的 RAM 位置的内容及这些数据项的存储地址。当处理器引用存储器中的某地址时,高速缓冲存储器便检查是否存有该地址。如果存有该地址,则将数据返回处理器;如果没有保存该地址,则进行常规的存储器访问。因为高速缓冲存储器总是比主RAM 存储器速度快,所以当 RAM 的访问速度低于微处理器的速度时,常使用高速缓冲存储器。

高速缓存的作用:
在CPU开始执行任何指令之前,都会首先从内存中取得该条指令以及其它一些相关数据和信息。为了加快CPU的运行速度,几乎所有的芯片都采用两种不同类型的内部存储器,即高速缓存。缓存被用来临时存放一些经常被使用的程序片段或数据。
一级高速缓存是性能最好缓存类型,与解释指令和执行算术运算的处理单元一到构成CPU的核心。CPU可以在全速运行的状态下读取存放在一级高速缓存中的指令或数据。Intel的处理器产品一般都会具有32K的一级缓存,而象AMD或Via这种竞争对手的产品则会使用更多的一级缓存。
如果在一级缓存中没有找到所需要的指令或数据,处理器会查看容量更大的二级缓存。二级缓存既可以被集成到CPU芯片内部,也可以作为外部缓存。Pentium II处理器具有512K的二级缓存,工作速度相当于CPU速度的一半。Celeron以及更新的Pentium III芯片则分别具有128K和256K的在片二级缓存,能够在处理器全速下运行。 对于存放在速度较慢的二级缓存中的指令或数据,处理器往往需要等待2到4个时钟周期。为了充分利用计算资源,CPU可以在这段时间内查看和执行其它正在等候处理,但不需要使用额外数据的指令,从而提高整个系统的速度,把空闲时间降低到最低程度。


高速缓存是什么意思?2007-09-25 10:44 A.M.高速缓存
缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速度的重要因素,能够大幅度地提高硬盘整体性能。当硬盘存取零碎数据时需要不断地在硬盘与内存之间交换数据,如果有大缓存,则可以将那些零碎数据暂存在缓存中,减小外系统的负荷,也提高了数据的传输速度。

通俗的讲,在执行程序的时候,需要一些空间去临时放置临时文件。比如你做饭,在炒菜的时候临时把调料和菜放在案板上(要不一次一次在柜子里拿,多麻烦),这个案板就相当于内存。等你做完饭了,你的菜在盘子里(执行结果),调料放回柜子里,内存就倾空了,等待下次使用。

虚拟内存,就是案板不够,需要把锅台也用来临时放调料,就是把你的硬盘中一部分预定作为交换页面来使用,这部分一般是内存的1.5倍。缓存就相当于一个中转仓库如果你曾经购买过电脑,那么你肯定听过“缓存”(cache)这个词吧,现代的电脑同时具有L1和L2 cache 。你可能在购买电脑的时候也听到过要好的朋友这样建议,“不要购买赛扬(Celeron)系列处理器,因为它的cache比较少”。

在电脑系统里,缓存在很多方面都起着举足轻重的作用, 并且它以各种各样的形式存在不同的硬件里面。其中有内存缓存,硬盘和软盘缓存,软件磁盘缓存,还有页面缓存等更多;虚拟内存也是另外一种不同表达形式的缓存。在这篇“神奇的硬件”文章里面,我们将会探究缓存,你可以 从中明白它的工作原理,并且知道为什么它在电脑系统中的地位是这么的重要。 一个简单的例子

超高速缓存(Caching)是计算机里面基于内存子系统的技术。使用缓存的主要目的是使价位低廉的电脑也可以保持高速运行;超高速缓存允许你的电脑在运行日常任务的时候能够更加 流畅、快速。

为了明白隐藏在缓存系统后面的基本思想,让我们使用一个超级简单的图书管理员例子来证明缓存的概念。现在我们来想象一个图书管理员站在他的桌子后面, 他的任务就是递给你请求租借的书本。为了使你更加简单明了,我们现在猜想你自己找不到需要的这些书籍--所以你必须询问管理员你需要的书在那里,另外他会从储书房把你需要的书给取来。首先,让我们从图书馆管理员没有缓存的时候开始。首个顾客抵达了,他询问白鲸记(Moby Dick)这本图书;图书管理员走到库房,找到了这本书,返回柜台并递给顾客。稍后,这个客人回来并归还了这本书;图书管理员拿着这本书,走到库房并把书放置在它原来的里 ;他接着又返回柜台等待其他顾客的来临。我们想象接下来的顾客也是询问白鲸记(你看到他来了...),图书管理员不得不返回库房并找出他刚刚才放置好的图书。在这种情况下,图书管理员为了拿每本书不得不走一个 来回的路程---即使是每个人都需要的非常流行的图书。那么,有什么办法可以改进图书管理员的效率呢?

是的,有这样的办法,我们可以在图书管理员身上放置缓存。让我们给图书管理员 装备一个背包,它可以装下10本图书(如果用电脑术语表示就是,现在图书管理员拥有10本书的缓存(cache))。在背包里面,图书管理员可以放置顾客归还的图书,最大数量为10本。让我们 再次使用先前的例子,但这回不同的是角色,因为我们这里使用了新的和改进的图书管理员:缓存版本:)。

新的一天开始了,际楣芾碓钡谋嘲强盏摹J赘龉丝偷执锪耍拾拙牵∕oby Dick)这本图书;图书管理员走到库房,找到了这本书,返回柜台并递给顾客。稍后,这个客人回来并把书归还给了图书管理员;这次图书管理员可不会再走到库房并把书摆放在原来的地方,他只是把书放在背包并继续站在那里就可以了(他首先会检查背包是否满了--这个问题稍后将谈到)。另外的顾客抵达并询问白鲸记;在他走向库房之前,他会首先检查背包以看顾客需要的书是否在背包里。他发现了!他需要做的仅是从背包里把书拿出来并递给客人。他不需要再 花费来回库房的路程,现在他的工作看起来也更加有效率了。

如果顾客询问的书本标题不在缓存(背包)里,那该怎么办呢?在这种情况,图书管理员有缓存就比没有缓存的效率更加低下了;因为他必须首先花时间检查背包。所以现在急待解决的问题是,最少化缓存设计中检查缓存所带来的影响,在现代的硬件实际上已经把该时间减少到了零。即使在我们简单的图书管理员的例子 里,检查缓存的时间与往返库房的无关时间相比,检查缓存所带来的延迟(等待时间)也是非常短的。缓存比较小(10本书),花费的检查时间也就越短。

从这个例子你可以了解到关于缓存的几个重要事实:

缓存技术是使用比较少容量但却非常高速的内存类型,用于加速比较慢却具有大容量的内存类型。
在使用缓存的时候,你必须检查缓存看需要的数据是否在那里。如果在,就称作缓存命中(cache hit);否则就称作缓存击不中(cache miss),这时候计算机必须 花费从大容量、慢内存区域读取数据的来回旅程。
缓存具有最大的容量,但却比大的存储区(主内存)小很多。
可以具有多层缓存。以我们图书管理员的例子,比较小但更快速的内存类型就是背包,库房则代表更大却比较慢的内存类型。背包是一级缓存,但在柜台里面却可以 还有由书架组成,可以存放100本书的二级缓存。图书管理员可以首先检查背包,然后再到柜台的书架,接着就是库房。现在就有两级缓存了。
电脑缓存

电脑是我们用极小的增量衡量时间的机器。当微处理器访问主内存(RAM)的时候,它大约需要花费60纳秒的时间;这是相当快的,但这与典型的微处理器的处理速度来说却是非常慢的。微处理器的周期时间短达2钠秒,因此60钠秒相对于微处理器来说就如来生那么漫长。 如果我们在处理器里面构建特殊的存储体,比较小却非常快速(大约30钠秒之间),会怎么样呢?这大约是主内存速度的两倍。我们称之为2级缓存,或者是L2 cache 。如果我们构建容量更加小,但速度却要快上很多的内存直接访问微处理器芯片,那又会怎么样呢?这样处理器就能够以处理器总线的速度访问内存,而非内存总线的速度:这是L1 cache 。在Pentium 233MHz 处理器里面,L1 cache的速度是L2 cache的3.5倍, 后者是访问主内存速度的两倍。

计算机里面还有其它的子系统;你可以在它们之间加入缓存以提高性能。下面是例子,我们拥有一颗微处理器(电脑里面最快速的东西)。L1 cache 缓存L2 cache,L2 cache 缓存主内存,内存还可以用于缓存其它较慢的周边设备,例如硬盘和光驱等。硬盘也还可以用于缓存其它更慢的媒体--你的 英特网连接。

英特网连接(Internet connection)是你的电脑系统里面最慢的连结。因此你的浏览器(Internet Explorer, Netscape, Opera, 等)会使用硬盘储存HTML 页面,把这些内容放置到硬盘里面特殊的文件夹下面。你访问HTML 页面的时候,浏览器会向Internt递交请求,并把反馈的内容复制一份储存在硬盘里。当你第二次访问相同页面的时候,你的浏览器会首先检查网络上的文件是否比缓存的文件更新。如果日期相同,你的浏览器会直接把储存在硬盘的文件反馈给你,而不是从网络上下载相同的文件。在这种情况下,较小较快的内存系统就是硬盘;而更大容量却较慢的内存系统就是Internet 。

缓存还可以直接建立在外围设备(peripheral)上。现代的硬盘一般使用了快速的内存,容量最流行的为512KB/2MB/8MB等不同的版本。电脑不能够直接使用这些内存,因为它们是 由硬盘控制器控制的。在该系统里面,这些内存芯片就是硬盘本身。 当电脑从硬盘请求数据的时候,硬盘的移动机械部分(磁头)[与内存相比要慢很多]会首先检查硬盘上的缓存。如果它在缓存里发现了电脑请求的数据,它就会从缓存里反馈需要的数据 的请求,而不需要从磁盘本身访问该数据,这样就节省了大量的时间。

下面是一个你可以尝试的实验。你的电脑用主内存缓冲了软盘驱动器,这里你可以看到非常明显的效果。从软盘访问一个较大的文件--例如用文本编辑器打开1个300KB的文本文件。在这里,你看到软盘的灯会亮着,你需要等待。软盘真的比较慢,打开这样的文件你大概需要等待20秒。打开之后,你接着把编辑器给关了,并打开相同的文件。 这次(第二次),你将不会看见闪亮的软驱读取灯,也不需要等待,文件立刻就打开了。操作系统会检查它为软盘驱动器准备的缓存,并找出它需要寻找的内容。因此这次你不需要等待,你需要的内容会直接从内存子系统调动出来,这比你首次从软盘调动内容的时候要快很多(从软盘驱动器读取一次内容大约需要花费120毫秒,而主内存只需要花费大约60钠秒--要快很多)。你可以在硬盘上运行相同的测试,但 结果来得没有那么明显,因为软盘驱动器特别慢。

为了可以给你更加直观描绘,下面是普通缓存系统的表单:

L1 cache -以处理器的全速访问内存(10钠秒,4KB--18KB 容量)
L2 cache -以SRAM的类型访问内存(大约20-30钠秒,128KB-512KB容量)
主内存 -以RAM的类型访问内存(大约60钠秒,32MB-128MB容量)
硬盘 - 机械,慢(大约12毫秒,1GB-10GB容量)
英特网 -不 可置信的慢(大约1秒-3天,不限容量)
如你所看到的,L1 cache 缓存L2 cache,后者缓存主内存,主内存通常用于缓存磁盘子系统,等等。

注意:容量随着时间的迁移 缓存的容量已经发生了很大的改变,例如现在普遍都使用256MB的内存,主流的硬盘容量也达到了80GB ,但原理依然如此。

缓存技术

在这个观点上有个很普遍被询问到的问题,“为什么不使电脑的所有内存运行在与L1 cache 相同的速度呢,那样就不需要高速缓存了吧?”这样的办法是可行的,但是带来的价格将是不可置信的昂贵。高速缓存的观念是使用少量昂贵的内存来加速容量巨大,却相对缓慢和廉价的内存。

在设计电脑的时候,目的是让微处理器在尽可能廉价的情况下可以全速运行。1颗500-MHz 的芯片每秒可以运行大约5亿次周期(每两钠秒1个周期)。在没有L1和L2 cache的情况下,访问主内存需要60钠秒的时间,或者可以说访问内存的时候浪费了30个周期。

你可能会考虑到,这小量的内存可以提高大容量内存的使用效率。考虑到256KB 的L2 cache 可以缓存64MB的RAM,在这个情况下,256,000 bytes 容量的内存有效率地缓存64,000,000 bytes内存;那么它是怎么工作的呢?

在计算机学科,我们有个称为访问的局部性(locality of reference)的理论概念。它意味着在一个相当大的程序里面,每次仅有小部分可以被使用。直观点就可以说,访问局部性是为巨大数量的程序而工作的。即使需要执行的程序容量有10MB,但每次从程序取出的数据可能仅有几byte,并且它们的使用重复率是相当高的。下面让我们看看这段假冒的代码以了解访问局部性的代码是怎么工作的(想要 详细的了解就请看C程序是怎么工作的:将在以后推出)。

输出到屏幕吗?输入1到100之间的数字?

从用户的输入读取 把用户输入的数值赋予给变量X 把值100赋予给Y 把值1赋予给Z Y数值循环的次数 将Z除以X 如果剩余的余数 = 0 那么输出 ?Z 是X?的倍数 把Z加上1 返回循环

结束

上面的小程序叫用户输入1到100之间的数字,然后它会从用户的输入中读取相应的数值。接着,程序会把每个1到100之间的数字与用户输入的数字相除。程序会把检查是否余数为0(取模除法)。如果是,程序会输出“Z是X的倍数”(例如,12是6的倍数),接下来是1到100之间的每个数 按照上面的步骤得出的结果,最后程序结束。 即使你不明白任何电脑程序方面的内容,你也可以轻易地理解上面的11行程序代码,其中循环部分(第7到第9行)要被执行100次,而其它的代码仅执行一次。因为缓存的缘故,7到9行的代码执行起来会更快速。

这个程序非常细小,即使在最小容量的L1 cache也可以完全容纳,但在这里让我们假设这个程序是非常大的 ,但结果仍旧是相同的。当你执行程序的时候,在循环里面需要占据很多操作。一个文字处理器需要花费95%时间等待你输入并把结果显示在屏幕上。该部分字处理程序 就会被放置在缓存里面。

这里,95%与5%的比率(近似地)就我们称之为访问的局部性,这也是为什么缓存工作起来是那么有效率了,另外也是为什么小量的缓存可以高效率地缓存这么大的内存系统。你现在应该可以理解为什么不在电脑的所有地方都使用大量最快速的内存了。 因为我们可以使用小量的花费就可以获得95%的效率。 


TAG: 缓存 虚拟内存

 

评分:0

我来说两句

Open Toolbar