01 计算机系统构成及硬件基础知识

Posted on Wed, 25 Dec 2024 16:34:27 +0800 by LiangMingJian


1.计算机的组成

1.1 计算机

  • 现代社会所讲的计算机通常指的是冯·诺伊曼型计算机。
  • 冯·诺伊曼型计算机是以存储程序控制(程序和数据事先放在存储器中,当工作时再自动取出执行)为概念的一种计算机模型。
  • 计算机由运算器,控制器,存储器,输入装置,输出装置 5 大基本部件组成。
  • 计算机的三大核心部件是 CPU、存储器、输入 / 输出设备( I/O 设备 )

1.2 硬件和软件

  • 一个完整的计算机系统由硬件系统和软件系统两部分组成。
  • 硬件是计算机的实体,是计算机实现其功能的物质基础。
  • 软件是指挥计算机运行的程序集,如操作系统,网络系统等都属于软件,没有安装任何软件的计算机称为裸机。

2.CPU

2.1 CPU 的组成

  • CPU 由运算器,控制器,以及少量寄存器组所组成。

2.2 运算器

  • 算术逻辑单元 ALU:CPU 的执行单元,同时也是 CPU 的核心组成部分,一个由与门和或门构成的算术逻辑单元。其主要功能是进行整数的二位元的算术运算,如加减乘(不包括整数除法)。
  • 累加器 AC:当运算器的算术逻辑单元执行算术或逻辑运算时,为 ALU 提供一个工作区,暂时存放运算结果信息。
  • 数据缓冲寄存器 DR:作为 CPU 和内存及外部设备间信息传送的中转站,用来暂时存放由内存读出或准备存入的指令或数据。
  • 状态寄存器 PSW:保存由算术指令和逻辑指令运行结果所建立的各种条件码内容,如运算结果的进位标志、溢出标志,为零标志、为负标志等。
  • 通用寄存器组:用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。通用寄存器的长度取决于机器字长。

2.3 控制器

  • 程序计数器 PC:又称指令计数器,其总是保持将要执行的下一条指令的地址。在程序开始执行前,必须将它的起始地址,即程序第一条指令所在的内存地址送入 PC。大部分情况下,所有指令的地址码都需要先送入 PC,程序员通过访问 PC 来控制程序执行过程
  • 指令寄存器 IR:用来保存当前正在执行的指令,其位数取决于指令的长度。当执行一条指令时,CPU 需要先把它从内存取到数据缓冲寄存器,然后再传送到指令寄存器。指令寄存器对用户来说是完全透明的,用户可以随时检查当前执行的指令。
  • 指令译码器 ID:分析和执行当前指令的部件。为了执行给定的指令,必须对操作码进行测试,以便识别所要求的操作。操作码一经译码后,即可向操作控制器发出具体的操作的信号。
  • 操作控制器 OC:根据指令操作码和时序信号,产生各种操作控制信号,以便正确地建立数据通路,从而完成取指令和执行指令的控制。CPU 内的每个部件间需要 OC 来控制信息传输,完成诸如信息从什么地方开始发送,中间经过哪个寄存器,最后传到哪个寄存器等操作。
  • 时序节拍发生器:CPU 中的一个时钟设备,使计算机可以准确、迅速、有条不紊地工作。操作控制器利用定时脉冲的顺序和不同的脉冲间隔,有条理、有节奏地指挥机器的动作,规定在这个脉冲到来时做什么,在那个脉冲到来时又做什么,给计算机各部分提供工作所需的时间标志。

2.4 寄存器组

  • 寄存器组:CPU 中暂时存放数据的地方,里面保存着那些等待处理的数据,或已经处理过的数据,CPU 访问寄存器所用的时间要比访问主存的时间短。采用寄存器组,可以减少 CPU 访问内存的次数,从而提高了 CPU 的工作速度。但因芯片面积和集成度所限,寄存器组的容量不可能很大。
  • 高速缓冲存储器:存在于主存与 CPU 之间的一级存储器,与主存间的信息传送通过硬件自动进行,容量比较小但速度比主存高得多,接近于 CPU 的速度,通常用来辅助寄存器组工作。

