基础·计算机组成原理

 2021-10-10 18:31  阅读(48)
文章分类:计算机组成原理 文章标签:计算机原理计算机组成原理
©  原文地址:https://zhuanlan.zhihu.com/p/38534417

知识点1:计算机应用分类

计算机应用方向主要包括三类:

1.个人计算机。用于个人使用的计算机,通常包含图形显示器、键盘和鼠标等;

2.服务器。过去被称为大型机的现代形式,用于为多用户运行大型程序的计算机,通常由多个用户并行使用,并且一般通过网络访问。其中高端服务器称为超级计算机,拥有最高性能和最高成本;

3.嵌入式计算机。嵌入到其他设备中的计算机,一般运行预定义的一个或者一组应用程序。面向单一应用需求的嵌入式应用通常对成本或功耗有严格限制。

而在2000年后的“后PC时代”,个人移动设备代替了传统PC,云计算代替了传统服务器:

个人移动设备(PMD)。连接到网络上的小型无线设备,由电池供电,通过下载App的方式安装软件,如智能手机和平板电脑;

云计算。依赖于称为仓储规模计算机(WSC)的巨型数据中心,是在网络上提供服务的大服务器集群,一些运营商根据应用需求出租不同数量的服务器。

知识点2:计算机设计的重要思想

1.面向摩尔定律的设计:摩尔定律指出单芯片上的集成度(集成电路芯片中晶体管数量)每18-24个月翻一番。设计者必须预测其设计完成时的工艺水平。

2.使用抽象简化设计:使用抽象来表示不同的设计层次,在高层次中看不到低层次的细节,只能看到一个简化的模型。

3.加速大概率事件:加速大概率事件远比优化小概率事件更能提高性能。

4.通过并行提高性能。

5.通过流水线提高性能。

6.通过预测提高性能:如果从误预测恢复执行代价不高且预测的准确率相对较高,则可通过猜测的方式提前开始某些操作。

7.存储器层次:通过存储器层次来满足速度快容量大价格低这些互相矛盾的需求。如同一个堆叠的三角形,越靠近顶端速度越快价格越高,底层宽度越大容量越大。

8.通过冗余提高可靠性。

知识点3:计算机语言层次

高级编程语言:由一些单词和代数符号组成,可以由编译器转换为汇编语言。不涉及硬件,具有通用性,但目标代码冗长,不能对某些硬件进行操作。

汇编语言:又称低级语言,是一种符号语言,以助记符形式表示的机器指令。

机器语言:以二进制元形式表示的机器指令,是一种指令集的体系。CPU可直接解读,执行速度快效率高。

知识点4:冯·诺依曼体系结构

基本思想包括:计算机硬件系统由五大部分组成;采用二进制编码表示数据;将程序和数据统一表示;计算机具有顺序指令的处理能力等。

五大部分是指:运算器(ALU)、控制器、存储器、输入设备和输出设备。其中运算器和控制器合称为中央处理单元(也叫处理器,CPU)。各个组成部分通过总线连接起来,总线由数据总线DB、地址总线AB、控制总线CB组成。

知识点5:数的机器表示与补码

计算机中的数采用二进制,数码0和1由二值器件的两个稳态表示,称为bit(记为b),8个相邻的二进制位构成一个字节Byte(记为B)。

数的机器表示称为机器数,数的数学表示称为真值。

有符号数最高位用来表示符号(0为正1为负),其余位表示绝对值,这种表示方法称为原码,原码常用来描述真值。

而有符号数的机器表示是补码,0和正数的补码就是本身,负数的补码是其绝对值求反加1。补码的减法运算可以变为加法运算,于是CPU就可用加法器直接实现减法。例如:

0000 0000 0000 0000 0000 0000 0000 0000(2)=0(10)

0000 0000 0000 0000 0000 0000 0000 0001(2)=1(10)

0000 0000 0000 0000 0000 0000 0000 0010(2)=2(10)

……

0111 1111 1111 1111 1111 1111 1111 1110(2)=2147483646(10)

0111 1111 1111 1111 1111 1111 1111 1111(2)=2147483647(10)

1000 0000 0000 0000 0000 0000 0000 0000(2)=-2147483648(10)

1000 0000 0000 0000 0000 0000 0000 0001(2)=-2147483647(10)

……

1111 1111 1111 1111 1111 1111 1111 1110(2)=-2(10)

