计算机组成原理面试知识点总结

处理器体系结构

 RISC与CISC指令集

RISC(精简指令集计算机)和CISC(复杂指令集计算机)是当前CPU的两种架构。它们的区别在于不同的CPU设计理念和方法。
早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。比如对于乘法运算,在CISC架构的CPU上,您可能需要这样一条指令:MUL ADDRA, ADDRB就可以将ADDRA和ADDRB中的数相乘并将结果储存在ADDRA中。将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作全部依赖于CPU中设计的逻辑来实现。这种架构会增加CPU结构的复杂性和对CPU工艺的要求,但对于编译器的开发十分有利。比如上面的例子,C程序中的a*=b就可以直接编译为一条乘法指令。今天只有Intel及其兼容CPU还在使用CISC架构。RISC架构要求软件来指定各个操作步骤。上面的例子如果要在RISC架构上实现,将ADDRA, ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作都必须由软件来实现,比如:MOV A, ADDRA; MOV B, ADDRB; MUL A, B; STR ADDRA, A。这种架构可以降低CPU的复杂性以及允许在同样的工艺水平下生产出功能更强大的CPU,但对于编译器的设计有更高的要求。

复杂指令集计算机(CISC)

长期来,计算机性能的提高往往是通过增加硬件的复杂性来获得.随着集成电路技术.特别是VLSI(超大规模集成电路)技术的迅速发展,为了软件编程方便和提高程序的运行速度,硬件工程师采用的办法是不断增加可实现复杂功能的指令和多种灵活的编址方式.甚至某些指令可支持高级语言语句归类后的复杂操作.至使硬件越来越复杂,造价也相应提高.为实现复杂操作,微处理器除向程序员提供类似各种寄存器和机器指令功能外.还通过存于只读存贮器(ROM)中的微程序来实现其极强的功能 ,处理器在分析每一条指令之后执行一系列初级指令运算来完成所需的功能,这种设计的型式被称为复杂指令集计算机(Complex Instruction Set Computer-CISC)结构.一般CISC计算机所含的指令数目至少300条以上,有的甚至超过500条.

精简指令集计算机(RISC)

采用复杂指令系统的计算机有着较强的处理高级语言的能力.这对提高计算机的性能是有益的.当计算机的设计沿着这条道路发展时.有些人没有随波逐流.他们回过头去看一看过去走过的道路,开始怀疑这种传统的做法:IBM公司没在纽约Yorktown的JhomasI.Wason研究中心于1975年组织力量研究指令系统的合理性问题.因为当时已感到,日趋庞杂的指令系统不但不易实现.而且还可能降低系统性能.1979年以帕特逊教授为首的一批科学家也开始在美国加册大学伯克莱分校开展这一研究.结果表明,CISC存在许多缺点.首先.在这种计算机中.各种指令的使用率相差悬殊:一个典型程序的运算过程所使用的80%指令.只占一个处理器指令系统的20%.事实上最频繁使用的指令是取、存和加这些最简单的指令.这样-来,长期致力于复杂指令系统的设计,实际上是在设计一种难得在实践中用得上的指令系统的处理器.同时.复杂的指令系统必然带来结构的复杂性.这不但增加了设计的时间与成本还容易造成设计失误.此外.尽管VLSI技术现在已达到很高的水平,但也很难把CISC的全部硬件做在一个芯片上,这也妨碍单片计算机的发展.在CISC中,许多复杂指令需要极复杂的操作,这类指令多数是某种高级语言的直接翻版,因而通用性差.由于采用二级的微码执行方式,它也降低那些被频繁调用的简单指令系统的运行速度.因而.针对CISC的这些弊病.帕特逊等人提出了精简指令的设想即指令系统应当只包含那些使用频率很高的少量指令.并提供一些必要的指令以支持操作系统和高级语言.按照这个原则发展而成的计算机被称为精简指令集计算机(Reduced Instruction Set Computer-RISC)结构.简称RISC.

CISC与RISC的区别 

