面试常见问题——计算机组成原理(一)

面试常见问题——计算机组成原理(一)

目录:

  1. Cache和寄存器、虚拟存储器的区别
  2. 计算机组成有哪些
  3. CISC和RISC
  4. 数据寻址方式
  5. 指令流水线
  6. 中断处理流程
  7. DMA和中断的区别

1、Cache和寄存器、虚拟存储器的区别

  • 定义:
    • Cache定义:
      • 利用程序访问的局部性原理,把程序中正在使用的部分存放在一个高速的、容量较小的临时存储器中,可用SRAM实现,使CPU的访存操作大多针对Cache进行,从而大大提高程序的执行速度。
      • 引入目的:解决CPU和主存之间运算速度的差异。
    • 寄存器定义:
      • 寄存器是中央处理器内的组成部分。寄存器是有限存储容量的高速存储部件,它们可用来暂存指令、数据和位址。在控制器中,包含的寄存器有指令寄存器(IR)、程序计数器(PC)、指令译码器(ID)等。在运算器中,包含的寄存器主要有累加寄存器(ACC)、暂存寄存器、程序状态字寄存器(PSW)。 
    • 虚拟存储器定义:
      • 将主存或辅存的地址空间统一编址,从逻辑上对内存容量加以扩存。
      • 引入目的:解决主存不足的问题。
      • 依据:程序访问的局部性原理
      • 通常采用相联存储器,可按内容、按地址访问。
      • 实现技术:
        • 请求分页存储管理
        • 请求分段存储管理
        • 请求段页式存储管理
  • 存储器分层体系结构中,存储器速度由快到慢依次为寄存器、Cache、主存、辅存。
  • 虚拟存储器和Cache的对比:
    • 相同点:
      • 都把数据划分为块,并作为基本的传输单位。
      • 都有地址的映射、替换算法、更新策略等问题。
        • Cache替换算法:
          • RAND(随机算法):随机地确定替换的Cache块
          • FIFO(先进先出):选择最早调入的存储行进行替换
          • LRU(最近最少使用):选择最近最久未被访问的存储行进行替换
          • LFU(最不经常使用):将一段时间内被访问次数最少的存储行进行替换
        • 虚拟存储器替换算法:
          • OPT(最佳页面替换算法,OPTimal replacement):选择以后不再使用的页面进行替换(目前无法实现)
          • FIFO(先进先出):选择最早进入内存的页面进行替换。可能出现Belady异常,即所分配的物理块数增大而缺页数也增大
          • LRU(最近最少使用):选择最近最久未使用的页面进行替换
          • CLOCK(时钟置换算法,也称为最近未用算法Not Recently Used,NRU):选择最近未使用的页面进行替换
          • 改进型CLOCK:除了使用位,增加修改位,置换顺序如下:
            • 未访问,未修改
            • 未访问,已修改
            • 已访问,未修改
            • 已访问,已修改
        • 虚拟存储器页面更新策略:
          • 固定分配局部置换
          • 可变分配局部置换
          • 可变分配全局置换
      • 都依据程序访问的局部性原理,应用快速缓存的思想,将相对活跃的数据放在相对高速的部件中。
    • 不同点:
      • 解决问题不同。Cache主要解决系统速度;虚拟存储器主要解决主存容量。
      • 实现方式不同。Cache全部由硬件实现;虚拟存储器由操作系统和硬件共同实现,是逻辑上的存储器。
      • 不命中时性能影响不同。虚拟存储器系统不命中时对系统影响性能更大。
      • 能否与CPU直接通信。Cache不命中时,主存能与CPU直接通信,同时将数据调入Cache;虚拟存储器系统不命中时,只能先由磁盘调入主存,而不能直接和CPU通信。
  • 一些定义:
    • 程序访问的局部性原理:
      • 时间局部性:程序中某条指令一旦执行,不久后该指令可能再次执行;某数据被访问过,不久后该数据可能再次被访问。因为程序存在循环。
      • 空间局部性:一旦程序访问了某个存储单元,不久后,其附近的存储单元也将被访问。因为指令通常是顺序存放,顺序执行的,数据一般也是以向量,数组,表等形式聚集地存储在一起的。
    • 虚地址(逻辑地址):用户编程允许涉及的地址
    • 实地址(物理地址):实际的主存单元
    • 虚拟存储器工作流程:
      • 由硬件对虚地址和实地址之间进行映射,并判断这个虚地址对应的存储单元内容是否已装入主存。
      • 若已在主存中,则通过地址转换,CPU可访问主存指示的实际单元。
      • 若不在主存中,则把包含这个字的一页或一段调入主存后再由CPU访问。若主存已满,则采用替换算法置换主存中的一段或一页。
    • Cache工作流程:
      • 当Cache发出读请求时,若访存地址在Cache中命中,就将此地址转换成Cache地址,直接对Cache进行读操作,不访问主存。
      • 若Cache不命中,则需要访问主存,并把此字所在的块一次性地从主存调入Cache。若Cache已满,则采用替换算法置换Cache块中原来某块的信息。