1111 1111 1111 1111 1111 1111 1111 1111(2)=-1(10)

任意一个带符号的二进制数都可表示为科学记数法N=(-1)^S*2^E*M,其中S是符号,E是指数(阶码),M是尾数。浮点数由阶码和尾数及符号位组成。

知识点6:进制转换

十进制转换为二进制或十六进制:用十进制数不断除以2或16,记下每次相除时的余数,直到商0为止,将得到的余数倒序排列即可。即“除2/16取余,逆序排列”。

1位十六进制数码正好与4位二进制数码一一对应。

知识点7:经典CPU性能公式

CPU时间=指令数 * 每条指令的平均时钟周期数(CPI) * 时钟周期时间

或 CPU时间=指令数 * 每条指令的平均时钟周期数(CPI) / 时钟频率

执行时间是唯一有效且不可推翻的计算机性能度量方法。

知识点8:易失性/非易失性存储器

存储器可分为易失性存储器与非易失性存储器,前者仅在加电时保存数据,后者掉电仍可保持。易失性存储器的主要代表是RAM(随机存取存储器);非易失性存储器包括ROM(只读存储器)、Flash memory(闪存)、磁盘等。常将易失性存储器称为主存储器,非易失性存储器称为二级存储器。

RAM可进一步分为SRAM(静态随机访问存储器)和DRAM(动态随机访问存储器)。SRAM不需要刷新电路即能保存它内部存储的数据,而DRAM每隔一段时间要刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能功耗较小,但SRAM的缺点是集成度较低。通常内存由多片DRAM芯片组成,缓存采用SRAM技术。

个人移动设备中一般采用闪存,服务器中则采用磁盘。闪存的单位价格和速度均低于DRAM高于磁盘,但闪存具有写10万-100万次后老化或损坏的弱点。

知识点9:硬件概念

液晶显示(LCD):用液体聚合物薄层的带电或不带电来传输或阻止光线传输。

电容感应:许多平板电脑采用该技术实现触摸屏。在绝缘玻璃上覆盖一层透明的导体,人是导体触摸会改变屏幕的电场,进而导致电容变化。

集成电路:也叫芯片,一种将几十个至几百万个晶体管连接起来的设备。

晶体管:一种由电信号控制的简单开关,超大规模集成电路是由数十万到数百万晶体管组成的电路。

知识点10:指令、指令集、寄存器、字

CPU可以完成的一个基本操作称为指令。指令的形式是二进制代码,通常包含操作码和操作数两部分。操作码指明所要完成的操作类型,操作数则指明操作的数据对象,可以是数据本身也可以是数据所在的存储单元地址。

一台计算机的全部指令称为该计算机的指令集,常见的指令集有X86、ARM、MIPS。指令系统的发展从CISC(复杂指令系统计算机)发展到RISC(精简指令系统计算机),前者多达几百条,不易维护研制周期长,且采用了大量使用频率低的复杂指令造成硬件资源浪费。X86是CISC的代表,ARM与MIPS是RISC的代表,ARM指令集广泛使用在嵌入式系统设计,X86指令集则是目前世界上最流行的台式机体系结构。

寄存器是CPU内部的临时存储单元,能减少CPU访问内存的次数和降低指令控制的复杂度。寄存器由硬件直接构建且数量有限,是计算机硬件涉及的基本元素。

字是计算机内部进行数据处理和数据传递的基本单位,其所包含的二进制位数称为字长,字长是计算机处理精度和运算能力的反映。例如MIPS体系结构中存储器大小为32位,因此字长为32位。

知识点11:大小端编址

存储器通常按字节编址,以32位字长为例,一个字的地址必和它所包括的4字节中某个地址相匹配。大端编址表示使用最左边或“大端”字节的地址作为字地址,小端编址则表示使用最右或“小端”作为字地址。如MIPS采用大端编址。

202110101831067391.png![Image 1][]

知识点12:MIPS指令集

MIPS由斯坦福大学设计,用于无内部互锁流水级的微处理器RISC芯片,最早版本为32位,最新为64位。中国龙芯便采用了MIPS精简指令集架构。

![202110101831072233.png][]![Image 1][]

MIPS一类的现代计算机有32个32位寄存器,约定书写指令时用$加两个字符来代表一个寄存器。如$s0、$s1……表示变量所对应的寄存器,用$t0、$t1……表示将程序编译为MIPS指令时所需的临时寄存器。$zero恒置为0。