我们经常谈论有关"PC"与"Macintosh"的话题,但是又有多少人知道以Intel公司X86为核心的PC系列正是基于CISC体系结构,而 Apple公司的Macintosh则是基于RISC体系结构,CISC与RISC到底有何区别?
从硬件角度来看CISC处理的是不等长指令集,它必须对不等长指令进行分割,因此在执行单一指令的时候需要进行较多的处理工作。而RISC执行的是等长精简指令集,CPU在执行指令的时候速度较快且性能稳定。因此在并行处理方面RISC明显优于CISC,RISC可同时执行多条指令,它可将一条指令分割成若干个进程或线程,交由多个处理器同时执行。由于RISC执行的是精简指令集,所以它的制造工艺简单且成本低廉。
从软件角度来看,CISC运行的则是我们所熟识的DOS、Windows操作系统。而且它拥有大量的应用程序。因为全世界有65%以上的软件厂商都是为基于CISC体系结构的PC及其兼容机服务的,像赫赫有名的Microsoft就是其中的一家。而RISC在此方面却显得有些势单力薄。虽然在RISC上也可运行DOS、Windows,但是需要一个翻译过程,所以运行速度要慢许多。

目前CISC与RISC正在逐步走向融合,Pentium Pro、Nx586、K5就是一个最明显的例子,它们的内核都是基于RISC体系结构的。他们接受CISC指令后将其分解分类成RISC指令以便在遇一时间内能够执行多条指令。由此可见,下一代的CPU将融合CISC与RISC两种技术,从软件与硬件方面看二者会取长补短。

流水线技术

流水线技术是一种将每条指令分解为多步,并让各步操作重叠,从而实现几条指令并行处理的技术。
流水线(pipeline)技术是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。流水线的工作方式就象工业生产上的装配流水线。在CPU中由5—6个不同功能的电路单元组成一条指令处理流水线,然后将一条X86指令分成5—6步后再由这些电路单元分别执行,这样就能实现在一个CPU时钟周期完成一条指令,因此提高CPU的运算速度。经典奔腾每条整数流水线都分为四级流水,即指令预取、译码、执行、写回结果,浮点流水又分为八级流水。
流水线技术通过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一。
ARM7处理器核使用了典型三级流水线的冯·诺伊曼结构,ARM9系列则采用了基于五级流水线的哈佛结构。通过增加流水线级数简化了流水线各级的逻辑,进一步提高了处理器的性能。ARM7的三级流水线在执行单元完成了大量的工作,包括与操作数相关的寄存器和存储器读写操作、ALU操作以及相关器件之间的数据传输。执行单元的工作往往占用多个时钟周期,从而成为系统性能的瓶颈。ARM9采用了更为高效的五级流水线设计,增加了2个功能部件分别访问存储器并写回结果,且将读寄存器的操作转移到译码部件上,使流水线各部件在功能上更平衡;同时其哈佛架构避免了数据访问和取指的总线冲突。
ARM7流水线技术

ARM7系列处理器中每条指令分取指、译码、执行三个阶段,分别在不同的功能部件上依次独立完成。取指部件完成从存储器装载一条指令,通过译码部件产生下一周期数据路径需要的控制信号,完成寄存器的解码,再送到执行单元完成寄存器的读取、ALU运算及运算结果的写回,需要访问存储器的指令完成存储器的访问。流水线上虽然一条指令仍需3个时钟周期来完成,但通过多个部件并行,使得处理器的吞吐率约为每个周期一条指令,提高了流式指令的处理速度,从而可达到O.9 MIPS/MHz的指令执行速度。在三级流水线下,通过R15访问PC(程序计数器)时会出现取指位置和执行位置不同的现象。这须结合流水线的执行情况考虑,取指部件根据PC取指,取指完成后PC+4送到PC,并把取到的指令传递给译码部件,然后取指部件根据新的PC取指。因为每条指令4字节,故PC值等于当前程序执行位置+8。
ARM9流水线技术