2.5 CPU 的多级时序系统

  • 指令周期:CPU 每取出并执行一条指令所需的全部时间叫指令周期。
  • 机器周期/总线周期:一般一条完整的指令包括:取指周期、间址周期、执行周期、中断周期。机器周期就是 CPU 指令执行过程中的一个基准事件。由于 CPU内部的操作速度较快,CPU 访存的操作时间较长,因此通常以访问一次存储器的时间定为机器周期。又由于不论执行什么指令,都需要访问存储器取出指令,因此在存储字长等于指令字长的前提下,取指周期也可看作机器周期。机器周期取决于指令的功能和器件的速度。
  • 时钟周期/震荡周期:在一个机器周期可完成若干个微操作,每个微操作需要一定的时间,可用时钟信号来控制每一个微操作命令。用时钟信号控制节拍发生器,就可产生节拍。每个节拍的宽度正好对应一个时钟周期。时钟周期是控制计算机操作的最小时间单位。
  • 机器周期和节拍(状态)组成了多级时序系统。
  • 一个指令周期包含若干个机器周期,一个机器周期包含若干个时钟周期。
  • 一个指令周期包含的机器周期个数与指令所要求的动作有关,如单操作数指令,只需要一个取操作数周期,而双操作数指令需要两个取操作数周期。

2.6 CPU 基本工作原理

  • 初始化 PC:由程序计数器 PC 指定指令在存储器的位置。
  • 送地址:PC > MAR,将 PC 第一条地址送入存储器地址寄存器 MAR。
  • 取指令:根据地址,从存储器或高速缓冲存储器中检索指令(为数值或一系列数值)放到指令寄存器 IR 。
  • 指令解码:通过控制器的译码,将指令拆解为有意义的片段。
  • 执行指令:连接到各种能够进行所需运算的 CPU 部件,执行指令。
  • 写回:将结果写入数据寄存器 MDR。
  • 更新 PC:根据指令代码和分支标志,从前面步骤得出的结果,生成下一条指令的地址放到 PC 里。

2.7 CPU 的性能指标

  • 主频:CPU 工作频率。
  • 字长:CPU 一次处理数据位数。
  • CPU 缓存:高速缓冲存储器。
  • CPU 核心:计算引擎个数。

3.总线

3.1 总线(Bus)

  • 总线(Bus)是计算机CPU,内存,输入输出等部件间传递信息的共用通道,是由导线组成的传输线束。
  • 片总线(C-Bus):又称元件级总线,是各种不同的芯片连接通信的信息传输通路,通常出现在CPU内。
  • 内总线(I-Bus):又称系统总线和板级总线,是系统中各模块的信息传输通路,通常如CPU模块与存储器模块间的传输通路。
  • 外总线(E-Bus):又称通信总线,是计算机系统与系统外设备连接的信息传输通路。
  • 没有特殊说明,一般情况下,总线可以特指系统总线(内总线)

3.2 系统总线(按功能分类)

  • 数据总线 DB:双向三态形式的总线。双向是指既可以把 CPU 的数据传出,也可以将其他部件的数据传入 CPU。CPU 与其他部件通过数据总线来交换数据。三态是指 -1,0,1。需要注意的是,数据总线的位数是微机的一个重要指标,数据总线宽度越大,单位时间内进出 CPU 的数据越多,系统运算速度越快。数据总线位数通常与处理器的字长一致,保证 CPU 一次性接收数据
  • 地址总线 AB:单向三态形式的总线。由于地址只能从 CPU 传向外部存储器,所以地址总线总是单向的。其位数决定 CPU 可以直接寻址的内存空间大小,也决定 CPU 能有多少的内存。若地址总线为 n 位,则寻址能力 2^n,若以字节为单位,内存容量则为 2^n B。(内存容量为 32GB ( 2^32 )的系统,其地址总线 32 位)。
  • 控制总线 CB:用来传送控制信号和时序信号。控制总线的传送方向由具体的控制信号而定,一般都是双向的。控制总线的位数根据系统 CPU 而定。