知识点13:MIPS汇编初步

1.算术指令

只对寄存器进行操作,每条算术指令只执行一个操作,有且仅有3个变量。有一个常数操作数的快速加法指令叫作加立即数(addi 指令),由于支持负常数,因而不需要设置减立即数指令。

2.数据传送指令

将数据从存储器复制到寄存器称为取数指令,反之为存数指令。指令必须给出存储器地址,存储器就是一个很大的下标从0开始的一维数组,地址就相当于数组的下标。其操作码后接着目标寄存器、用来访问存储器的常数(偏移量)和寄存器(基址),偏移量和第二个寄存器中的基址相加即得存储器地址。

3.逻辑操作指令

用于对字中若干位或单个位进行操作。MIPS引入或非NOR指令取代NOT,如果一个操作数为0等价于NOT。也包括异或XOR指令,当两个操作数对应位不同时置1,相同时置0。

4.决策指令

虽然高级编程语言中有许多决策和循环语句,但在MIPS中实现其功能的基本语句是条件分支。MIPS使用slt、slti、beq、bne和$zero来创建所有比较条件,其中slt和slti用于处理有符号整数,而sltu和sltiu用于处理无符号整数。

在条件分支和跳转指令中,指令中的地址为字地址而不是字节地址(内存中的地址),因而16位字地址可表示18位字节地址,26位字地址可表示28位的字节地址。

A.例题1

设变量h存放在寄存器$s2中,数组A基址存放在$s3中,求C语句A[12]=h+A[8]对应的MIPS汇编代码:

lw $t0, 32($s3)

add $t0, $s2, $t0

sw $t0, 48($s3)

B.例题2

变量f、g、h、i、j都是变量,对应$s0-$s4,求C语句if (i==j) f=g+h; else f=g-h对应的MIPS汇编代码:

bne $s3, $4, Else #通常通过测试分支的相反条件来跳过then部分代码效率更高

add $s0, $s1, $s2

j Exit

Else: sub $s0, $s1, $s2

Exit :

C.例题3

变量i和k存放在寄存器$s3和$s5中,数组基址存放$s6中,求C语句while (save[i] == k) i += 1对应的MIPS汇编代码:

Loop: sll $t1, $s3, 2 #将i乘以4,i在C语言中对应字,4i对应字节地址

add $t1, $t1, $s6 #与基址相加

lw $t0, 0($t1)

bne $t0, $s5, Exit

addi $s3, $s3, 1

j Loop

Exit:

知识点14:机器指令表示

指令各部分都可看成一个独立的数(如寄存器$s0-$s7映射到数16-23,寄存器$t0-$t7映射到数8-15),将这些数拼在一起就形成指令。指令的数字形式称为机器语言,这样的指令序列称为机器码。

所有MIPS指令都是32位长,其组成为:

op字段(6bits)+rs字段(5bits)+rt字段(5bits)+rd字段(5bits)+shamt字段(5bits)+funct字段(6bits)

其中,op:指令的基本操作,通常称为操作码;rs:第一个源操作数寄存器;rt:第二个源操作数寄存器;rd:用于存放操作结果的目的寄存器;shamt:位移量,在位移指令中使用;funct:功能码,用于指明op字段中操作的特定变式。

MIPS保持所有指令长度相同,但不同类型指令采用不同指令格式,共有三种类型:

R型(寄存器型):上述提到的格式便为R型,例如:add $1,$2,$3

I型(立即数型):op字段(6bits)+rs字段(5bits)+rt字段(5bits)+address/immediate字段(16bits),例如:lw $1,$2,100

J型(转移型):op字段(6bits)+target字段(26bits),例如:j 8000

知识点15:过程调用原理

MIPS中与过程调用相关寄存器:

1.$a0-$a3:用于传递参数的四个参数寄存器;

2.$v0-$v1:用于返回值的两个值寄存器;

3.$ra:用于返回起始点的返回地址寄存器;

4.$sp:存放栈指针;

5.$t0-$t9:在过程调用中不必被调用者保存;

6.$s0-$s7:在调用过程中由被调用者保存和恢复。

MIPS中与过程调用相关指令:

1.jal 跳转和链接指令:跳转到某个地址的同时将下一条指令地址保存在寄存器$ra中。

