【计算机组成原理】 中央处理器

CPU 的功能和基本结构

中央处理器(CPU)由运算器和控制器组成。控制器的功能是负责协调并控制计算机各部件执行程序的指令序列,包括取指指令、分析指令和执行指令;运算器的功能是对数据进行加工。CPU 的具体功能包括:

  1. 指令控制。完成取指令、分析指令和执行指令的操作,即程序的顺序控制。
  2. 操作控制。一条指令的功能往往有若干操作信号的组合来实现。CPU 管理并产生由内存取出的每条指令的操作信号,把各种操作信号送往相应的部件,从而控制这些部件按指令的要求进行动作。
  3. 时间控制。对各种操作加以时间控制。时间控制要为每条指令按时间顺序提供应有的控制信号。
  4. 数据加工。对数据进行算术和逻辑运算。
  5. 中断处理。对计算机运行过程中出现的异常情况和特殊请求进行处理。

1.运算器

  运算器接收从控制器送来的命令并执行相应的动作,对数据进行加工和处理。运算器是计算机对数据进行加工处理的中心,它主要由算术逻辑单元(ALU)、暂存寄存器、累加寄存器(ACC)、通用寄存器组、程序状态字寄存器(PSW)。移位器、计数器(CT)等组成。

  1. 算术逻辑单元。主要功能是进行算术/逻辑运算。
  2. 暂存寄存器。用于暂存从主存读来的数据,该数据不能存放在通用寄存器中,否则会破坏其原有内容。暂存寄存器对应用程序员是透明的
  3. 累加寄存器。它是一个通用寄存器,用于暂时存放 ALU 运算的结果信息,可以作为加法运算的一个输入端。
  4. 通用寄存器组。如 AX、BX、CX、DX、SP 等(也常用 R0、R1...表示),用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等。SP 是堆栈指针,用于指示栈顶的地址。
  5. 程序状态字寄存器。保留由算术逻辑运算指令或测试指令的结果而建立的各种状态信息,如溢出标志(OF)、符号标志(SF)、零标志(ZF)、进位标志(CF)等。PSW 中的这些位参与并决定微操作的形成。
  6. 移位器。对操作数或运算结果进行移位运算。
  7. 计数器。控制乘除运算的操作步数。

2.控制器

  控制器是整个系统的指挥中枢,在控制器的控制下,使运算器、存储器和输入/输出设备等功能部件构成一个有机的整体,根据指令的要求指挥全机协调工作。控制器的基本功能是执行指令,每条指令的执行是由控制器发出的一组微操作实现的。

  控制器有硬布线控制器和微程序控制器两种类型。控制器由程序计数器(PC)、指令寄存器(IR)、指令译码器、存储器地址寄存器(MAR)、存储器数据寄存器(MDR)、时序系统和微操作信号发生器等组成。

  1. 程序计数器。用于指出下一条指令在主存中的存放地址。CPU 根据 PC 的内容去主存中取指令。PC 具有自增功能。
  2. 指令寄存器。用于保存当前正在执行的那条指令。
  3. 指令译码器。仅对操作码字段进行译码,向控制器提供特定的操作信号。
  4. 存储器地址寄存器。用于存放所要访问的主存单元的地址。
  5. 存储器数据寄存器。用于存放向主存写入的信息或从主存中读出的信息。
  6. 时序系统。用于产生各种时序信号,它们都由统一时钟(CLOCK)分频得到。
  7. 微操作信号发生器。根据 IR 的内容(指令)、PSW 的内容(状态信息)及时序信号,产生控制整个计算机系统所需的各种控制信号,其结构有组合逻辑型和存储逻辑型两种。

  控制器的工作原理是,根据指令操作码、指令的执行步骤(微命令序列)和条件信号来形成当前计算机各部件要用到的控制信号。计算机整机各硬件系统在这些控制信号的控制下协同运行,产生预期的执行效果。

  CPU 内部寄存器大致可分为两类:一类是用户可见的寄存器,可对这类寄存器编程,如通用寄存器组、程序状态字寄存器;另一类是用户不可见的寄存器,对用户是透明的,不可对这类寄存器编程,如存储器地址寄存器、存储器数据寄存器、指令寄存器。

