博主暑期整理了一些计算机组成原理相关的问题,以作保研面试之用。整理过程中也借鉴了一些网上的其他资料,其中绝大部分已不可考,如有侵权,通知删除。
因为计组在面试中被问得不多,所以整理得比较少。只有2次老师问到了冯诺依曼体系结构。
存储程”的思想奠定了现代计算机的基本结构,以此概念为基础的各类计算机通称为冯·诺依曼机,其特点如下:
“存储程序”的概念是指将指令以代码的形式事先输入计算机的主存储器,然后按其在存储器中的首地址执行程序的第一条指令,以后就按该程序的规定顺序执行其他指令,直至程序执行结束。
计算机的工作过程分为以下三个步骤:
翻译的方式有两种,一个是编译,一个是解释。
编译型语言写的程序在执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,如果源程序不变以后要运行的话就不用重新翻译。
解释则不同,解释性语言的程序不需要编译,在运行程序的时候才翻译,翻译一句执行一句,不生成目标程序,这样解释性语言每执行一次就要翻译一次,效率比较低。
.java文件->编译->.class文件,编译成.class字节码,.class需要jvm解释,然后解释执行。Java很特殊,Java程序需要编译但是没有直接编译成机器语言,即二进制语言,而是编译成字节码(.class)再用解释方式执行。java程序编译以后的class属于中间代码,并不是可执行程序exe,不是二进制文件,所以在执行的时候需要一个中介来解释中间代码,这就是所谓的java虚拟机(JVM)。
C语言编译过程分成四个步骤:
1, 由.c文件到.i文件,这个过程叫预处理,将#include包含的头文件直接拷贝到hello.c当中;将#defifine定义的宏进行替换,同时将代码中没用的注释部分删除等。
2, 由.i文件到.s文件,这个过程叫编译
3, 由.s文件到.o文件,这个过程叫汇编
4, 由.o文件到可执行文件,这个过程叫链接,将翻译成的二进制与需要用到库绑定在一块
程序中第一条指令的地址置于PC 中,根据PC 取出第一条指令,经过译码、执行步骤等,控制计算机各功能部件协同运行,完成这条指令的功能,并计算下一条指令的地址。用新得到的指令地址继续读出第二条指令并执行,直到程序结束为止。下面以取数指令(即将指令地址码指示的存储单元中的操作数取出后送至运算器的ACC 中)为例进行说明,其信息流程如下:
(1)机器字长
机器字长是指计算机进行一次整数运算(即定点整数运算)所能处理的二进制数据的位数。
(2)数据通路带宽
数据通路带宽是指数据总线一次所能并行传送信息的位数。
(3)主存容量
(4)运算速度
①吞吐量和响应时间
吞吐量:指系统在单位时间内处理请求的数量。
响应时间:指从用户向计算机发送一个请求,到系统对该请求做出响应并获得所需结果的等待时间。
②主频和CPU 时钟周期。
CPU 时钟周期:通常为节拍脉冲或T周期,即主频的倒数,它是CPU 中最小的时间单位,每个动作至少需要1 个时钟周期。
主频:机器内部时钟的频率。
为了解决存储系统大容量、高速度和低成本3 个相互制约的矛盾,在计算机系统中,通常采用多级存储器结构,在图中由上至下,位价越来越低,速度越来越慢,容量越来越大, CPU 访问的频度也越来越低。
实际上,存储系统层次结构主要体现在"Cache-主存”层次和“主存-辅存”层次。前者主要解决CPU 和主存速度不匹配的问题,后者主要解决存储系统的容量问题。
主存储器由DRAM 实现,靠处理器的那一层(Cache) 则由SRAM 实现,它们都属于易失性存储器,只要电源被切断,原来保存的信息便会丢失。
(1)SRAM的工作原理
(2)DRAM的工作原理
(3)只读存储器ROM的特点
ROM 和RAM 都是支持随机存取的存储器,其中SRAM 和DRAM 均为易失性半导体存储器。而ROM 中一旦有了信息,就不能轻易改变,即使掉电也不会丢失,它在计算机系统中是只供读出的存储器。
ROM 器件有两个显著的优点:
Cache存储器:电脑中为高速缓冲存储器,是位于CPU和主存储器DRAM之间,规模较小,但速度很高的存储器,通常由SRAM组成。
Cache的作用:是提高CPU数据输入输出的速率。Cache容量小但速度快,内存速度较低但容量大。
替换算法:当Cache产生了一次访问未命中之后,相应的数据应同时读入CPU和Cache。但是当Cache已存满数据后,新数据必须替换(淘汰)Cache中的某些旧数据。最常用的替换算法有随机算法、先进先出算法(FIFO)和近期最少使用算法(LRU)。
写操作:因为需要保证缓存在Cache中的数据与内存中的内容一致,Cache的写操作比较复杂,常用的有写直达法、写回法和标记法。
与主存的映射方式:
直接映射:主存数据块只能装入Cache中的唯一位置
全相联映射:可以把主存数据块装入Cache 中的任何位置
组相联映射:将Cache分为若干组,一个数据块可以装入一组内的任何一个位置
概念:虚拟存储器是指具有请求调入和置换功能,能从逻辑上对内存容量加以扩存的一种存储器系统
虚拟页式存储器:页式管理:是把虚拟存储空间和实际空间等分成固定大小的页,各虚拟页可装入主存中的不同实际页面位置.页式存储中,处理机逻辑地址由虚页号和页内地址两部分组成,实际地址也分为页号和页内地址两部分,由地址映射机构将虚页号转换成主存的实际页号.
页式管理用一个页表,包括页号,每页在主存中起始位置,装入位等.页表是虚拟页号与物理页号的映射表.页式管理由操作系统进行,对应用程序员的透明的.
段式虚拟存储器:段式管理: 把主存按段分配的存储管理方式.它是一种模块化的存储管理方式,每个用户程序模块可分到一个段,该程序模块只能访问分配给该模块的段所对应的主存空间.段长可以任意设定,并可放大和缩小.
系统中通过一个段表指明各段在主存中的位置.段表中包括段名(段号),段起点,装入位和段长等.段表本身也是一个段.段一般是按程序模块的.
段页式虚拟存储器:段页式管理:是上述两种方法的结合,它将存储空间按逻辑模块分成段,每段又分成若干个页,访存通过一个段表和若干个页表进行.段的长度必须是页长的整数倍,段的起点必须是某一页的起点.
TLB(快表):
在虚拟存储器中进行地址变换时,需要虚页号变换成主存中实页号的内部地址变换这一过程。
缓存时首先要到主存查页表,然后才能根据主存物理地址访问主存的存取指令或数据。因此采用虚拟存储器机制后,访存的次数增加了。为了减少访存的次数,往往将页表中最活跃的几个页表项复制到高速缓存中。这种在高速缓存中的页表项称为快表(translation look aside buffffer)
基本概念:指令取指完成后,不等该指令执行完毕即可取下一条指令。分为取指、译码、执行、访存、写回。
指令流水线特点:
影响流水线性能的因素
1)结构相关是当多条指令同一时刻争用同一资源形成冲突
解决方案:(1)暂停一个时钟周期(2)单独设置数据存储器和指令存储器
2)数据相关是指令在流水线中重叠执行时,当后继指令需要用到前面指令的执行结果时发生的.
解决方案:(2)暂停一个时钟周期(2)数据旁路:把前一条指令的ALU计算结果直接输入到下一条指令
3)控制相关是当流水线遇到分支指令和其他改变PC值的指令时引起的.
解决方案:(1)延迟转移技术。将转移指令与其前面的与转移指令无关的一条或几条指令对换位置,让成功转移总是在紧跟的指令被执行之后发生,从而使预取的指令不作废。 (2)转移预测技术。
中央处理器(CPU) 由运算器和控制器组成。其中,控制器的功能是负责协调并控制计算机各部件执行程序的指令序列,包括取指令、分析指令和执行指令;运算器的功能是对数据进行加工。
CPU 的具体功能包括:
什么是总线:
计算机各种功能部件之间传送信息的公共通信干线。
为什么需要总线:
1)简化了系统结构,便于系统设计制造。
2)大大减少了连线数目,便于布线,减小体积,提高系统的可靠性。
3)便于接口设计,所有与总线连接的设备均采用类似的接口。
4)便于系统的扩充、更新与灵活配置,易千实现系统的模块化。
5)便于设备的软件设计,所有接口的软件对不同的接口地址进行操作。
6)便于故障诊断和维修,同时也能降低成本。
总线相关概念:
1、系统总线按照传输信息的不同,分成哪几类?是单向的,还是双向的?
1)分成数据总线、地址总线以及控制总线。
2)数据总线:各个功能部件之间传送数据信息,双向传输;
3)地址总线:用来指明数据总线上,源数据或目的数据所在的主存单元的地址。单向:由CPU发出
4)控制总线:用来发送各种控制信号。对于控制总线中的单根线,是单向的,即只能由一个部件发向另一 个部件。而一组控制总线中,有输入也有输出,因此,控制总线也可以看成是双向的。
2、什么是总线宽度、总线带宽、总线复用、信号线数?
1)总线宽度:数据总线的根数,一般是8的倍数。是衡量计算机系统性能的重要指标;
2)总线带宽:即总线数据传输速率,总线上每秒能够传输的最大字节量。
3)总线复用:一条信号线上分时传送两种信号。例如数据总线和地址总线的分时复用;
4)信号线数:地址总线、数据总线和控制总线三种总线的线数之和。
1)中断向量:每个中断源都有对应的处理程序,这个处理程序称为中断服务程序,其入口地址称为中断向量。所有中断的中断服务程序入口地址构成一个表,称为中断向量表;也有的机器把中断服务程序入口的跳转指令构成一张表,称为中断向量跳转表。
2)向量地址:中断向量表或中断向量跳转表中每个表项所在的内存地址或表项的索引值,称为向量地址或中断类型号。
3)向量中断:指一种识别中断源的技术或方式。识别中断源的目的是找到中断源对应的中断服务程序的入口地址的地址,即获得向量地址。
两者的根本区别主要表现在服务时间和服务对象上不一样。
1)调用子程序过程发生的时间是已知的和固定的,即在主程序中的调用指令(CALL) 执行时发生主程序调用子程序过程,调用指令所在位置是已知的和固定的。而中断过程发生的时间一般是随机的,CPU 在执行某个主程序时收到中断源提出的中断申请,就发生中断过程,而中断申请一般由硬件电路产生,申请提出时间是随机的。也可以说,调用子程序是程序设计者事先安排的,而执行中断服务程序是由系统工作环境随机决的。
2)子程序完全为主程序服务,两者属于主从关系。主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序二者一般是无关的,不存在谁为谁服务的问题,两者是平行关系。
3)主程序调用子程序的过程完全属软件处理过程,不需要专门的硬件电路;而中断处理系统是一个软/硬件结合的系统,需要专门的硬件电路才能完成中断处理的过程。