2.jr 寄存器跳转指令:表示无条件跳转到寄存器所指定的地址,如jr $ra。

过程调用基本原理:

为在过程调用结束后将寄存器恢复到调用前所存储的值,需用一个栈将寄存器保存,调用完成后恢复。调用程序(调用者)将参数值放在$a0-$a3,使用jal x跳转到过程x(被调用者),保存寄存器,然后执行过程,将过程运算结果放在$v0和$v1,从栈中弹出数据恢复寄存器旧值,最后使用jr $ra将控制返回给调用者。

知识点16:MIPS五种寻址方式

1.立即数寻址:操作数是位于指令自身中的常数;

2.寄存器寻址:操作数是寄存器;

3.基址寻址或偏移寻址:操作数在内存中,其地址是指令中基址寄存器和常数的和,如lw与sw指令;

4.PC相对寻址:地址是PC和指令中常数的和;

5.伪直接寻址:跳转地址由指令中26位字段和PC高位相连而成。

![202110101831078995.png][]![Image 1][]

知识点17:四则运算原理

1.加减法

做补码运算时,要将符号位和数值部分一起参加运算,并且将符号位产生的进位丢掉。

运算过程中运算结果超出机器字长所能表示的范围称为溢出,溢出发生时符号位可能被数值位进位占用而产生错误。因此,两个正数相加但结果位负时说明发生了溢出,反之亦然;减法时如果正数减去负数得到负结果,或负数减去正数得到正结果,则发生溢出。

2.乘法

N位乘数*M位被乘数将得到N+M位的积。算法类似纸笔计算,每一步乘法当乘数位为1时只要将被乘数与中间结果求和,乘数位为0则跳过,因此乘法硬件只是简单地进行了移位和加法。

乘数放置在32位乘数寄存器中,64位积寄存器被初始化为0,64位被乘数寄存器初始化时将32位被乘数放在右半部分。算法共三个步骤:

1.乘数第0位为1则将被乘数加到积寄存器上(累加到中间结果),为0则直接进入第二步;

2.将被乘数寄存器左移1位(将被乘数与64位积寄存器中的中间结果对齐);

3.将乘数寄存器右移1位。

通过使用进位保留加法器、更多硬件与并行,能使乘法的计算速度快于5次加法。

3.除法

被除数=商*除数+余数,正确的有符号除法算法在源操作数的符号相反时商为负,同时使非零余数的符号和被除数的相同。

除法的原理是每次都尝试看最大能减掉多少除数(1倍或0倍),以此产生商。

开始时32位的商寄存器设为0,除数放置在64位除数寄存器左半边,算法每次的迭代将除数向右移1位来和被除数对齐,余数寄存器初始化为被除数。算法共三个步骤:

1.从余数寄存器中减去除数寄存器的内容,将结果放在余数寄存器中;

2.结果为正则除数小于等于被除数,商为1,即商寄存器左移,最低位设为1;结果为负将余数寄存器加上除数寄存器内容恢复原值,商左移并最低位设为0;

3.除数寄存器右移1位。

可以通过预测多位商的方法来加速除法运算,在预测错误时及时进行恢复。

知识点18:IEEE754浮点数

十进制小数点左边只有一位整数的记数法称为科学记数法,一个采用科学记数法表示的数若没有前导零且小数点左边只有一位整数则称为规格化数。

浮点设计需在尾数位宽和指数位宽之间找到折中办法,增加小数部分会增加表示精度,增加指数部分会增加数的表示范围。IEEE754单精度浮点数组成为符号1位,指数域为8位(包括指数的符号位),尾数域23位;双精度浮点数则由两个32位字表示,符号1位,指数11位,尾数52位。

为了将更多的数据位打包到有效位数部分,IEEE754浮点标准甚至隐藏了规格化二进制数的前导位1,因此单精度数有24位宽,双精度有53位宽。

另外为方便比较大小,用带偏阶的记数法将最小的负指数表示为00…00,最大的正指数表示为11…11,需要从带偏阶的指数中减去偏阶才是真实值。IEEE754规定单精度指数偏阶为127,双精度指数偏阶为1023。

因此有单精度通用表达式(-1)^S*(1+Fraction)*2^(Exponent-127),其中F表示0和1之间的数。

IEEE754还给出了一种表示无效操作结果(如0/0或者无穷减无穷)的符号NaN,即非数。