数据总线的位数与处理器的位数相同,它表示 CPU 一次能处理的数据的位数,即 CPU 的位数。

程序计数器的位数取决于存储器的容量。

指令寄存器的位数取决于指令字长。

通用寄存器的位数取决于机器字长。

指令包括操作码字段和地址码字段,但指令译码器仅对操作码字段进行译码,借以确定指令的操作功能。

地址译码器是主存等存储器的组成部分,其作用是根据输入的地址码唯一选定一个存储单元,它不是 CPU 的组成部分。

间址周期结束时,CPU 内寄存器 MAR 的内容为操作数地址。

指令执行过程

  CPU 从主存每取出并执行一条指令所需的全部时间称为指令周期,即 CPU 完成一条指令的时间。

  指令周期常用若干机器周期来表示,一个机器周期又包含若干时钟周期(也称节拍或 T周期,它是 CPU 操作的最基本单位)。每个指令周期内的机器周期数可以不等,每个机器周期内的节拍数也可以不等。

  对于无条件转移指令 JMP X,在执行时不需要访问主存,只包含取指阶段(包括取指和分析) 和执行阶段,所以其指令周期仅包含取指周期和执行周期。对于间接寻址的指令,为了取操作数,需要先访问一次主存,取出有效地址,然后访问主存。取出操作数,所以还需要包括间址周期。间址周期介于取指周期和执行周期之间。

  一个完整的指令周期应包括取指、间址、执行和中断 4 个周期。这 4 个周期都有 CPU 访存操作,只是访存的目的不同。取指周期是为了取指令,间址周期是为了取有效地址,执行周期是为了取操作数,中断周期是为了保存程序断点。中断周期中的进栈操作是将 SP 减1,这和传统意义上的进栈操作相反,原因是计算机的堆栈中都是向低地址增加,所以进栈操作是减1而不是加1。

取指周期的任务是根据 PC 中的内容从主存中取出指令代码并存放在 IR 中。取指令的同时, PC 加 1。

间址周期的任务是取操作数有效地址。一次间址将指令中的地址码送到 MAR 并送至地址总线,此后 CU 向存储器发读命令,以获取有效地址并存至 MDR。

执行周期的任务是根据 IR 中的指令字的操作码和操作数通过 ALU 操作产生执行结果,不同指令的执行周期操作不同。

中断周期的任务是处理中断请求。

指令执行方案

  1.单指令周期。对所有指令都选用相同的执行时间来完成,称为单指令周期方案。此时,每条指令都在固定的时钟周期内完成,指令之间串行执行,即下一条指令只能在前一条指令执行结束后才能启动。因此,指令周期取决于执行时间最长的指令的执行时间。

  2.多指令周期。对不同指令选用不同的执行步骤来完成,称为多指令周期方案。指令之间串行执行,即下一条指令只能在前一条指令执行结束后才能启动。但可选用不同个数的时钟周期来完成不同指令的执行过程指令需要几个周期就为其分配几个周期,而不再要求所有指令占用相同的执行时间。

  3.流水线方案。指令之间可以并行执行的方案,称为流水线方案,其追求的目标是力争在每个时钟脉冲周期完成一条指令的执行过程(只有在理想情况下才能达到该效果)。这种方案通过在每个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。

指令总是根据程序计数器从主存中读出。

在一条无条件跳转指令的指令周期内,程序计数器(PC)的值被修改了 2 次。首先在取指周期结束后,PC 的值自动加 1;在执行周期中,PC 的值修改为要跳转的地址。综上,在一条无条件跳转指令的指令周期内,程序计数器(PC)的值被修改了 2 次。取指操作是自动进行的,控制器不需要得到相应的指令。不同长度的指令,其取指操作可能是不同的。控制器可区分存储单元中存放的是指令还是数据。

取指操作时自动进行的,控制器不需要得到相应的指令。

不同长度的指令,其取指操作可能是不同的。

数据通路的功能和基本结构

  数据在功能部件之间传送的路径称为数据通路。运算器与各寄存器之间的数据传送路径就是中央处理器的内部数据通路。数据通路描述了信息从什么地方开始,中间经过哪个寄存器或多路开关,最后传送到哪个寄存器,这些都要加以控制。建立数据通路的任务是由“操作控制部件”来完成的。数据通路的功能是实现 CPU 内部的运算器与寄存器及寄存器之间的数据交换。