3.3 总线复用

  • 使用一条总线来实现多种功能,例如在不同时段中利用总线上同一信号线传输不同信号。
  • 优点:减少总线中信号线的数量,提高总线的利用率

3.4 总线的性能指标

  • 带宽:指单位时间传输的数据量,也称为总线传输速率或吞吐量,单位 b/s 或 bps,总线传输能⼒(带宽)取决于总线的数据宽度(数据总线的个数)。
  • 位宽:指总线能够同时传送的数据位数,总线的宽度一般指的就是位宽。
  • 工作频率:指总线信号的时钟频率,以 MHz 为单位,时钟频率越⾼,⼯作速度越快。

4.输入输出

4.1 输入输出系统的组成

  • 输入输出系统由 I/O 软件和 I/O 硬件两部分组成。
  • I/O 软件完成输入输出控制的作用,通常包括 I/O 指令(启停设备、通道控制)和通道指令(实际数据传输)。由于通道指令存放于主存,因此执行输入输出操作时,往往需要先执行访存指令。
  • I/O 硬件完成设备的连接工作,建立(通道 -> 设备控制器 -> 设备)三级硬件结构。

4.2 输入输出接口( I/O 接口)

  • 主机 <—> I/O 接口 <— > 外设。
  • I/O 接口是主机与外设之间的交接部分,是两者的共同逻辑边界,CPU 与外设之间的数据交换必须通过 I/O 接口完成。
  • 接口能设置数据存储和缓冲逻辑,以适应 CPU 与外设的速度差。
  • 接口能够转换信息格式,如串行和并行转换,保证 CPU 与外设间数据传输的格式一致。
  • 接口能够协调 CPU 与外设之间的信息类型和电平差,时差。
  • 接口能够选择设备,保证 CPU 能与正确的外设进行数据传输。
  • 接口能够设置中断和 DMA 控制逻辑,可以产生中断和 DMA 请求信号,并在接收到中断或 DMA 响应后完成中断处理和 DMA 传输。

4.3 内存与 I/O 接口的编址方式

4.3.1 统一编址方法

  • 内存地址和接口地址在一个公共的地址空间,其中一部分划给接口使用,其余地址给内存单元使用,内存单元分配的地址空间,只允许给内存单元使用,同样,内存也不能用接口的。
  • 优点:内存的指令可以全部用于接口,不区分内存指令和接口指令,大大增强了对接口的操作功能。
  • 缺点:整个地址空间被分为两部分,内存地址不连续。

4.3.2 独立编址方法

  • 内存地址和接口地址是两个完全独立和相互隔离的地址空间,访问数据的指令也不同,接口只有读写指令,其余都是内存指令。
  • 优点:接口和内存指令容易区分,易于使用。
  • 缺点:接口指令太少,功能过于单一。

4.4 输入输出控制

4.4.1 无条件传送

  • CPU 与外设同步工作。
  • 外设数据总是准备好的,它可以无条件地随时接收 CPU 发来的输出数据,也能够无条件地随时向 CPU 提供数据。
  • 开关就是最典型的例子,无论什么时候都可以控制开关。

4.4.2 查询控制

  • CPU 与外设不同步工作。
  • CPU 通过程序主动读取状态寄存器,了解接口情况,只有当查询到外设处于准备好的状态时,CPU 才会传输数据,否则会一直处于等待状态。
  • 由于查询操作需要以较少的时钟周期间隔重复,因此该方法的 CPU 效率较低。