知识点19:浮点数加法与乘法

加法算法:

1.比较两个数的指数,将指数较小的数进行右移,直到其指数与指数较大的相匹配(非规格化的浮点数可以有多种科学计数法的表示形式);

2.将尾数相加;

3.结果进行规格化,右移时增大指数,左移时减小指数;

4.如果指数发生上溢或下溢则异常,否则对尾数进行舍入,保留适当的位数;

5.如果舍入后发生进位,结果不是规格化数,则重复上述两个步骤。

例如求1.0110*2^3+1.1000*2^2,先进行对阶,为1.0110*2^3+0.1100*2^3,相加为10.0010*2^3,最后规格化为1.0001*2^4。

乘法算法:

1.对两个偏阶指数相加,然后减去偏阶值即可得到新的偏阶指数;

2.将尾数相乘;

3.乘积进行规格化,乘积右移则增大指数;

4.如果指数发生上溢或下溢则异常,否则对尾数进行舍入,保留适当的位数;

5.如果舍入后发生进位,结果不是规格化数,则重复上述两个步骤;

6.如果操作数符号相同,设置积的符号为正,否则为负。

知识点20:基本的MIPS数据通路(总体)

仅考虑MIPS指令集的一个核心子集:

1.存储器访问指令:取字lw、存字sw

2.算术逻辑指令:加法add、减法sub、与运算and、或运算or、小于则设置slt

3.分支指令:相等则分支beq、跳转j

实现每条指令的前两步都是:

1.程序计数器PC指向指令所在的存储单元,并从中取出指令;

2.根据指令字段内容选择读取一个或两个寄存器;

接下来取决于具体指令类型,但大致相同:

3.除跳转外所有指令读取寄存器后均需使用算术逻辑单元ALU。存储访问指令用ALU计算地址,算术逻辑指令用ALU执行运算,分支指令用ALU进行比较;

4.使用ALU之后,储存访问指令需要访问内存以存取数据,算术逻辑指令或取数指令向寄存器写入数据,分支指令将根据比较结果决定是否改变下一条指令地址。

![202110101831083557.png][]![Image 1][]

某些单位的数据可能来自于两个不同的单元,需使用一个多选器逻辑单元Mux从不同的数据来源中选择一个送给目标单元;许多单元控制依赖于指令类型,需使用控制单元决定功能单元与多选器的控制信号。

MIPS实现中的数据通路部件是指一个用来操作或保存处理器中数据的单元,包括组合单元与状态单元。组合单元是处理数据值的单元,其输出只取决于当前输入,如ALU;状态单元是带有内部存储包含状态的单元,如指令存储器、数据存储器和寄存器。

知识点21:基本的MIPS数据通路(细节)

1.取指令并能自增PC以获得下一条指令地址的数据通路部分。

![202110101831089909.png][]![Image 1][]

2.实现R型指令(读取两个寄存器进行ALU再写回结果)所需的两个单元:寄存器堆和ALU。

![2021101018310913011.png][]![Image 1][]

寄存器堆即寄存器集合,通过提供5位寄存器号进行读写。R型指令需要4个输入(3个寄存器号和1个写入数据)和两个输出(2个读取数据)。

ALU有两个输入一个输出,一个1位输出指示其结果是否位0,以及一个4位控制信号。

3.实现存取指令需要将基址寄存器内容与偏移地址相加,依然用到寄存器堆和ALU;需要一个单元将16位偏移地址符号扩展为32位;需要一个保存读出或写入数据的存储单元。

4.分支数据通路需进行两个操作:计算分支目标地址和比较操作数。

计算分支目标地址时使用的基地址为PC+4,另外16位偏移量将左移2位以指示以字为单位的偏移量(此举将偏移量能表示的有效范围扩大了4倍)。

![2021101018310973213.png][]![Image 1][]

比较可由设置为减法的ALU完成,因其提供一个指示结果是否为0的输出信号。

5.跳转指令将偏移地址的低26位左移两位后,以之代替PC的低28位。

  1. 得到更加细化的数据通路,该通路每个时钟周期执行一条完整指令,未包含跳转指令。

![2021101018310997515.png][]![Image 1][]

知识点22:基本的MIPS数据通路(加上控制单元)

1.ALU控制设计

MIPS中ALU在4位控制信号上定义了如下功能:0000与,0001或,0010加,0110减,0111小于则置位。