数据通路的基本结构主要有以下几种:

  1. CPU 内部单总线方式。将所有寄存器的输入端和输出端都连接到一条公共通路上,这种结构比较简单,但数据传输存在较多的冲突现象。
  2. CPU 内部多总线方式。将所有寄存器的输入端和输出端都连接到多条公共通路上,同时在多个总线上传送不同的数据,提高效率。
  3. 专用数据通路方式。根据指令执行过程中的数据和地址的流动方向安排连接线路,避免使用共享的总线,性能较高,但硬件量大。

内部总线是指同一部件,如 CPU 内部连接各寄存器及运算器部件之间的总线;系统总线是指同一台计算机系统的各个部件,如 CPU、内存、通道和各类 I/O接口之间互相连接的总线。

寄存器之间的数据传送可通过 CPU 内部总线完成。

主存与 CPU 之间的数据传送也要借助 CPU 内部总线完成。

执行算术或逻辑操作时,由于 ALU 本身是没有内部存储功能的组合电路,因此如要执行加法运算,相加的两个数必须在 ALU 的两个输入端同时有效。

在单总线的 CPU 中,ALU 只能有一个输入端可与总线相连,另一输入端需通过暂存器与总线相连,否则两个端口会同时获得两个相同的数据,是数据通路不能正常工作。

实现 ADD R1,(R2) 的微操作序列

(PC) → MAR

M → MDR

(PC) + 1 → PC

MDR → IR

R1 → LA

(R2) → MAR

M → MDR

MDR → LB

(LA) + (LB) → R1

控制器的功能和工作原理

  根据控制器产生微操作控制信号的方式的不同,控制器可分为硬布线控制器和微操作控制器,两类控制器中的 PC 和 IR 是相同的,但确定和表示指令执行步骤的办法以及给出控制各部件运行所需要的控制信号的方案是不同的。

硬布线控制器

  硬布线控制器的基本原理是根据指令的要求、当前的时序及外部和内部的状态,按时间的顺序发送一系列微操作控制信号。它由复杂的组合逻辑门电路和一些触发器构成,因此又称组合逻辑控制器

     指令的操作码是决定控制单元发出不同操作命令(控制信号)的关键。为了简化控制单元(CU)的逻辑,将指令的操作码译码和节拍发生器从 CU 分离出来,便可得到简化的控制单元图。CU 的输入信号来源如下:

  1. 经指令译码器译码产生的指令信息。现行指令的操作码决定了不同指令在执行周期所需完成的不同操作,故指令的操作码字段是控制单元的输入信号,它与时钟配合产生不同的控制信号。
  2. 时序系统产生的机器周期信号和节拍信号。为了使控制单元按一定的先后顺序、一定的节奏发出各个控制信号,控制单元必须受时钟控制,即一个时钟脉冲使控制单元发送一个操作命令,或发送一组需要同时执行的操作命令。
  3. 来自执行单元的反馈信息即标志。控制单元有时需依赖 CPU 当前所处的状态产生控制信号,如 BAN 指令,控制单元要根据上条指令的结果是否为负来产生不同的控制信号。

控制单元还接收来自系统总线(控制总线)的控制信号,如中断请求、DMA 请求。

硬布线控制器的时序系统及微操作

  1. 时钟周期。用时钟信号控制节拍发生器,可以产生节拍,每个节拍的宽度正好对应一个时钟周期。在每个节拍内机器可完成一个或几个需同时执行的操作。
  2. 机器周期。机器周期可视为所有指令执行过程中的一个基准时间。不同指令的操作不同,指令周期也不同。访问一次存储器的时间是固定的,因此通常以存取周期时间作为基准时间,即内存中读取一个指令字的最短时间为机器周期。在存储字长等于指令字长的情况下,取指周期也可视为机器周期。   在一个机器周期里可完成若干微操作,每个微操作都需一定的时间,可用时钟信号来控制产生每个微操作指令。
  3. 指令周期。见上。
  4. 微操作命令分析。控制单元具有发出各种操作命令(控制信号)序列的功能。这些命令与指令有关,而且必须按照一定次序发出,才能使 机器有序地工作。