2、计算机组成有哪些

  • 根据冯诺依曼体系中存储程序的思想:
    • 计算机硬件系统由运算器、存储器、控制器、输入设备和输出设备组成。
    • 指令和数据以二进制代码表示,存储在存储器中,可以按地址访问。
    • 指令由操作码、地址码组成,操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置。
    • 指令在存储器中按顺序存放。
  • 运算器:接收从控制器传来的命令,对数据进行加工处理,完成算术运算和逻辑运算,核心是算术逻辑单元(ALU)
    • 算术逻辑单元(ALU):算术 / 逻辑运算
    • 累加寄存器(ACC):用于暂时存放ALU运算的结果,可作为加法运算的一个输入
    • 暂存寄存器:暂存从主存读来的数据
    • 乘商寄存器(MQ)
    • 操作数寄存器(X)
    • 变址寄存器(IX)
    • 基址寄存器(BR)
    • 程序状态字寄存器(PSW):保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息。PSW中的位参与并决定微操作的形成
      • 溢出标志(OF)
      • 符号标志(SF)
      • 零标志(ZF)
      • 进位标志(CF)
    • 移位器:移位计算
    • 通用寄存器组:存放操作数(包括源操作数、目的操作数、中间结果)和各种地址信息等
  • 存储器:用来存放程序和数据
    • 主存储器(内存)
      • 存储器地址寄存器(MAR):用于存放所要访问的主存单元的地址。
      • 存储器数据寄存器(MDR):用于存放向主存写入的信息或从主存读出的信息。
    • 辅存储器(外存)
  • 控制器:执行指令,控制各部件自动协调地进行工作
    • 程序计数器(PC):指出下一条指令在主存中的存放地址
    • 指令寄存器(IR):保存当前正在执行的指令
    • 指令译码器:对操作码字段进行译码,向控制器提供特殊的操作信号
    • 时序系统:产生各种时序信号,由统一时钟(CLOCK)分频得到
    • 微操作信号发生器:根据IR中的指令,PSW的状态信息及时序信号,产生控制整个计算机各部件要用到的控制信号。
  • 输入设备:将程序和数据以机器所能识别和接受的信息形式输入到计算机
  • 输出设备:将计算机的处理结果以某些形式输出

3、CISC和RISC

  • CISC:复杂指令系统计算机,指令数目多,字长不固定,寻址方式多,寄存器数量少,一般为微程序控制。
  • RISC:精简指令系统计算机,指令数目少,字长固定,寻址方式少,寄存器数量多,一般为组合逻辑控制。

4、数据寻址方式

  • 数据寻址:格式为:操作码 + 寻址特征 + 形式地址A
  • 常见的数据寻址方式:
    • 隐含寻址:不显式的给出第二操作数的地址,规定累加器作为第二操作数地址
    • 立即(数)寻址:地址字段存放操作数本身,数据以补码形式存放
    • 直接寻址:形式地址A即为操作数的有效地址EA
    • 间接寻址:形式地址是操作数有效地址所在的存储单元的地址
    • 寄存器寻址:在指令字中直接给出操作数所在的寄存器编号,操作数在寄存器中
    • 寄存器间接寻址:在指令字中给出操作数所在的寄存器编号,寄存器中给出的是操作数所在主存单元的地址
    • 相对寻址:程序计数器PC的内容加上指令格式中的形式地址而形成操作数的有效地址,广泛应用于转移指令
    • 基址寻址:基址寄存器BR的内容加上指令格式中的形式地址而形成操作数的有效地址,利于多道程序设计,可用于编制浮动程序
    • 变址寻址:变址寄存器IX的内容加上指令格式中的形式地址而形成操作数的有效地址,适用于编制循环程序,处理数组问题
      • 基址寄存器的内容由操作系统确定,值不可变,指令字的形式地址可变
      • 变址寄存器的内容由用户确定,值可变,指令字的形式地址不可变
    • 堆栈寻址:从规定的堆栈中取出操作数