对于取字和存字指令ALU用加法计算存储器地址;对于R型指令根据指令funct字段ALU执行以上5种操作中一种;对相等则分支指令,由ALU执行减法操作。

指令的6位funct字段和2位ALUOp字段用于生成4位控制信号。ALUOp位由操作码决定,00表示存取指令的加法,01表示分支指令的减法,10表示由指令funct字段决定。通过设计一张真值表,优化并转换为门电路便可设计出生成4位控制信号的逻辑单元。

2.7条控制信号

![2021101018311027217.png][]![Image 1][]

控制信号的取值为0、1或任意值X。除PCSrc控制信号外,所有控制信号都可由控制单元只根据指令的操作码来确定,而PCSrc信号有效的条件是指令为相等则分支且用于等值比较的ALU的零输出有效。

3.包含控制单元和控制信号的数据通路

![2021101018311050919.png][]![Image 1][]

一个时钟周期执行一条指令的实现机制称为单时钟周期实现,单周期设计中时钟周期对所有指令等长,因此时钟周期由执行时间最长的那条指令决定(几乎可以肯定是取数指令)。全部指令都选用一个CPU周期完成的系统被称为单周期CPU,其CPI=1。

知识点23:流水线技术

流水线是一种实现多条指令重叠执行的技术,与生产流水线类似,只要每一个操作步骤中都有独立的工作单元时就可以用流水线方式快速完成任务。

MIPS流水线具有5个步骤:1.从指令存储器中读取指令;2.指令译码的同时读取寄存器;3.执行操作或计算地址;4.从数据存储器中读取操作数;5.结果写回寄存器。每个步骤由一个专门的功能部件来实现,每个部件后面都有一个缓冲寄存器或称为锁存器,来保存本流水段的结果。

流水线带来的性能提高是通过增加指令吞吐率而不是减少单条指令的执行时间实现的,如果所有步骤所需时间一样且有足够的工作可做,流水线速度提高倍数等于流水线中步骤的数目,但流水线开销等问题会使加速比小于流水线级数。与多处理器编程相比其优势在于它对程序员不可见。

流水线模型中每个步骤只花费一个时钟周期时间,因此时钟周期必须满足最慢操作的执行需要。流水线中各段的时间应该尽量相等,否则会引起“堵塞”和“断流”现象。流水线需要有装入时间和排空时间,只有当流水线完全充满时才能充分发挥效率。

![2021101018311090521.png][]![Image 1][]

知识点24:局部性原理及相关概念

局部性原理表明了在任何时间内,程序访问的只是地址空间相对较小的一部分内容。其中,时间局部性是指某个数据项在被访问之后可能很快被再次访问(比如程序包含的循环结构);空间局部性是指某个数据项在被访问之后,与其地址相近的数据项可能很快被访问(比如指令通常顺序执行)。

可利用局部性原理将计算机存储器组织成为存储器层次结构,其由不同速度和容量的多级存储器构成。数据每次只能在相邻的两个层次之间进行复制交换,将存储信息交换的最小单元称为块或行。当采用合适的操作机制时,这种结构允许处理器的访问时间主要由层次结构中的第一层来决定,而整个存储器的容量则和第n层一样大。

命中率:在高层存储器中找到目标数据的存储访问比例;

缺失率:在高层存储器中没有找到目标数据的存储访问比例;

命中时间:访问某存储器层次结构所需要的时间,包括了判断当前访问是命中还是缺失所需的时间;

缺失代价:将相应的块从低层存储器替换到高层存储器所需的时间,包括访问块、将数据逐层传输、将数据插入发生缺失的层和将信息块传送给请求者的时间。

知识点25:存储器技术

目前构建存储器层次结构主要有4种技术。

第一种是SRAM,用于实现cache。SRAM对任何数据访问时间是固定的,而且SRAM不需要刷新;

第二种是DRAM,用于实现主存储器。DRAM在电容上保存电荷,因此不能长久保持数据需要周期性刷新,这也是称为动态的原因;

第三种是闪存,是一种电可擦除的可编程只读存储器(EEPROM),常用作个人移动设备中的二级存储器。对闪存的写操作可使得存储位损耗,使用损耗均衡技术使写操作尽量分散;