一条指令分为 3 个工作周期:取指周期、间址周期和执行周期。

CPU 的控制方式主要有以下三种:

  1. 同步控制方式。是指系统有一个统一的时钟,所有的控制信号均来自这个统一的时钟信号通常以最长的的微操作序列和最繁琐的微操作作为标准,采取完全统一的、具有相同时间间隔和相同数目的节拍作为机器周期来运行不同的指令。同步控制方式的优点是控制电路简单,缺点是运行速度慢。
  2. 异步控制方式。异步控制方式不存在基准时标信号,各部件按自身固有的速度,通过应答方式进行联络。异步方式的优点是运行速度快,缺点是控制电路比较复杂。
  3. 联合控制方式。联合控制方式是介于同步同步、异步之间的一种折中。这种方法对各种不同的指令微操作实行大部分采用同步控制、小部分采用异步控制的办法。

微程序控制器

  微程序控制器采用逻辑存储实现,也就是把微操作信号代码化,使每条机器指令转化成为一段微程序并存入一个专门的存储器(控制存储器)中,微操作控制信号由微指令产生。

(1)微命令与微操作。一条机器指令可以分解成一个微操作序列,这些微操作是计算机中最基本的 、不可再分解的操作。在微程序控制的计算机中,将控制部件向执行部件发出的各种程序控制命令称为微指令,它是构成控制序列的最小单位。微命令和微操作是一一对应的。微命令是微操作的控制信号,微操作是微命令的执行过程。微命令有相容性和互斥性之分。相容性微命令是指那些可以同时产生、共同完成某一些微操作的微指令;而互斥性微命令是指在机器中不允许同时出现的微命令。相容和互斥都是相对的,一个微命令可以和一些微命令相容,和另一些微命令互斥。

(2)微指令与微周期。微指令是若干微命令的集合。存放微指令的控制存储器的单元地址称为微地址。一条微指令通常至少包含两大部分信息:

  1. 操作控制字段,又称微操作码字段,用于产生某一步操作所需的各种操作控制信号。
  2. 顺序控制字段,又称微地址码字段,用于控制产生下一条要执行的微指令地址。

    微周期通常指从控制存储器中读取一条微指令并执行相应的微操作所需的时间。

(3)主存储器与控制存储器。主存储器用于存放程序和数据,在 CPU  外部,用 RAM  实现;控制存储器(CM)用于存放微程序,在 CPU 内部,用 ROM 实现。

(4)程序与微程序。程序是指令的有序集合,用于完成特定的功能;微程序是微指令的有序集合,一条指令的功能由一段微程序来实现

微程序和程序是两个不同的概念。微程序是由微指令组成的,用于描述机器指令。微程序实际上是机器指令的实时解释器,是由计算机设计者实现编制好并存放在控制存储器中的,一般不提供给用户。对于程序员来说,计算机系统中微程序的结构和功能是透明的。而程序最终由机器指令组成,是由软件设计人员实现编制好并存放在主存或辅存中的。

注意区分以下寄存器:

1.地址寄存器(MAR)。用于存放主存的 读/写地址。

2.微地址寄存器(CMAR)。用于存放控制存储器的 读/写微指令的地址。

3.指令寄存器(IR)。用于存放从主存中读出的指令。

4.微指令寄存器(CMDR 或 μIR)。用于存放从控制器中读出的微指令。

若指令周期中具有 n 种机器指令,则控制存储器中的微程序数至少是 n + 1(1 为公共的取指微程序,有中断再 +1)。

微指令的编码方式:

  1. 直接编码(直接控制)方式。直接编码无须进行译码,微指令的微命令字段中的每位都代表一个微命令。设计微指令时,选用或不选用某个微指令,只要将表示该微命令的对应位设置成 1 或 0 即可。每个微命令对应并控制数据通路中的一个微操作。
  2. 字段直接编码方式。将微指令的微命令字段分为若干小字段,把互斥性微命令组合在统一字段中,把相容性微命令组合在不同字段中,每个字段独立编码,每种编码代表一个微命令且各字段编码含义单独定义,与其他字段无关,这就是字段直接编码方式。一般每个小段还要留出一个状态,表示本字段不发出任何微命令。因此,当某字段长度为 3 时,最多只能表示 7 各互斥的微命令,通常用 000 表示不操作。
  3. 字段间接编码方式。一个字段的某些微命令需由另一个字段中的某些微命令来解释,由于不是靠字段直接译码发出的微指令,故称为字段间接编码,又称隐式编码。这种方式可进一步缩短微指令字长,但因削弱了微指令的并行控制能力,因此通常作为字段直接编码的一种辅助手段。