4.4.3 中断控制

  • 外设与 CPU 处于并行工作。
  • 一旦外设准备好,外设向 CPU 发出中断申请,CPU 暂停原程序执行,响应中断,传输数据。
  • 由于外设与 CPU 串行工作,因此该方法具有较高的效率和良好的实时性。
  • PS:中断是指在计算机执行程序的过程中,当出现异常情况或者特殊请求时,计算机停止现行的程序的运行,转而对这些异常处理或者特殊请求的处理,处理结束后再返回到现行程序的中断处,继续执行原程序。
  • PS:中断会在一条指令结束时进行切换,此时系统会保存断点(保护现场),然后执行中断程序,在完成任务后,系统会返回断点(恢复现场)。
  • PS:CPU 一般从中断号中获取中断向量,然后依据中断向量取得中断服务程序的入口地址。
  • PS:系统会把所有的中断类型码及对应的中断向量按一定的规律存放在一个区域内,这个存储区域被称为中断向量表。

4.4.4 DMA / 直接存储器存取

  • 外设和主存间直接成块传送,而不经由 CPU 执行指令,不需要 CPU 的任何干涉。
  • DMA 只需要 CPU 在过程开始启动(即向设备发出传送—块数据的命令)与过程结束(CPU 通过轮询或中断得知过程是否结束和下次操作是否准备就绪)时的处理,其他实际操作由 DMA 硬件直接执行完成,CPU 在此传送过程完成其他工作。
  • CPU 会在一个总线(机器)周期结束时响应 DMA 。
  • DMA 减轻了 CPU 对 I/O 操作的控制,使得 CPU 的效率显著提高。

4.4.5 IOP / 输入输出处理器

  • 外设通过一个额外的,具有特殊功能的处理器完成与主存之间的数据传送。
  • IOP 又称为通道方式,它作为一个额外的处理器分担了 CPU 一部分功能,实现对外围设备的统一管理,完成外围设备与主存之间的数据传送。
  • 通道方式大大提高了 CPU 的工作效率,然而这种效率的提高是以增加更多的硬件为代价的。

6.存储器

6.1 存储器的类型(按存取方式)

  • 随机存储器 RAM:任何存储单元的内容都能被随机存取,且存取时间和存储单元的物理位置无关。
  • 只读存储器 ROM:存储的内容是固定不变的,只能读出而不能写入。
  • 顺序存取存储器 SAM:只能按某种顺序来存取,存取时间与存储单元的物理位置有关。
  • 直接存取存储器 DMA:数据可以不经过 CPU 的处理就直接在存储器或输入输出设备之间进行传输。
  • 相联存储器:不依靠地址,可以按照内容检索到存储位置进行读写。

6.2 存储器的类型(按作用)

  • 主存储器(内存):用于存放活动的程序和数据,其速度高、容量较小、每位价位高。主存属于随机存取器。
  • 辅助存储器(外存储器):主要用于存放不活跃的程序和数据,其速度慢、容量大、每位价位低。
  • 缓冲存储器:CPU 内的寄存器和 CPU 外的内存在进行数据交换时,作为缓冲使用。

6.3 存储器的类型(按速度)

  • CPU 内部寄存器:寄存器是 CPU 内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果,拥有最快的存取速度。
  • 高速缓存 Cache:介于 CPU 和主存储器之间的高速小容量存储器。它和主存储器一起构成一级的存储器,容量比较小但速度比主存快,接近于 CPU 的速度。通常用来缓存一些常用数据,在程序运行时,Cache 和主存间的全部功能都由硬件自动完成。
  • 内存储器:用于存放 CPU 中的运算数据,以及与硬盘等外部存储器交换的数据,是外存与 CPU 进行沟通的桥梁。计算机中所有程序的运行都在内存中进行。
  • 外存储器:外储存器是指除计算机内存及 CPU 缓存以外的储存器,此类储存器一般断电后仍然能保存数据。常见的外存储器有硬盘、软盘、光盘、U 盘等。
  • CPU 内部寄存器 > 高速缓存 Cache > 主存 > 大容量磁盘

