‘壹’ 计算机组成原理结构
一、计算机的组成及学习大纲
1. 计算机的组成
计算机的三大件 :CPU、内存、主板
(1)CPU,中央处理器,计算机最核心的配件,负责所有的计算。
(2)内存,你编写的程序、运行的游戏、打开的浏览器都要加载到内存中才能运行,程序读取的数据、计算的结果也都在内存中,内存的大小决定了你能加载的东西的多少。
(3)主板,存放在内存中数据需要被CPU读取,CPU计算完成后,还要把数据写入到内存中,然而CPU不能直接插在内存上,这就需要主板出马了,主板上很多个插槽,CPU和内存都是插在主板上,主板的芯片组和总线解决了CPU和内存之间的通讯问题,芯片组控制数据传输的流转,决定数据从哪里流向哪里,总线是实际数据传输的告诉公里,总线速度决定了数据的传输速度。
(4)输入/输出设备,其实有了以上三大件之后,计算机就可以跑起来了。我们日常使用的话还需要键盘、鼠标、显示器等输入/输出设备,而很多云服务器通过SSH远程登录就可以访问,就不需要配显示器、鼠标、键盘这些东西,节省成本且方便维护。
(5)硬盘,有了硬盘数据才能长久的保存下来,大部分还会给自己的机器配上机箱和风扇,解决灰尘和散热问题,不过这些也不是必须的,用纸板和电风扇替代也一样可以用。
(6)显卡,显卡里有GPU图形处理器,主要负责图形渲染,使用图形界面操作系统的计算机,显卡是必不可少的。现在的主板都带了内置的显卡,如果想玩游戏、做图形渲染,一般需要一张单独的显卡,插在主板上。
2. 冯·诺依曼体系
现代计算机的硬件基础架构都是依赖于冯诺依曼提出的冯诺依曼体系结构,现代计算机的核心架构可以抽象为五个基础组件:运算器、控制器、存储器、输入设备和输出设备。
具体到现代计算机,运算器和控制器组成了现代计算机的CPU,存储器对应着内存和硬盘,主板控制着CPU、内存、硬盘、输出/输出设备之间的通讯。
冯诺依曼体系结构也叫做存储程序计算机,即可编程、可存储的计算机。
任何一台计算机的任何一个部件都可以归到运算器、控制器、存储器、输入设备和输出设备中,而所有的现代计算机也都是基于这个基础架构来设计开发的。
冯诺依曼体系结构确立了我们现代计算机的硬件基础架构,学习计算机组成原理,就是学习和拆解冯诺依曼体系。
‘贰’ 关于计算机组成原理的Cache-主存地址映象问题
CPU工作速度较高,但内存存取速度相对较低,则造成CPU等待,降低处理速度,浪费CPU的能力,cache用于做cpu和内存的缓存。
Cache的工作原理是基于程序访问的局部性(通俗说就是把经常用到的数据放在一个高速的cache里面)。
对大量典型程序运行情况的分析结果表明,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内。指令地址的分布本来就是连续的,再加上循环程序段和子程序段要重复执行多次。因此,对这些地址的访问就自然地具有时间上集中分布的倾向。
数据分布的这种集中倾向不如指令明显,但对数组的存储和访问以及工作单元的选择都可以使存储器地址相对集中。这种对局部范围的存储器地址频繁访问,而对此范围以外的地址则访问甚少的现象,就称为程序访问的局部性。
根据程序的局部性原理,可以在主存和CPU通用寄存器之间设置一个高速的容量相对较小的存储器,把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,供CPU在一段时间内使用。这对提高程序的运行速度有很大的作用。这个介于主存和CPU之间的高速小容量存储器称作高速缓冲存储器(Cache)。
系统正是依据此原理,不断地将与当前指令集相关联的一个不太大的后继指令集从内存读到Cache,然后再与CPU高速传送,从而达到速度匹配。
CPU对存储器进行数据请求时,通常先访问Cache。由于局部性原理不能保证所请求的数据百分之百地在Cache中,这里便存在一个命中率。即CPU在任一时刻从Cache中可靠获取数据的几率。
命中率越高,正确获取数据的可靠性就越大。一般来说,Cache的存储容量比主存的容量小得多,但不能太小,太小会使命中率太低;也没有必要过大,过大不仅会增加成本,而且当容量超过一定值后,命中率随容量的增加将不会有明显地增长。
只要Cache的空间与主存空间在一定范围内保持适当比例的映射关系,Cache的命中率还是相当高的。
一般规定Cache与内存的空间比为4:1000,即128kB Cache可映射32MB内存;256kB Cache可映射64MB内存。在这种情况下,命中率都在90%以上。至于没有命中的数据,CPU只好直接从内存获取。获取的同时,也把它拷进Cache,以备下次访问。
‘叁’ 浅谈主存和Cache间的地址映射
最近在学计算机架构,正好学到主存与Cache间的地址映射,记录一下,方便以后复习回顾。
学一个东西要弄清楚这个东西有什么用,发明它的目的是什么。Cache和主存的地址映射则主要是为了加快CPU的处理速度,因为如果CPU每次都要从主存(如4GB)中找数据的话就太慢了,但是如果在Cache(如64K)中有对应主存的数据,这样就很快了。下面的地址映射方式都是想判断主存中某个数据在不在Cache中,只不过效率不同而已。
首先指明基础单位,简单来说,有4个基础单位: Bit , Byte , Block , Word
其中
在主存和Cache间的地址映射过程中,都是使用 Block 作为基本单位来交换数据,因为这样更加高效
主存和Cache有三种地址映射方式
全相连映射大概如下图所示:
Cache和 Main Memory(MM) 都被分为一定数量的 Block ,即图中的b(0), b(1), ...
由图可知,Cache被分为 C/B-1 个 Block ,Main Memory被分为 M/B-1 个 Block (C是缓存大小,如64k=2^16 Bytes,同理B和M分别是 Block 和MM大小)
全相连映射方式比较简单,其思想是MM中的任意一个Block可以存在Cache中任意一个Block中,寻址方式如下图:
BTW:Associative Memory(相联存储器)的列数和Cache的列数一致
例题1:
Assume that cache capacity is 64KB in a computer system, data block size is 16 bytes, main memory capacity is 4MB, fully associative mapping is used.
直接相连映射与全相连映射的不同之处在于它将MM中的Block分成了一个个Area,每个Area的大小都和Cache相同,并且每个Area中的Block只能存在Cache中对应位置的Block,例如:MM中Area0的b(0)只能存在Cache中的b(0),Area1的b(0)也只能存在Cache中的b(0),以此类推。因此它也要求MM的大小必须是Cache大小的整数倍。
Ei是Area编号,Bi是Area中的Block编号,bi是Cache中Block编号,Block Address是Block中的地址
首先,由Bi选出Directory Table中对应的Block,该Block存着Area编号,将这个编号和MM Address的Ei比较一下,相同的话就说明在Cache中找到了对应MM中的数据(Hit),然后直接把MM Address的Bi和Block Address当做Cache Address去Cache找。
例题2:
Assume that cache capacity is 64KB in a computer system, data block size is 16 bytes, main memory capacity is 4MB, direct associative mapping is used.
组相连映射的思想相当于结合了前两种映射思想,在已经分好Area的基础上再进一步地分Group,每个Areaz里面有若干个Group,与直接相连映射不同的是,组相连映射要求的只是每个Group必须一一对应,而Group里面的Block则是随意对应(即全相连映射)
Gi是Group的编号,其余同直接相连映射
同理,先由Gi选出Directory Table中对应的Group,再把Ei和Bi与其内容作比较,相等就说明Cache中存在MM中的数据,然后直接把Directory Table中的bi和MM Address中的Gi当成Cache Address去Cache中找数据
例题3:
Assume that cache capacity is 32KB in a computer system, data block size is 64 bytes, main memory capacity is 1MB, set associative mapping is used and the group count is 128.
最后,总结一下三种映射方式,当组相连映射中的Group数量减少到1时,组相连映射变成全相连映射,当Group数量增加到Block总数时,组相连映射变成直接相连映射。
‘肆’ 内存Cache直接映射、全相联映射和组相联映射
1. 直接映射
---- 一个内存地址能被映射到的Cache line是固定的。就如每个人的停车位是固定分配好的,可以直接找到。缺点是:因为人多车位少,很可能几个人争用同一个车位,导致Cache 淘汰换出频繁 ,需要频繁的从主存读取数据到Cache,这个代价也较高。
2. 全相联映射
---- 主存中的一个地址可被映射进任意cache line,问题是:当寻找一个地址是否已经被cache时,需要遍历每一个cache line来寻找,这个代价很高。就像停车位可以大家随便停一样,停的时候简单,找车的时候需要一个一个停车位的找了。
主存中任何一块都可以映射到Cache中的任何一块位置上。
全相联映射方式 比较灵活 ,主存的各块可以映射到Cache的任一块中,Cache的利用率高,块冲突概率低,只要淘汰Cache中的某一块,即可调入主存的任一块。但是,由于Cache比较电路的设计和实现比较困难,这种方式只适合于 小容量 Cache采用。
3. 组相联映射
---- 组相联映射实际上是直接映射和全相联映射的折中方案,其组织结构如图(3)所示。
主存和Cache都 分组 ,主存中一个 组内的块数 与Cache中的 分组数 相同,组间采用直接映射,组内采用全相联映射。也就是说,将Cache分成2^u组,每组包含2^v块,主存块存放到哪个组是固定的,至于存到该组哪一块则是灵活的。即主存的某块只能映射到Cache的特定组中的任意一块。主存的某块b与Cache的组k之间满足以下关系:k=b%(2^u).
‘伍’ 某计算Cache采用直接映射方式,......
32位先换成4B
cache的4kB/4B=1K个字
1K字/8字=2的10次幂/2的3次幂=2的7次幂=128块
cache一共有128块,第222块取余128块=94块
所以主存的第222块会映射到cache的第94块
如果要求主存的块数,和cache一样,主存的块数是128k块
‘陆’ 在cache-主存映射中,字块的大小与命中率的关 系是
开始时,块大小很小,例如只有一个存储单元,这时的命中率H很低。随着块大小的增加,由于程序的空间局部性起作用,同一块中数据的利用率比较高,因此,Cache的命中率增加。这种增加趋势在某一个最佳块大小处达到最大值。在这一点以后,命中率随着块大小的增加反而减小。
实际上,当块大小非常大时,进入Cache中的许多数据可能根本用不上。而且,随着块大小的增加,程序时间局部性的作用就会逐渐减弱。最后,当块大小等于整个Cache的容量时,命中率将趋近于零。
‘柒’ 缓存与主存的直接映射怎样简单理解
Cache与主存之间可采取多种地址映射方式,直接映射方式是其中的一种。在这种映射方式下,主存中的每一页只能复制到某一固定的Cache页中。由于Cache块(页)的大小为16B,而Cache容量为16KB。因此,此Cache可分为1024页。可以看到,Cache的页内地址只需4位即可表示;而Cache的页号需用10位二进制数来表示;在映射时,是将主存地址直接复制,现主存地址为1234E8F8(十六进制),则最低4位为Cache的页内地址,即1000,中间10位为Cache的页号,即1010001111。Cache的容量为16KB决定用这14位编码即可表示。题中所需求的Cache的地址为10100011111000。
‘捌’ 有关操作系统原理中CACHE与主存的地址映象问题.
·地址映像
所谓映象问题是指如何确定Cache中的内容是主存中的哪一部分的拷贝,即必须应用某种函数把主存地址映象到Cache中定位,也称地址映象。当信息按这种方式装入Cache中后,执行程序时,应将主存地址变换为Cache地址,这个变换过程叫作地址变换。地址映象方式通常采用直接映象、全相联映象、组相联映象三种。
1.直接映象
每个主存地址映像到Cache中的一个指定地址的方式,称为直接映象方式。在直接映象方式下,主存中存储单元的数据只可调入Cache中的一个位置,如果主存中另一个存储单元的数据也要调入该位置则将发生冲突。地址映像的方法一般是将主存空间按Cache的尺寸分区,每区内相同的块号映像到Cache中相同的块位置。一般地,Cache被分为2N块,主存被分为同样大小的2M块,主存与Cache中块的对应关系可用如下映像函数表示:j = i mod 2N。式中,j是Cache中的块号,i是主存中的块号。
直接映象是一种最简单的地址映像方式,它的地址变换速度快,而且不涉及其他两种映像方式中的替换策略问题。但是这种方式的块冲突概率较高,当称序往返访问两个相互冲突的块中的数据时,Cache的命中率将急剧下降,因为这时即使Cache中有其他空闲块,也因为固定的地址映像关系而无法应用。
2.全相联映象
主存中的每一个字块可映像到Cache任何一个字块位置上,这种方式称为全相联映像。这种方式只有当Cache中的块全部装满后才会出现块冲突,所以块冲突的概率低,可达到很高的Cache命中率;但实现很复杂。当访问一个块中的数据时,块地址要与Cache块表中的所有地址标记进行比较已确定是否命中。在数据块调入时存在着一个比较复杂的替换问题,即决定将数据块调入Cache中什么位置,将Cache中那一块数据调出主存。为了达到较高的速度,全部比较和替换都要用硬件实现。
3.组相联映象
组相联映象方式是直接映象和全相联映象的一种折衷方案。这种方法将存储空间分为若干组,各组之间是直接映像,而组内各块之间则是全相联映像。它是上述两种映像方式的一般形式,如果组的大小为1,即Cache空间分为2N组,就变为直接映像;如果组的大小为Cache整个的尺寸,就变为了全相联映像。组相联方式在判断块命中及替换算法上都要比全相联方式简单,块冲突的概率比直接映像的低,其命中率也介于直接映像和全相联映像方式之间。
·替换策略和一致性问题的处理方法
Cache和存储器一样具有两种基本操作,即读操作和写操作。
当CPU发出读操作命令时,根据它产生的主存地址分为两种情形:一种是需要的数据已在Cache中,那么只需直接访问Cache,从对应单元中读取信息到数据总线;另一种是需要的数据尚未装入Cache,CPU需从主存中读取信息的同时,Cache替换部件把该地址所在的那块存储内容从主存拷贝到Cache中;若Cache中相应位置已被字块占满,就必须去掉旧的字块。常见的替换策略有两种:
1.先进先出策略(FIFO)FIFO(First In First Out)策略总是把最先调入的Cache字块替换出去,它不需要随时记录各个字块的使用情况,较容易实现;缺点是经常使用的块,如一个包含循环程序的块也可能由于它是最早的块而被替换掉。
2.最近最少使用策略(LRU)LRU(Least Recently Used)策略是把当前近期Cache中使用次数最少的那块信息块替换出去,这种替换算法需要随时记录Cache中字块的使用情况。LRU的平均命中率比FIFO高,在组相联映像方式中,当分组容量加大时,LRU的命中率也会提高。
当CPU发出写操作命令时,也要根据它产生的主存地址分为两种情形:一种是不命中时,只向主存写入信息,不必同时把这个地址单元所在的整块内容调入Cache中;另一种是命中时,这时会遇到如何保持Cache与主存的一致性问题,通常有三种处理方式:
1.直写式(write through)即CPU在向Cache写入数据的同时,也把数据写入主存以保证Cache和主存中相应单元数据的一致性,其特点是简单可靠,但由于CPU每次更新时都要对主存写入,速度必然受影响。
2.缓写式(post write)即CPU在更新Cache时不直接更新主存中的数据,而是把更新的数据送入一个缓存器暂存,在适当的时候再把缓存器中的内容写入主存。在这种方式下,CPU不必等待主存写入而造成的时延,在一定程度上提高了速度,但由于缓存器只有有限的容量,只能锁存一次写入的数据,如果是连续写入,CPU仍需要等待。
3.回写式(write back)即CPU只向Cache写入,并用标记加以注明,直到Cache中被写过的块要被进入的信息块取代时,才一次写入主存。这种方式考虑到写入的往往是中间结果,每次写入主存速度慢而且不必要。其特点是速度快,避免了不必要的冗余写操作,但结构上较复杂。
此外,还有一种设置不可Cache区(Non-cacheable Block)的方式,即在主存中开辟一块区域,该区域中的数据不受Cache控制器的管理,不能调入Cache,CPU只能直接读写该区域的内容。由于该区域不与Cache发生关系,也就不存在数据不一致性问题。目前微机系统的BIOS设置程序大多允许用户设置不可Cache区的首地址和大小。
‘玖’ 计算机组成原理-cache与主存的映射
其实查询能力增强了,传统的查询,如果没有具体的地址的话,只能顺序查找,而组相连就可以根据数据计算出这个数据在哪个组,然后在顺序查询,这样速度比较快,估计你已经学过算法中的查找了,查找算法中,大家最不喜欢的就是顺序查找了,所以要提高速度
‘拾’ cache内存的地址映射主要有几种方式
cache内存的地址映射主要有以下三种方式:
一、直接映像:
指主存的一个字块只能映像到Cache的一个准确确定的字块中。
特点:主存的字块只可以和固定的Cache字块对应,方式直接,利用率低。
二、全相联映像:
全相联映射是指主存中任意一个块都可以映射到Cache中任意一个块的方式,也就是说,当主存中的某一块需调入Cache时,可根据当时Cache的块占用或分配情况,选择一个块给主存块存储,所选的Cache块可以是Cache中的任意一个块。
特点:贮存中的字块可以和Cache的任何字块对应,利用率高,方式灵活,标记位较长,使用成本太高。
三、组相联映像:
是对全相联和直接映像的一种折中的处理方案。既不在主存和Cache之间实现字块的完全随意对应,也不在主存和Cache之间实现字块的多对一的硬性对应,而是实现一种有限度的随意对应。
特点:折中方案。组间全相联,组内直接映像。集中了两个方式的优点。成本也不太高。最常见的Cache映像方式。