微指令的格式与微指令的编码方式有关,通常分为水平型微指令和垂直型微指令。

  1. 水平型微指令。从编码方式看,直接编码、字段直接编码、字段间接编码和混合编码都属于水平型微指令。指令字中的一位对应一个控制信号,有输出是为 1,否则为 0。一条水平型微指令定义并执行几种并行的基本操作。
  2. 垂直型微指令。垂直型微指令的特点是采用类似机器指令操作码的方式,在微指令中设置微操作码字段,采用微操作码编译法,由微操作码规定微指令的功能,一条垂直型微指令只能定义并执行一种基本操作。
  3. 混合型微指令。在垂直型的基础上增加一些不太复杂的并行操作。微指令较短,仍便于编写;微程序也不长,执行速度加快。

微程序控制器与硬布线控制器的对比
对比项目\类别 微程序控制器 硬布线控制器
工作原理 微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序即时产生
执行速度
规整性 较规整 繁琐、不规整
应用场合 CISC CPU RISC CPU
易扩充性 易扩充修改 困难

在微程序控制器中,形成微程序入口地址的是机器指令的操作码字段。

微程序控制存储器用来存放微程序,是微程序控制器的核心部件,属于 CPU 的一部分。

硬布线控制器与微程序控制器相比,微程序控制器的时序系统比较简单。

通常情况下,一个微程序的周期对应一个指令周期。

指令流水线

当多条指令在处理器中执行时,可以采用以下三种方式:

  1. 顺序执行方式。指令顺序执行,前一条指令执行完后,才启动下一条指令。设取指、分析、执行三个阶段的时间都相等,用 t 表示,顺序执行 n 条指令所用时间为 T 为 T = 3nt。
  2. 一次重叠方式。这种方式同时进行第 k 条指令的执行阶段和第 k + 1 条指令的取指阶段。采用此种方式时,执行 n 条指令所用的时间为 T = (1 + 2n)t。

     

  3. 二次重叠方式。为了进一步提高指令的执行速度,可以把取 k +1 条指令提前到分析第 k 条指令的期间完成,而将分析第 k + 1 条指令与执行第 k 条指令同时进行。采用此种方式时,执行 n 条指令所用的时间是 T = (2 + n)t。 

流水线方式的特点(与传统串行方式相比):

  1. 把一个任务(一条指令或一个操作)分解为几个有联系的子任务,每个子任务由一个专门的功能部件来执行,并依靠多个功能部件并行工作来缩短程序的执行时间。
  2. 流水线每个功能部件后面都要有一个缓冲寄存器,或称锁存器,其作用是保存本流水段的执行结果,提供给下一流水段使用。
  3. 流水线中各功能段的时间应尽量相等,否则将引起堵塞、断流。
  4. 只有连续不断地提供同一任务时才能发挥流水线的效率,所以在流水线中处理的必须是连续任务。在采用流水线方式工作的处理机中,要在软件和硬件设计等多方面尽量为流水线提供连续的任务。
  5. 流水线需要有装入时间和排空时间。装入时间是指第一个任务进入流水线到输出流水线的时间。排空时间是指最后一个任务进入流水线到输出流水线的时间。

流水线的分类:

  1. 部件功能级、处理机级和处理机间级流水线。部件功能级流水将复杂的算术逻辑运算组成流水线工作方式。例如,可将浮点数加法操作分成求阶差、对阶、尾数相加及结果规格化等 4 个子过程。处理机级流水把一条指令解释过程分成多个子过程,如取指、译码、执行、访存和写回 5 个子过程。处理机间级流水是一种宏流水,其中每个处理机完成某一专门任务,各个处理机得到的结果需存放在与下一个处理机共享的存储器中。
  2. 单功能流水线和多功能流水线。单功能流水线是指只能实现一种固定的专门功能的流水线;多功能流水线是指通过各段间的不同连接方式可以同时或不同时地实现多种功能的流水线。
  3. 动态流水线和静态流水线。静态流水线指在同一时间内,流水线的各段之能按同一种功能的连接方式工作。动态流水线指在同一时间内,当某些段正在实现某种运算时另一些段却在进行另一种运算。
  4. 线性流水线和非线性流水线。线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。非线性流水线存在反馈回路,从输入到输出的过程中,某些功能段将数次通过流水线,这种流水线适合进行线性递归的运算