6.4 多级存储体系结构

  • 计算机基于容量、速度、成本三个因素,采用多级存储体系结构。
  • 多级存储体系结构从上到下,容量越来越大,速度越来越慢,成本越来越低。这种存储结构有利于 CPU 发挥其性能,解决数据存储的问题。

6.5 虚拟存储器

  • 虚拟存储器是在具有主存辅存层次结构存储器的计算机系统中,自动实现部分装入和部分替换功能,能从逻辑上为用户提供一个比物理存储容量大得多,并且可寻址的一个存储器。
  • 虚拟存储区的容量与物理主存大小无关,而受限于计算机的地址结构和可用磁盘容量。
  • 虚拟存储器的基本思路是:作业提交时,先全部进入辅助存储器,作业投入运行时,不把作业的全部信息同时装入主存储器,而是将其中当前使用部分先装入主存储器,其余暂时不用的部分先存放在作为主存扩充的辅助存储器中,待用到这些信息时,再由系统自动把它们装入到主存储器中。

6.6 外存(磁盘)

  • 磁盘是计算机主要的存储介质,能比内存存储更多的二进制数据,且在断电后也能保持数据不丢失,但速度没有内存快。
  • 磁盘往往由以下部件组成:
    • 盘片:一个磁盘由多个盘片叠加而成。
    • 盘面:盘片的表面涂有磁性物质,这些磁性物质用来记录二进制数据。盘片正反两面都可涂上磁性物质,因此一个盘片可能会有两个盘面。
    • 磁道:每个盘片被划分为一个个磁道(圆的周长)。
    • 扇区:每个磁道又划分为一个个扇区。其中,最内侧磁道上的扇区面积最小,因此数据密度最大(圆的面积)。
    • 柱面:每个盘面对应一个磁头。所有的磁头都是连在同一个磁臂上的,因此所有磁头只能共进退。所有盘面中相对位置相同的磁道组成柱面。
  • 磁盘的容量 C = 扇区总数 x 每个扇区存储的字节数(物理块大小)。

6.7 内存(RAM)

6.7.1 内存的定义

  • 内存是计算机的重要部件,用于暂时存放 CPU 中的运算数据,以及与硬盘等外部存储器交换的数据,是外存与 CPU 进行沟通的桥梁。
  • 内存结构上为随机存储器 RAM。
  • 计算机中所有程序的运行都在内存中进行,只要计算机开始运行,操作系统就会把需要运算的数据从内存调到 CPU 中进行运算,当运算完成,再由 CPU 将结果传送出来,内存性能的强弱影响计算机整体发挥的水平。

6.7.2 内存的组成

  • 内存由多个内存芯片、SPD 芯片(串行存在检测芯片)、少量电阻以及 PCB 板(印制电路板)组成。
  • 内存的存储容量由内存芯片的个数和单个芯片的容量决定。

6.7.3 内存芯片的合成

  • 一个内存通常由多个内存芯片组成而成。
  • 芯片的容量通常使用 1K X 8 位 这样的格式来表示,1K X 8 位 表示这个芯片的位数是 8 位( 可连接 8 位地址线 ) ,长度是 1K,容量是 8Kb。又比如,2K X 4位 的芯片宽度是 4 位,长度是 2K,那么容量就是 8Kb,按字节计算就是 1KB。
  • 有时会使用多个低位的芯片组成一个高位存储器,比如使用多个 2K X 4位 的芯片组成一个 16K X 8 位的存储器。此时,通常需要将两片 2K X 4 位 的并联成一个 2K X 8 位的矩阵组,使得位数满足后,再计算需要芯片组 16K / 2K = 8 组,最后得到总共需要的芯片数 2 X 8 = 16 个。若从地址单元从 0000H 开始,则第一个 2K = 2^11 = 0800H 芯片的地址范围是 0000H 至 07FFH,第二个是 0800H 到 0FFFH ……

6.7.4 内存容量的计算

  • 问题:内存按字节编址从 A5000H 到 DCFFFH,计算内存容量?
  • 解:DCFFF - A5000 + 1=38000H,将 38000H 换算为二进制为:11 1000 00-00 0000 0000 = 1110 0000 X 2^10 = 224 KB,即内存容量224KB。