ARM9系列处理器的流水线分为取指、译码、执行、访存、回写。取指部件完成从指令存储器取指;译码部件读取寄存器操作数,与三级流水线中不占有数据路径区别很大;执行部件产生ALU运算结果或产生存储器地址(对于存储器访问指令来讲);访存部件访问数据存储器;回写部件完成执行结果写回寄存器。把三级流水线中的执行单元进一步细化,减少了在每个时钟周期内必须完成的工作量,进而允许使用较高的时钟频率,且具有分开的指令和数据存储器,减少了冲突的发生,每条指令的平均周期数明显减少。流水线技术提高了处理器的并行性,与串行CPU相比大大提高了处理器性能。通过调节指令序列的方法又能够有效地避免流水线冲突的发生,从而提高了流水线的执行效率。
流水线深度(级数)增加所带来的影响

ARM7 采用 3 级流水线, ARM9 采用 5 线流水线, ARM10 采用 6 级流水线, 但是随着流水线深度的增加,指令的吞吐量提高了,每一段的工作量被消减了,使得处理器可以工作在更高的频率,同时也改善了性能,但系统延时 (latency) 也增加了,这是因为在内核执行一条指令前,需要更多的周期来填充流水线。并且,时钟频率的增加,指令执行周期也相应缩减了,这就要求减小指令执行周期的时间,也就对硬件设计带来了更大的要求。所以,流水线深度并不是越深越好。
流水线执行特点
ARM 流水线的一条指令只有在完全通过 ” 执行 ” 阶段才被处理 。这句话很重要,也就是说,当处理器开始取第四条指令时,第一条指令才完成执行。我们如果不考虑流水线的设计,只看它的原理,其实是很简单的,他的复杂之处在于发生流水线冒险时,如何保证其工作得仍然很好。流水线冒险一般分为控制冒险和数据冒险,而数据冒险一般可分为阻塞 ( 即下一条指令依赖于前一条指令的结果 ) 、分支和跳转、异常(异常和中断)。由于 ARM 是硬件 flush 流水设计的,当发生冒险时,会暂停取指,然后清流水, (MIPS 解决冒险通常依赖于编译器,比如插入一条 NOP 指令及重新排列指令序列 ) 。

存储器层次结构

存储技术

随机访问存储器

随机访问存储器分为两类:静态和动态
1、静态RAM
  静态RAM 的基本存储电路为触发器,每个触发器存放一位二进制信息,由若干个触发器组成一个存储单元,再由若干存储单元组成存储器矩阵,加上地址译码器和读/写控制电路就组成静态RAM。但由于静态RAM 是通过有源电路来保持存储器中的数据,因此,要消耗较多功率,价格也较高。
2、动态RAM
每一个比特的数据都只需一个电容跟一个晶体管来处理,相比之下在SRAM上一个比特通常需要六个晶体管。正因这缘故,DRAM拥有非常高的密度,单位体积的容量较高因此成本较低。但相反的,DRAM也有访问速度较慢,耗电量较大的缺点。
3、传统的DRAM
 采用二位阵列组织

磁盘存储

1、磁盘构造
盘片
表面:每个盘片有两个表面
主轴:盘片中央,可旋转
旋转速率:通常5400~15000/min
磁道:同心圆
扇区:每个磁道被划分为一组扇区
数据位:每个扇区包含相等数量的~,通常为512字节
间隙:存储用来标识扇区的格式化位
磁盘驱动器-磁盘-旋转磁盘
柱面:所有盘片表面上到主轴中心的距离相等的磁道的集合
2.磁盘容量
记录密度:(位/英寸)磁道一英寸的段中可以放入的位数
磁道密度:(道/英寸)从盘片中心出发半径上一英寸的段内可以有的磁道数
面密度:(为/平方英寸)记录密度*磁道密度
磁盘容量  =  (字节数/扇区) * (平均扇区数/磁道)*(磁道数/表面)*(表面数/盘片)*(盘片数/磁盘)
3.磁盘操作
访问时间=寻道时间+旋转时间+传送时间
旋转时间:最大旋转延迟=(1/旋转速率)*(60sec*1000ms/sec)
平均旋转延迟=(1/2) * 最大旋转延迟
传送时间:平均传送时间=(1/旋转速率)*(60sec*1000ms/sec)*(1/平均扇区数/磁道)
4、访问磁盘
CPU使用一种称为存储器映射I/O的技术来向I/O设备发出命令。在使用存储器映射I/O的系统中,地址空间中有一块地址是为与I/O设备通信保持的,这样的地址称为一个I/O端口。
CPU通过将命令、逻辑块号和目的存储器地址写到与磁盘相关联的存储器映射地址,发起一个磁盘读。
CPU执行对地址的存储命令,发起磁盘读:
第一条指令时发送一个命令字;第二条指令指明应该读的逻辑块号;第三条指令指明应该存储磁盘扇区内内容的主存地址。
直接存储器访问:设备可以自己执行读或者写总线事务,而不需要CPU干涉的过程。这种数据传送称为DMA传送
基本思想:中断会发信号到CPU芯片的一个外部引脚上。这会导致CPU暂停它当前正在做的工作,跳转到一个操作系统例程。这个程序会记录下I/O已经完成,然后将控制返回到CPU被中断的地方.