第四种是磁盘,通常是服务器中容量最大速度最慢的一层。一个磁质硬盘包含一组圆形磁盘片,每层表面有一个包含小电磁线圈的读写磁头。每个磁盘表面划分为同心圆盘称为磁道,每个面通常有几万条磁道,每条磁道被划分为几千个扇区,扇区是磁盘上数据读写的最小单位。磁盘访问数据通常分三步,第一步将磁头移动到适当磁道,该过程称为寻道,所需时间称为寻道时间;第二步是将要访问的扇区转动到读写头下面,该等待时间称为旋转延时;第三步是传输一块数据,该时间是传输时间。

![2021101018311154623.png][]![Image 1][]

知识点26:Cache基本原理

高速缓冲存储器cache是设置于主存和CPU之间的存储器,用SRAM实现,缓存了CPU频繁访问的信息,对程序员透明。CPU读主存时,便把地址同时送给cache和主存,若在cache中(命中)立即传给CPU,否则(缺失)用主存读周期把此字从主存读出送到CPU,与此同时把含有这个字的整个数据块从主存读出送到cache中。

当CPU和主存间速度差别很大时采用两级或多级Cache。如Intel酷睿i7 930中,L1 Cache有256KB,L2 Cache有1MB,L3 Cache有8MB。

1.读数据

在cache中为主存中每个字分配一个位置最简单方法,是每个存储器地址仅仅对应到cache中一个确定的地址,称为直接映射。比如可使用“块地址 mod cache中的块数”,当cache的块数是2的幂时只需要取地址的低几位即可(如8块则取低3位)。还需增加一组标记,其中包含了地址信息(如选取没有用来检索cache的那些高位),因而cache块的索引以及标记唯一确定了cache块中存放的主存地址。另外还用一个有效位来标识一个块是否含有一个有效数据。

2.写操作

为保持一致性将数据同时写入主存和cache中,称为写直达。写直达无法提供良好的性能,解决方法是采用写缓冲,当一个数据等待被写入主存时先放入写缓冲中继续执行处理器,如果写缓冲满了当处理器执行到一个写操作时则必须停下来。

除写直达外另一种方法称为写回,当发生写操作时新值仅仅被写入cache,只有当修改过的块被替换才写到较低层存储结构中。写回可提高系统性能,但实现也更复杂。

3.全相联与组相联

与直接映射不同,全相联是块可以放置到cache中的任何位置,而组相联是块可以放置到cache中的部分位置(至少两个)。

全相联cache中找指定块需检索cache中所有项,因而只适合块数较少的cache。

组相联cache中每个块可被放置的位置数是固定的,每个块有n个位置可放的cache被称作n路组相联cache。一个块首先被直接映射到一个组,然后检索该组中所有的块,组可由“块号 mod cache中的组数”得出。

![2021101018311204725.png][]![Image 1][]

[Image 1]: [202110101831072233.png]: https://www.cmsblogs.com/images/group/common/jisuanjiyuanli/202110101831072233.png [202110101831078995.png]: https://www.cmsblogs.com/images/group/common/jisuanjiyuanli/202110101831078995.png [202110101831083557.png]: https://www.cmsblogs.com/images/group/common/jisuanjiyuanli/202110101831083557.png [202110101831089909.png]: https://www.cmsblogs.com/images/group/common/jisuanjiyuanli/202110101831089909.png [2021101018310913011.png]: https://www.cmsblogs.com/images/group/common/jisuanjiyuanli/2021101018310913011.png [2021101018310973213.png]: https://www.cmsblogs.com/images/group/common/jisuanjiyuanli/2021101018310973213.png [2021101018310997515.png]: https://www.cmsblogs.com/images/group/common/jisuanjiyuanli/2021101018310997515.png [2021101018311027217.png]: https://www.cmsblogs.com/images/group/common/jisuanjiyuanli/2021101018311027217.png [2021101018311050919.png]: https://www.cmsblogs.com/images/group/common/jisuanjiyuanli/2021101018311050919.png [2021101018311090521.png]: https://www.cmsblogs.com/images/group/common/jisuanjiyuanli/2021101018311090521.png [2021101018311154623.png]: https://www.cmsblogs.com/images/group/common/jisuanjiyuanli/2021101018311154623.png [2021101018311204725.png]: https://www.cmsblogs.com/images/group/common/jisuanjiyuanli/2021101018311204725.png

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> 基础·计算机组成原理

相关推荐