6.7.5 内存芯片数量的计算

  • 问题:内存按字节编址,地址为 0B4000H 至 0DBFFFH,若用存储容量为 32K * 8bit 的存储器芯片构成内存,至少需要多少片?
  • 解:首先由 0DBFFFH - 0B4000H + 1 算得内存容量为 028000H B,即 160 KB。然后由于单个内存芯片容量为 32 KB(8bit = 1B),因此需要内存芯片个数 160 / 32 = 5,即该内存条由 5 个 32 KB 的内存芯片构成。

6.7.6 内存地址的计算

  • 问题:如果主存容量为 16MB 字节,且按字节编址,则表示该主存地址至少需要多少位。
  • 解:由于主存地址位数 = 主存容量(2^n)的幂 = n,因此主存容量 16 MB = 16 * 1024 * 1024 b = 2^(4+10+10) = 2^24,主存地址至少需要 24 位。

6.7.7 区号,组号的计算

  • 问题:容量为 64 块的 Cache 采用组相联方式映像,字块大小为 128 个字,每 4 块为一组。若主存容量为 4096 块,且以字编址,那么主存地址应为多少位,主存区号应为多少位。
  • 解:由于主存地址位数 = 区号 + 组号 + 组内块号(每组字块数量 2^y 的幂 y) + 块内地址号(字块容量 2^x 的幂 x),因此字块大小为 128 (2^7) ,则块内地址号:7,每 4 (2^2) 块一组,则组内块号:2,Cache 容量为 64 块,每 4 块一组,则可以分为 16 (2^4) 组,则组号:4,主存容量 4096 * 128 = 2^19,则主存地址 19 位,区号 = 19-4-2-7 = 6。

6.8 高速缓存(Cache)

  • Cache 是在主存和 CPU 之间的一个特殊存储器。
  • 由于 CPU 的速度很快,而存储器主存的速度比 CPU 慢很多,CPU 的性能很难得到充分的发挥。因此设计出 Cache,放在主存和 CPU 之间,协调主存和 CPU 的数据交换,利于 CPU 发挥其性能。
  • Cache 由控制部分和高速缓存组成,控制部分负责控制信息,完成如地址映射等功能,高速缓存则负责相关数据的一些存储。
  • 在程序执行过程中,Cache 与主存的地址映射由硬件自动完成。
  • 当 CPU 在运行时,会发出数据指令,这个指令会同时到达 Cache 和主存。如果 CPU 需要的数据在 Cache 中存在(这个过程称为命中),则 Cache 就会把数据返回给 CPU,因为 Cache 的速度比主存快很多,所以 CPU 就会很快的获得所需数据,接着执行程序。
  • 如果 CPU 发出需要数据的指令后,Cache 没有所需数据,那么就只能由主存将数据返回给CPU,同时将数据在 Cache 中保留一份。在下一次访问相同数据时,CPU 能直接从 Cache 中拿到所需的数据,提高 CPU 的执行效率。

7.指令与寻址

7.1 指令的内容

  • 一条指令就是一条机器语言的语句,是一组有意义的二进制代码。
  • 指令由操作码字段和地址码字段所组成,操作码决定了操作的性质和内容,地址码决定了操作的对象以及操作数和操作结果存放的位置。

7.2 寻址方式

7.2.1 立即数寻址

  • 一种特殊的寻址方式,获取操作数最快的寻址方式。
  • 操作数直接存放到指令中,紧跟操作码之后,只要取出指令就可以立即使用操作数,如 MOV AX,2435H。
  • 立即寻址主要执行取指令访存1次,不需要执行指令访存,一共访存1次。

7.2.2 直接寻址

  • 指令给出的形式地址就是操作数的有效地址,如 MOV AX,[2000H]。
  • 直接寻址主要执行取指令访存1次,还有执行指令访存1次,一共访存2次。