局部性

1、局部性原理: CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
2、三种不同类型的局部性:时间局部性(Temporal Locality):如果一个信息项正在被访问,那么在近期它很可能还会被再次访问。程序循环、堆栈等是产生时间局部性的原因。空间局部性(Spatial Locality):在最近的将来将用到的信息很可能与现在正在使用的信息在空间地址上是临近的。顺序局部性(Order Locality):在典型程序中,除转移类指令外,大部分指令是顺序进行的。顺序执行和非顺序执行的比例大致是5:1。此外,对大型数组访问也是顺序的。指令的顺序执行、数组的连续存放等是产生顺序局部性的原因
3、取指令的局部性
循环体里的指令是按照连续的存储器顺序执行的,因此循环有良好的空间局部性,因为循环体会被执行多次,所以它也有良好的时间局部性。 代码区别于程序数据的一个重要属性时在运行时是不能被修改的。

存储器层次结构

 

1、缓存命中
若需要访问k+1层里的数据块d,如果d已经缓存在第k层,则称缓存命中。这样从第k层取块d要比k+1层更块。
2、缓存不命中
若d不在第k层,则是缓存不命中,此时将k+1层存储中取出块d,放入k层。可能需要替换掉k层中已有的块。替换策略是:随机,最近最少使用等。
3、缓存的管理
需要有个东西对缓存进行管理,比如怎么进行块的划分,各层次间怎么传送块,判断是否命中,不命中该如何处理,写回数据的时候该如何处理。都是需要考虑的问题,可用硬件管理如cache,也可用软件管理如虚拟内存。

虚拟存储器

1. 什么是虚拟存储器