影响流水线的因素:

  1. 结构相关(资源冲突)。由于多条指令在同一时刻争用同一资源而形成的冲突称为结构相关,有以下两种解决方法:
    1. 前一指令访存时,使后一条相关指令(以及其后续指令)暂停一个时钟周期。
    2. 单独设置数据存储器和指令存储器,使两项操作各自在不同的存储器中进行,这属于资源重复配置。
  2. 数据相关(数据冲突)。数据相关指在一个程序中,存在必须等前一条指令执行完才能执行后一条指令的情况,此时这两条指令即为数据相关。当多条指令重叠处理时就会发生冲突,解决的办法由以下几种:
    1. 把遇到数据相关的指令及其后续指令都暂停一至几个时钟周期,直到数据相关问题消失后再继续执行,可分为硬件阻塞(stall)和软件插入“NOP”指令两种方法。
    2. 设置相关专用通路,即不等前一条指令把计算结果写回寄存器组,下一条指令也不再读寄存器组,而直接把前一条指令的 ALU 的计算结果作为自己的输入数据开始计算过程,使本来需要暂停的操作变得可以继续执行,这称为数据旁路技术
    3. 通过编译器对数据相关的指令编译优化的方法,调整指令顺序来解决数据相关。
  3. 控制相关(控制冲突)当流水线遇到转移指令和其他改变 PC 值的指令而造成断流时,会引起控制相关。解决的办法有以下几种:
    1. 对转移指令进行分支预测,尽早生成转移目标地址。分支预测分为简单(静态)预测和动态预测。静态预测总是预测条件不满足,即继续执行分支指令的后续指令。动态预测根据程序执行的历史情况,进行动态预测调整,有较高的预测准确率。
    2. 预取转移成功和不成功两个控制流方向上的目标指令。
    3. 加快和提前形成条件码。
    4. 提高转移方向的猜准率。

Cache 缺失的处理过程也会引起流水线阻塞。在不过多增加硬件成本的情况下,如何尽可能提高指令流水线的运行效率(处理能力)是选用指令流水线技术必须解决的问题。

流水线中有三类数据相关冲突:写后读(RAW)相关;读后写(WAR)相关;写后写(WAW)相关

流水线的性能指标:

1.流水线的吞吐率。在指令级流水线中,吞吐率是指在单位时间内流水线所完成的任务数量,或输出结果的数量。计算流水线吞吐率(TP)的最基本的公式为 TP = n / (Tk)。其中 n 是任务数,Tk是处理完 n 个任务所用的时间。

 2.加速比。

 3.效率。

1.超标量流水线技术。每个时钟周期可并发多条独立指令,即以并行操作方式将两条指令或多条指令编译并执行,为此需配置多个功能部件。超标量计算机不能调整指令的执行顺序,因此通过编译优化技术,把可并行执行的指令搭配起来,挖掘更多的并行性。

2.超流水线技术。在一个周期内再分段,在一个时钟周期内一个功能部件使用多次。不能调整指令的执行顺序,靠编译程序解决优化问题。

3.超长指令字。由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字(可达几百位),为此需要采用多个处理部件。

流水 CPU 是以时间并行性为原理构造的处理器。

超标量流水线能结合动态调度技术提高指令并行性。(与上面矛盾,暂时以此为准)

五阶段流水线可分为取指 IF、译码/取数 ID、执行 EXC、存储器读 MEM、写回 Write Back。数字系统中,各个子系统通过数据总线连接形成的数据传送路径称为数据通路,包括程序计数器、算术逻辑运算部件、通用寄存器组、取指部件等,不包括控制部件。

流水线按序流动时,在 RAW、WAR、WAW 中,只可能出现 RAW相关。

猜你喜欢

转载自www.cnblogs.com/oneMr/p/11481521.html