7.2.3 间接寻址

  • 指令中地址码字段给的是操作数有效地址所在存储单元的地址,如 MOV AX,[2000H],这里的地址 [2000H] 指向操作数地址所在存储单元的地址。
  • 间接寻址执行取指令访存1次,还要执行指令访存2次,一共访存3次。

7.2.4 寄存器寻址

  • 操作数存放在 CPU 的某一通用寄存器中,可在指令中指出寄存器名调用操作数,如 MOV AX,BX。
  • 寄存器寻址主要执行取指令访存1次,由于访问的是寄存器因此不需要执行指令访存,一共访存1次。
  • 访问寄存器会比访问主存快得多,但是寄存器数量也较少。

7.2.5 寄存器间接寻址

  • 操作数的地址存放在寄存器,如 MOV AX,[BX]。
  • 寄存器间接寻址主要执行取指令访存1次,还有一次是寄存器执行指令访存1次,一共访存2次。

7.2.6 相对基址寻址

  • 将指定寄存器的内容,加上指令中给出的位移量,并以一个段寄存器为基准作为操作数的有效地址,如 MOV AX,COUNT + [SI]。
  • 基址寻址最大的优点就在于可以扩大寻址范围。比如原先寻址的范围只有 0 到 4,用了基址寻址的方式,我们可以给其加一个基地址100,那么就可以在(100104)这个范围内再存取。

7.2.7 相对变址寻址

  • 把基址寄存器 BX 和 BP 的内容加上变址寄存器 SI 和 DI 的内容作为操作数的有效地址,如 MOV AX,[BX] + [DI]。
  • 变址寻址常用在一些有规律的操作上,比如遍历字符串,遍历数组,通过修改变址值来取不同的操作数。

7.2.8 相对基址变址寻址

  • 在变址寻址的基础上增加一个位移量,如 MOV AX,MASK + [BX] + [SI]。
  • 在相对基址变址寻址方式中,通常把 BX 和 BP 看作是基址寄存器,把 SI 和 DI 看作变址寄存器。它是把一个基址寄存器 BX 或 BP 的内容,加上变址寄存器SI 或 DI 的内容,再加上指令中给定的 8 位或 16 位位移量,并以一个段寄存器作为地址基准,作为操作数的地址。

7.3 寻址能力(寻址空间)

  • 一般来说,地址总线决定寻址能力,若地址总线为 n 位,则寻址能力为 2^n,以字节为单位,则为 2^n B。
  • 例如:地址总线宽度为 24 位,则其寻址空间为 2^24 = 2^4 MB = 16 MB

7.4 指令集

7.4.1 RISC 精简指令集

  1. RISC 通过减少指令的总数,去解放指令的功能,降低计算机硬件设计的复杂度,使指令能够在单周期内执行,提高指令的执行速度。
  2. RISC 的指令数量少,使用频率接近,定长格式,能在单周期内执行,支持的寻址方式少。
  3. RISC 使用了大量寄存器,使得大部分操作都在寄存器中进行,提高了执行速度。
  4. RISC 采用硬布线逻辑控制,使得大部分指令都可以使用硬件执行。
  5. RISC 采用超标量(多个流水线同时执行),超流水线(增加流水线的级别)和超长指令字节(多条指令链接)的技术,使得指令集具有极高的并行能力。
  6. RISC 操作内存时,只有 Load / Store 两个命令,取数和存数指令分开执行,提高了处理器的性能。

7.4.2 CISC 复杂指令集

  1. CISC 进一步增强原有指令的功能,用更为复杂的新指令去取代原先的软件的子程序,来完成对应的功能,实现软件功能硬件化。
  2. CISC 的指令数量多,使用频率差别大,可变长格式,支持的寻址方式多。
  3. CISC 指令集比较丰富,因此有效的减少编译代码中指令的数量,简化编译器的结构,减少程序设计语言与机器语言间的语义差别。
  4. CISC 指令集很难执行指令流水操作,且指令的时钟周期会比较长,使用起来并不高效。

