考点一:计算机基本组成
在一台计算机中,主要有6种不见,分别是控制器、运算器、内存储器、外存储器、输入输出设备,他们之间的合作关系如图所示:
其中控制器和运算器共同构成中央处理器(CPU)。CPU主要通过总线和其他设备进行联系,另外在嵌入式系统设计中,外部设备也常常直接连接到CPU的外部I/O脚的中断脚上。
(1)运算器
运算器的主要功能是在控制器的控制下完成各种算术运算、逻辑运算和其他操作。
运算器主要包括:算术逻辑单元(ALC)、加法器/累加器、数据缓冲寄存器、程序状态寄存器四个子部分构成。
程序状态寄存器用来存放两类信息。一是体现当前指令执行结果的各种状态信息,如有无进位(CF位)、有无溢出(OF位)、结果正负(SF位)、结果是否为零(ZF)位和标志位(PF位)等。二是控制信息,如允许中断(IF位)和眼踪标志(TF位)等。
(2)控制器
控制器是有程序计数器(PC)、指令寄存器、指令译码器、时序产生器和操作控制器组成,完成整个计算机系统的操作。
程序计数器(PC)是专用奇存器,具有存储和计数两种功能,又称为“指令计数器”。在程序开始执行前将程序的起始地址送入PC,在程序加载到内存时依此地址为基础,因此PC的初始内容为程序第一条指令的地址。执行指令时CPU将自动修改PC的内容,以便使其保持的总是将要执行的下一条指令的地址。由于大多数指令都是按顺序执行因此修改的过程通常只是简单的将PC加1。当遇到转移指令时后继指令的地址与前指令的地址加上一个向前或向后转移的位偏移量得到,或则根据转移指令给出的直接转移的地址得到。
指令寄存器存储当前正在被CPU执行的指令。
指令译码器将指令中的操作码解码,告诉CPU该做什么。可以说指令寄存器的输出是指令译码器的输入。
时序产生器用以产生各种时序信号,以保证计算机能够准确、迅速、有条不紊地工作。
(3)内存储器
又称内存或主存:存储现场操作的信息与中间结果,包括机器指令和数据。
(4)外存储器
又称为外存或辅助存储器,在存储需要长期保存的各种信息。
(5)输入设备(Input Devices)
输入设备用以接收界向计算机输入的信息
(6)输出设备(Output devices)
输出设备用以将计算机中的信息向外界输送。
考点二:流水线与并行处理
流水线技术是通过并行硬件来提高系统性能的常用方法,它其实是一种任务分解的技术,把一件任务分解为若干顺序执行的子任务,不同的子任务由不同的执行机构来负责执行,而这些执行机构可以同时并行工作。
在流水线这个知识点,主要考查流水线的概念、性能,以及有关参数的计算
(1)流水线执行计算
假定有某种类型的任务,共可分成n个子任务,每个子任务需要时间t,则完成该任务所需的时间即为nXt。若以传统的方式,则完成k个任务所需的时间是knt;而使用流水线技术执行,则花费的时间是(n+k-1)×t。也就是说,除了第一个任务需要完整的时间外,其他都通过并行,节省下了大量的时间,只需一个子任务的单位时间就够了另外要注意的是,如果每个子任务所需的时间不同,则其速度取决于其执行顺序中最慢的那个(也就是流水线周期值等于最慢的那个指令周期),要根据实际情况进行调整。
例如:若指令流水线把一条指令分为取指、分析和执行三部分,且三部分的时间分别是取指2ns,分析2ns,执行1ns。那么,最长的是2ns,因此100条指令全部执行完毕需要的时间就是:(2+2+1)+(100-1),×2=203ns。
另外,还应该掌握几个关键的术语:流水线的吞吐率、加速比。流水线的吞吐率( Though Put Rate,TP)是指在单位时间内流水线所完成的任务数量或输出的结果数量。
完成同样一批任务,不使用流水线所用的时间与使用流水线所用的时间之比称为流水线的加速比( Speed-up Ratio)
例如,在上述例子中,203ns的时间内完成了100条指令,则从指令的角度来看,该流水线的吞吐率为:(100×10°)/203-=4.93×105s(1s=10°ns),加速比为500/203=2.46(如果不采用流水线,则执行100条指令需要500s)
(2)影响流水线的主要因素
流水线的关键在于“重叠执行”,因此如果这个条件不能够满足,流水线就会被破坏。这种破坏主要来自3种情况。
①转移指令
因为前面的转移指令还没有完成,流水线无法确定下一条指令的地址,因此也就无法向流水线中添加这条指令。从这里的分析可以看出,无条件跳转指令是不会影响流水线的。
①共享资源访间的冲突
它也就是后一条指令需要使用的数据,与前一条指令发生的冲突,或者相邻的指令线的使用了相同的寄存器,这也会使流水线失败。为了避免沖突,就需要把相互有关的指令进行阻塞,这样就会引起流水线效率的下降。一般地,指令流水线级数越多,越容易导当然,也可以在编译系统上进行设置,当发现相邻的语句存在资源共享冲突的时候,致数据相关,阻塞流水线。
在两者之间插入其他语句,将两条指令进入流水线的时间拉开,以避免错误。
③响应中断
当有中断请求时,流水线也会停止。流水线响应中断有两种方式,一种是立即停止
现有的流水线,称为精确断点法,这种方法能够立即响应中断,缩短了中断响应时间,但是增加了中央处理器的硬件复杂度。
还有一种是在中断时,在流水线内的指令继续执行,停止流水线的入回,当所有流水线内的指令全部执行后,再执行中断处理程序。这种方式中断响应时间较长,这种方式称为不精确断点法,优点是实现控制简单。
【考点3】数据码制的表示
本节主要掌握原码、反码、补码和移码的概念,以及各自的用途和优点个
(1)原码
将最高位用作符号位(0表示正数,1表示负数),其余各位代表数值本身的绝对值的表示形式。这种方式是最容易理解的。例如,假设用8位表示1个数,则+11的原码用二进制表示是00001011,-11的原码用二进制表示是100,1011.
直接使用原码在计算时会有麻烦。例如,在十进制中1+(-1)=0。如果直接使用二进制原码来执行“1+(-1)”的操作,则表达式为:00000001+100000001=10000010.
这样计算的结果是-2,也就是说,使用原码直接参与计算可能会出现错误的结果。所以,原码的符号位不能直接参与计算,必须和其他位分开,这样会增加硬件的开销和复杂性。
(2)反码
正数的反码与原码相同。负数的反码符号位为1,其余各位为该数绝对值的原码按位取反。例如,-11的反码为110100片关
同样,对于“1+(-1)”加法,使用反码的结果是:00000001+11111110=11111111
这样的结果是负0,而在人们普遍的观念中,0是不分正负的。反码的符号位可以直接参与计算,而且减法也可以转换为加法计算.
(3)补码
正数的补码与原码相同。负数的补码是该数的反码加1,这个加1就是“补”。例如11的补码为11110100+1=11110101。
对于“1+(-1)”的加法,是这样的:00000001+11111111=00000000这说明,直接使用补码进行计算的结果是正确的。
对一个补码表示的数,要计算其原码,只要对它再次求补即可。由于补码能使符号位与有效值部分一起参加运算,从而简化了运算规则,同时它也使减法运算转换为加法运算,进一步简化计算机中运算器的电路,这使得在大部分计算机系统中,数据都使用补码表示。
(4)移码
移码又称为增码,移码的符号表示和补码相反,1表示正数,0表示负数。也就是说,移码是在补码的基础上把首位取反得到的,这样使得移码非常适合于阶码的运算,所以移码常用于表示阶码。
通过四种码制的学习,我们已经学会了它们相互之间的转换。
【考点4】主存储器
3.存储体系和寻址方式
在存储体系和寻址方式方面,涉及的考点有主存储器(重点)、高速缓存(重点)、寻址方式面
(1)主存储器的种类。
①RAM:随机存储器,可读写,断电后数据无法保存,只能暂存数据。
②SRAM:静态随机存储器,在不断电时信息能够一直保持。
③DRAM:动态随机存储器,需要定时刷新以维持信息不丢失。
④ROM:只读存储器,出厂前用掩膜技术写入,常用于存放BIOS和微程序控制。
⑤PROM:可编程ROM,只能够一次写入,需用特殊电子设备进行写入多次。
⑥ EPROM:可擦除的PROM,用紫外线照射15~20分钟可擦去所有信息,可写入多次。
⑦E2PROM:电可擦除 EPROM,可以写入,但速度慢。
闪速存储器
抓住几个关键英文字母。A,Access,说明读写都行,O,Only,说明只读,P,Programmable,说明可以通过特殊电子设备写入;E,Erasable,说明可以擦写;E,第二个E指电子。
(2)主存储器的组成
实际的存储器总是由一片或多片存储器配以控制电路构成的。其容量为W×B,W是存储单元(word,即字)的数量,B表示每个word由多少bit(位)组成。如果某芯片规格为w×b,则组成WXB的存储器需要用(W/w)×(B/b)个芯片。
(3)主存储器的地址编码。
主存储器(内存)采用的是随机存取方式,需对每个数据块进行编码,而在主存储器中,数据块是以word为单位来标识的,即每个字一个地址,通常采用的是十六进制表示
例如,按字节编址,地址从A4000H~ CBFFFH,则表示有( CBFFF--A4000+1)个字节,即28000H个字节,也就是163840个字节,等于160KB。
要注意的是,编址的基础可以是字节,也可以是字(字是由1个或多个字节组成如,上述内存的容量为160KB,则需要18位地址来表示(2^27=131072,2^18=262144)
在内存这个知识点的另外一个问题,就是求存储芯片的组成问题。实际的存储器总是由一片或多片存储器配以控制电路构成的。设其容量为W×B,W是存储单元的数量B表示每个单元由多少位组成。如果某一芯片规格为w×b,则组成W×B的存储器需要用(Ww)×(B/b)块芯片。例如,上述例子中的存储器容量为160KB,若用存储容量为32Kx8bit的存储芯片构成,因为1B=8b(一个字节由8位组成),则至少需要(160K32K)×(1B8b)=5块。
【考点5】高速缓存
Cache的功能是提高CPU数据输入输出的速率,突破所谓的“冯诺依曼瓶颈”,即CpU与存储系筑间数据传送带宽限制。高速存储器能以极高的速率进行数据的访问,但因其价格高昂,如果计算机的内存完全由这种高速存储器组成,则会大大增加计算机的成本。通常在CPU和内存之间设置小容量的高速存储器 Cache。 Cache容量小但速度快,内存速度较低但容量大,通过优化调度算法,系统的性能会大大改善,其存储系统容量与内存相当而访问速度近似 Cache。
(1) Cache原理、命中率、失效率
使用Cahe改善系统性能的主要依据是程序的局部性原理通俗地说,就是一段时间内,执行的语句常集中于某个局部。而 Cache正是通过将访问集中的内容放在速度更快的 Cache上来提高性能的。引入 Cache后,CPU在需要数据时,先找 Cache,没找到再到内存中找。
如果 Cache的访问命中率为h(通常1-h就是 Cache的失效率),而 Cache的访问周期时间是t1,主存储器的访问周期时间是t2,则整个系统的平均访存时间就应该是t3=hXtl+(1-h)×t2
从公式可以看出,系统的平均访存时间与命中率有很密切的关系。灵活地应用这个公式,可以计算出所有情况下的平均访存时间。
例如:假设某流水线计算机主存的读/写时间为10m,有一个指令和数据合一的Cache,已知该 Cache的读/写时间为10ns,取指令的命中率为98%,取数据的命中率为95%。在执行某类程序时,约有15指令需要存取一个操作数。假设指令流水线在任何时候都不阻塞,则设置 Cache后,每条指令的平均访存时间约为多少?其实这是应用公式的一道简单数学题:
(29%×1008+98%×1ms)15×(5%6×10o5+95%×10ns)=14.7ns
2) Cache存储器的映射机制
分配给 Cache的地址存放在一个相联存储器(CAM)中。CPU发生访存请求时会先让会先让CAM判断所要访问的字的地址是否在 Cache中,如果命中就直接使用。
这个判断的过程就是 Cache地址映射,这个速度应该尽可能快。常见的映射方法有直接映射、全相联映射和组相联映射三种。
①直接映射:是一种多对一的映射关系,但一个主存块只能够拷贝到 Cache的个特定位置上去。 Cache的行号i和主存的块号j有函数关系:i=j%m(其中m为 Cache总行数)。
例如,某 Cache容量为16KB(即可用14位表示),每行的大小为16B(即可用4位表示),则说明其可分为1024行(可用10位表示)。主存地址的最低4位为 Cache的行内地址,中间10位为 Cache行号。如果内存地址为1234E8F8H的话,那么最后4位就是1000对应十六进制数的最后一位),而中间10位,则应从E8F(111010001111)中获取,得到1010001111。
②全相联映射:将主存中一个块的地址与块的内容一起存于 Cache的行中,任一主存块能映射到 Cache中任意行(主存块的容量等于 Cache行容量)。速度更快,但控制复杂。
③组相联映射:是前两种方式的折中方案。它将 Cache中的块再分成组,然后通过直接映射方式决定组号,再通过全相联映射的方式決定 ache中的块号。
注意:在 Cache映射中,主存和 Cache存储器均分成容量相同的块。
个例如,容量为64块的 Cache采用组相联方式映射,字块大小为128个字,每4块为一组。若主存容量为4096块,且以字编址,那么主存地址应该为多少位?主存区号为多少位?这样的题目,首先根据主存块与 Cache块的容量需一致,得出内存块也是128个字,因此共有128×4096个字,即2^19(2^7×2^12)个字,因此需19位主存地址;而内存需要分为4096/64块,即26,因此主存区号需6位。
(3) Cache淘汰算法。
当Cache数据已满,并且出现未命中情况时,就要淘汰一些老的数据,更新一些新的数据,选择淘汰什么数据的方法就是淘汰算法常见的方法有三种:随机淘汰,先进先出(FIFO)淘汰(即淘汰最早调入Cache的数据),最近最少使用(LRU)淘汰法。其中平均命中率最高的是LRU算法。
(4)Cache存储器的写操作
在使用Cache时没需要保证其数据与主存一致,因此在写Cache时就需要考虑与主存间的同步问题,通常使用一下三种方法:写直达(写Cache时,同时写主存)、写回(写Cache时不马上写主存,而是等起淘汰时回写)、标记法。