5、指令流水线

  • 定义:将指令的执行过程分为多个阶段,每个阶段与其他阶段并行执行。
  • 指令的执行阶段:
    • 取指(Instruction Fetch,IF):根据PC内容访问主存,取出一条指令送到IR中。
    • 译码(Instruction Decode,ID):指令译码器按照预定的指令格式,对取回的指令进行拆分和解释,识别区分出不同的指令类别以及各种获取操作数的方法。
    • 执行(Execute,EX):根据操作码字段,完成指令规定的功能。
    • 访存(Memory,MEM):根据指令地址码,得到操作数在主存中的地址,并从主存中读取该操作数用于运算。
    • 写回(Writeback,WB):把执行指令阶段的运行结果数据写回到某种存储形式。
  • 影响流水线的因素:
    • 结构相关(资源冲突):多条指令在同一时刻争用同一资源而形成的冲突。
      • 解决方法:
        • 后面的指令暂停一个时钟周期
        • 单独设置数据存储器和指令存储器
    • 数据相关(数据冲突):必须等前一条指令执行完才能执行后一条指令的情况。
      • 解决方法:
        • 数据旁路技术:设置相关专用通路,把前一条指令的ALU的计算结果作为自己的输入数据开始计算过程。
        • 指令编译优化,调整指令顺序。
        • 硬件阻塞,软件插入“NOP”指令。
    • 控制相关(控制冲突):遇到转移指令和其他改变PC值的指令而造成断流。
      • 解决方法:
        • 提前预测,和提高预测准确率。
  • 流水线的性能指标:
    • 吞吐率(TP)
    • 加速比(S)
    • 效率(E)

6、中断处理流程

  • 一些定义:
    • 中断分类:
      • 按照中断源的类别:
        • 内中断:处理器和内存内部产生的中断,如地址非法、校验错、存取访问控制错、算术操作溢出、数据格式非法、除数为零、非法指令、用户程序执行特权指令、分时系统的时间片中断、用户态到核心态的切换等
        • 外中断:处理器和内存外部产生的中断,如I/O中断等
      • 按照软硬件:
        • 软件中断(内中断):通过某条指令产生的中断
        • 硬件中断(外中断):通过外部的硬件产生的中断
      • 按照是否可屏蔽:
        • 可屏蔽中断(外中断):在关中断情况下不接受中断请求
        • 非屏蔽中断(外中断):在关中断情况下可以接受中断请求
    • 中断隐指令(硬件直接实现):
      • 关中断(保护中断现场,即CPU主要寄存器中的内容不被新的中断打断)
      • 保存断点(即保存程序计数器中的内容)
      • 引出中断服务程序(取出中断服务程序的入口地址并传送给程序计数器PC)
    • 中断屏蔽技术:在处理中断时,用中断屏蔽字屏蔽掉某些中断源。
  • 处理流程如下:
    • 发送中断请求:中断源向CPU发送中断请求信号。
    • 进行中断判优:中断系统在任意一个瞬间只能响应一个中断源的请求。
      • 硬件中断 > 软件中断
      • 非屏蔽中断 > 可屏蔽中断
      • DMA > I/O设备
      • 高速设备 > 低速设备
      • 输入设备 > 输出设备
      • 实时设备 > 普通设备
    • 执行中断隐指令:
      • 关中断
      • 保存断点
      • 引出中断服务程序
    • 保存现场和屏蔽字:现场信息一般指程序状态字和中断屏蔽寄存器等
    • 执行中断服务程序,进行中断事件处理
    • 恢复现场和屏蔽字:将现场和屏蔽字状态恢复到原来的状态
    • 开中断:允许其他中断得到响应
    • 中断返回:执行中断返回指令,使其返回到原程序的断点处,以便继续执行原程序

7、DMA和中断的区别

  • I/O方式:
    • 程序查询方式(软件):由程序不断的查询外设的状态,直到外设准备就绪
    • 程序中断方式:在计算机执行现行程序的过程中,出现某些急需处理的异常情况或特殊请求,CPU暂时中止现行程序,而转去对这些异常情况或特殊请求进行处理,在处理完毕后CPU又自动返回到现行程序的断点处,继续执行原程序。
    • DMA:在外设和主存之间开辟一条直接数据通道,信息传送不再经过CPU,降低CPU在传送数据时的开销,不必中断现行程序,I/O与主机并行工作,程序和传送并行工作。
    • 通道:输入/输出通道是一个独立于CPU的,专门管理I/O的处理机,它控制设备与主存直接进行数据交换。
  • DMA传送过程:
    • 预处理:完成寄存器置初始值之类的准备工作。
    • 数据传送:占用总线传输数据,数据传送完全由DMA控制。
    • 后处理:CPU执行中断服务程序做结束DMA处理。
  • DMA和中断的区别:
    • 中断是程序的切换,需要保护和恢复现场;DMA除了预处理和后处理,其他时候不占用CPU的任何资源。
    • 对中断请求的响应只能发生在指令的执行周期后;对DMA请求的响应可以发生在取指周期、间址周期、执行周期后,只要CPU不占用总线就可被响应。
    • 中断传送过程需要CPU的干预;DMA传送过程不需要CPU的干预。
    • DMA请求的优先级高于中断请求。
    • 中断方式靠程序传送,DMA方式靠硬件传送。

参考文献:

[1]王道论坛. 2020计算机组成原理考研复习指导. [M]北京:电子工业出版社,2019.1;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章