7.4.3 RISC 与 CISC 的对比

  • 指令系统:RISC 的指令主要集中于经常使用的指令上,不常用的指令通过组合指令来完成,因此在 RISC 上实现特殊功能时效率较低。而 CISC 的指令系统比较丰富,具有许多专用指令来完成特定功能。
  • 存储器操作:RISC 对存储器操作有限制,控制简单化。CISC的存储器指令多,操作直接。
  • 程序:RISC 汇编语言程序一般需要较大内存空间,实现特殊功能时程序复杂,不易设计;CISC 汇编语言程序变成相对简单,设计相对容易,效率较高。
  • 中断:RISC 机器在任意指令的适当地方都可以响应中断;而 CISC 则只能在指令结束后响应中断。
  • CPU:RISC 面积小,功耗低;CISC 则功能强,面积大,功耗大。
  • 设计周期:RISC 结构简单,布局紧凑,设计周期短,易于采用新技术;CISC 结构复杂,设计周期长。
  • 用户使用:RISC 易学,CISC 复杂。

8.流水线

8.1 流水线的内容

  • 流水线,是指程序在执行时, 多条指令重叠进行操作的一种准并行处理实现技术。
  • 流水线的前一个子过程为下一个子过程创造执行条件,每一个过程都可以与其他子过程同时进行,能有效提高部件的使用率,提高指令的执行效率。
  • 流水线各阶段执行时间最长的一段为流水线的周期,也称为整个流水线的瓶颈。

8.2 相关计算

8.2.1 流水线的总耗时

  • 公式:单条指令所需时间 +(n-1)X(流水线周期)。
  • n 为指令数量。

8.2.2 流水线的吞吐率

  • 流水线的吞吐率是指单位时间内流水线所完成的任务数或输出结果数。
  • 公式:TP = n / T,总共完成的指令数量 / 总耗时。

8.2.3 示例:单缓冲区数据存取

  • 在块设备输入数据的过程中,首先把磁盘数据送到缓冲区,花费的时间为 Ts
  • 然后把操作系统缓冲区的数据送到用户区,花费的时间为 Tm
  • 最后用户进程对这批数据进行计算,花费的时间为 Tc
  • 上述操作的数据都要经过【读入缓冲区,送用户区,处理】三个步骤,读入缓冲区和送用户区都需要使用缓冲区,且这两个步骤执行时,缓冲区都不能进行其他操作。
  • 在单缓冲区时,可以将读入缓冲区和送用户区两个步骤看作一个操作【读入缓冲区并送用户区】,即每个数据都经过(最终流水线)【读入缓冲区并送用户区,处理】两个操作,运用流水线的方式计算耗时有:(Ts+Tm+Tc)+ (n-1) X (Max((Ts+Tm), Tc))。

8.2.4 示例:双缓冲区数据存取

  • 在块设备输入数据的过程中,首先把磁盘数据送到缓冲区,花费的时间为 Ts。
  • 然后把操作系统缓冲区的数据送到用户区,花费的时间为 Tm。
  • 最后用户进程对这批数据进行计算,花费的时间为 Tc。
  • 上述操作的数据都要经过【读入缓冲区,送用户区,处理】三个步骤,读入缓冲区和送用户区都需要使用缓冲区,且这两个步骤执行时,缓冲区都不能进行其他操作。
  • 在双缓冲区时,读入缓冲区和送用户区操作可以并行,即假设有 AB 两个缓冲区,第一个数据读入缓冲区 A 后,送用户区从 A 中取出数据,同时第二个数据可以读入缓冲区 B,然后用户在 A 取完数据后可以从 B 取,使用并行操作。因此每个数据都经过(最终流水线)【读入缓冲区,送用户区,处理】三个操作。运用流水线的方式计算耗时有:(Ts+Tm+Tc)+ (n-1) X (Max(Ts, Tm, Tc))。