当代计算机系统的主存主要由半导体存储器组成,由于工艺和成本的原因,主存的容量受到限制。然而,计算机系统软件和应用软件的功能不断增强,程序规模迅速扩大,要求主存的容量越大越好,这就产生了矛盾。为了给大的程序提供方便,使它们摆脱主存容量的限制,可以由操作系统把主存和辅存这两级存储系统管理起来,实现自动覆盖。也就是说,一个大作业在执行时,其一部分地址空间在主存,另一部分在辅存,当所访问的信息不在主存时,则由操作系统而不是程序员来安排I/O指令,把信息从辅存调入主存。从效果上来看,好像为用户提供了一个存储容量比实际主存大得多的存储器,用户无需考虑所编程序在
主存中是否放得下或放在什么位置等问题。我们称这种存储器为虚拟存储器。虚拟存储器只是一个容量非常大的存储器的逻辑模型,不是任何实际的物理存储器。它借助于磁盘等辅助存储器来扩大主存容量,使之为更大或更多的程序所使用。虚拟存储器指的是主存-外存层次,它以透明的方式为用户提供了一个比实际主存空间大得多的程序地址空间。物理地址是实际的主存单元地址,由CPU地址引脚送出,是用于访问主存的。设CPU地址总线的宽度为m位,则物理地址空间的大小就是2m。
虚拟地址是用户编程时使用的地址,由编译程序生成,是程序的逻辑地址,其地址空间的大小受到辅助存储器容量的限制。显然,虚拟地址要比实际地址大得多。程序的逻辑地址空间称为虚拟地址空间。程序运行时,CPU以虚拟地址来访问主存,由辅助硬件找出虚拟地址和实际地址之间的对应关系,并判断这个虚拟地址指示的存储单元内容是否已装入主存。如果已在主存中,则通过地址变换,CPU可直接访问主存的实际单元;如果不在主存中,则把包含这个字的一个存储块调入主存后再由CPU访问。如果主存已
满,则由替换算法从主存中将暂不运行的一块调回外存,再从外存调入新的一块到主存。
从原理角度看,虚拟存储器和Cache-主存层次有不少相同之处。事实上,前面提到的各种控制方法是先应用于虚拟存储器中,后来才发展到Cache-主存层次中去的。不过,Cache-主存层次的控制完全由硬件实现,所以对各类程序员是透明的;而虚拟存储器的控制是软硬件相结合的,对于设计存储管理软件的系统程序员来说是不透明的,对于应用程序员来说是透明的。
主存-外存层次和Cache-主存层次所使用的地址变换及映射方法和替换策略,从原理上看是相同的,都基于程序局部性原理。它们遵循的原则是:
(1)把程序中最近常用的部分驻留在高速的存储器中;
(2)一旦这部分变得不常用了,把它们送回到低速的存储器中;
(3)这种换入换出是由硬件或操作系统完成的,对用户是透明的;
(4)力图使存储系统的性能接近高速存储器,价格接近低速存储器。
两种存储系统的主要区别在于:在虚拟存储器中未命中的性能损失,要远大于Cache系统中未命中的损失。
2. 主存-外存层次的基本信息传送单位
主存-外存层次的基本信息传送单位可采用页、段和段页3种不同的方案。根据地址格式的不同,虚拟存储器可分成页式虚拟存储器、段式虚拟存储器和段页式虚拟存储器3种。
页式和段式存储结构采用二维地址格式,它们把整个存储器空间(包括主存、辅存和虚拟存储器)分成若干个页或段,每个页或段又包含若干个存储单元。段页式存储结构采用三维地址格式,它把整个存储器分成若干个段,每段又分成若干页,每页包含若干个存储单元。
页式管理系统以定长的页为基本信息传送单位,主存的物理空间也被分成等长的页,每一页等长的区域称为页面,页面在主存中的位置是固定的。因此,页面的起始地址和结束地址都是固定的,这给页表的制作带来很大的方便。新页调入主存也很容易,只要有空闲的页面就可容纳。
把主存按段分配的存储管理方式称为段式管理。段是利用程序的模块化性质,按照程序的逻辑结构划分成多个相对独立的部分,如过程、数据表、阵列等。段作为独立的逻辑单位可以被其他程序段调用,这样就形成了段间连接,产生规模较大的程序。因此,把段作为基本信息单位在主存-外存之间传送和定位是比较合理的。一般用段表来指明各段在主存中的位置,每段都有它的名称(用户名称或数据结构名称或段号)、段起点、段长等。段表也是主存的一个可再定位的段。段式管理的优点是段的分界与程序的自然分界相对应,段的逻辑独立性使它易于编译、管理、修改和保护,也便于多道程序共享。某些类型的段(例如堆栈、队列)具有动态可变长度,允许自由调度以便有效利用主存空间。但是,正因为段的长度各不相同,段的起始地址和结束地址不定,这给主存空间分配带来麻烦,而且容易在段间留下许多碎片不好利用,造成浪费,这种浪费比页式管理系统要大。页式存储管理和段式存储管理各有优缺点,段页式存储管理则是结合两者优点的一种方案。程序按模块分段,段内再分页,进入主存仍以页为基本信息传送单位,用段表和页表(每段一个页表)进行两级定位管理。


详情请参看:上海交通大学-网络教育-精品资源共享课-计算机组成与系统结构

http://share.onlinesjtu.com/mod/tab/view.php?id=208

  • 21
    点赞
  • 187
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值