第一章计算机系统概述¶
Info
【考纲内容】
(一)计算机系统层次结构
- 计算机系统的基本组成
- 计算机硬件的基本组成
- 计算机软件和硬件的关系
- 计算机系统的工作原理:“存储程序”方式;高级语言程序与机器语言程序的转换;程序和指令的执行过程
(二)计算机性能指标
- 吞吐量;响应时间;CPU 时钟周期;主频;CPI;CPU 执行时间;
- MIPS; MFLOPS; GFLOPS; TFLOPS; PFLOPS; EFLOPS; ZFLOPS
【2009-11】冯·诺依曼计算机中指令和数据均以二进制形式存放在存储器中,CPU 区分它们的依据是( )。
A. 指令操作码的译码结果
B. 指令和数据的寻址方式
C. 指令周期的不同阶段
D. 指令和数据所在的存储单元
解析
【答案】C
冯·诺伊曼体系结构规定指令和数据都以二进制代码形式存储在同一个存储器中,这被称为存储程序原理。
- 形式上:指令和数据在存储器中都是二进制序列,没有本质区别。
- CPU区分依据:CPU通过指令周期的不同阶段来区分它们。
- 取指令周期:在这个阶段,CPU总是从存储器中取出指令。
- 执行周期:在这个阶段,如果指令需要操作数,CPU会根据指令中指定的地址从存储器中取出数据(作为操作数)。
因此,区分的依据是 指令周期的不同阶段。
【2015-12】计算机硬件能够直接执行的语言是( )。
I. 机器语言程序
II. 汇编语言程序
III. 硬件描述语言程序
A. 仅I
B. 仅I、II
C. 仅I、III
D. I、II、III
解析
【答案】 A
计算机硬件,特指 CPU,只能识别和执行 二进制编码,即 机器语言。
- I. 机器语言程序:由二进制代码组成,是CPU能直接执行的唯一语言。
- II. 汇编语言程序:使用助记符(如
ADD,MOV)来代替机器指令的二进制代码,增强了可读性。它必须经过汇编程序翻译成机器语言后才能执行。 - III. 硬件描述语言程序 (HDL):例如 VHDL, Verilog。它是一种用于描述电子硬件(如数字电路、芯片)的行为和结构的编程语言,主要用于硬件设计和综合,而不是CPU直接执行的程序。
综上,硬件能直接执行的只有 I. 机器语言程序。
【2016-12】将高级语言源程序转换为机器目标代码文件的程序是( )。
A. 汇编程序
B. 链接程序
C. 编译程序
D. 解释程序
解析
【答案】 C
程序语言的 翻译程序 可分为两类:
- 1. 编译程序 (Compiler):
- 作用:将高级语言源程序翻译成汇编语言或机器语言的目标代码。虽然现代编译器流程包含汇编步骤,但从定义上讲,负责从“高级”到“机器级目标”转换的主体是编译程序。
- 特点:先翻译后执行,生成可独立运行的目标文件。
- 2. 解释程序 (Interpreter):
- 作用:逐句读取高级语言源程序,边翻译边执行。
- 特点:不生成独立的目标代码文件,执行效率通常低于编译程序。
- 汇编程序 (Assembler):将汇编语言翻译成机器语言。
- 链接程序 (Linker):将编译/汇编生成的一个或多个目标模块以及所需的库文件连接起来,形成一个可执行文件。
因此,将高级语言源程序转换为机器级目标代码文件的是 编译程序。
【2019-12】下列关于冯·诺依曼结构计算机基本思想的叙述中,错误的是( )。
A. 程序的功能都通过中央处理器执行指令实现
B. 指令和数据都用二进制数表示,形式上无差别
C. 指令按地址访问,数据都在指令中直接给出
D. 程序执行前,指令和数据需预先存放在存储器中
解析
【答案】 C
冯·诺伊曼计算机的基本思想包括:存储程序、二进制表示、由运算器、控制器、存储器、输入设备和输出设备五大部件组成。
- A 正确:程序的功能(逻辑操作、数据处理等)都通过CPU(中央处理器,包含运算器和控制器)执行一系列指令来实现。
- B 正确:指令和数据都采用 二进制编码 存储和传输,在形式上(存储器中的存储形式)是无差别的。
- C 错误:该选项包含两部分,前半句正确,后半句错误。
- “指令按地址访问”:正确。无论是取指令还是取数据,都是通过地址来访问存储器。
- “数据都在指令中直接给出”:错误。
- 大部分数据是存放在存储器或寄存器中,指令中通常只给出存放数据(操作数)的地址码(通过地址码,CPU才能到存储器中取出数据)。
- 只有在立即数寻址方式下,数据才直接包含在指令的操作数部分,但这种情况只占指令类型的一小部分,不能说“都在指令中直接给出”。
- D 正确:存储程序原理要求程序(指令序列)和数据必须在程序开始执行前,预先存放在存储器中。
【2022-20】将高级语言源程序转换为可执行目标文件的主要过程是( )。
A. 预处理→编译→汇编→链接
B. 预处理→汇编→编译→链接
C. 预处理→编译→链接→汇编
D. 预处理→汇编→链接→编译
解析
【答案】 A
这是经典的 C/C++ 程序构建流程(GCC 流程):
- 预处理 : 处理宏定义、头文件包含等(生成
.i文件)。 - 编译 : 将预处理后的代码翻译成汇编语言(生成
.s文件)。 - 汇编 : 将汇编代码翻译成机器语言的目标文件(生成
.o或.obj文件)。 - 链接 : 将目标文件和库函数链接,生成最终的可执行文件(生成
.exe或.out文件)。
【2022-18】下列选项中,属于指令集体系结构(ISA)规定的内容是( )。
Ⅰ. 指令字格式和指令类型
Ⅱ. CPU的时钟周期
Ⅲ. 通用寄存器个数和位数
Ⅳ. 加法器的进位方式
A. 仅Ⅰ、Ⅱ
B. 仅Ⅰ、Ⅲ
C. 仅Ⅱ、Ⅳ
D. 仅Ⅰ、Ⅲ、Ⅳ
解析
【答案】B
指令集体系结构(ISA,Instruction Set Architecture)是软件和硬件之间的界面,是程序员(或编译器)所能看到的计算机属性。简单来说,ISA 规定了“做什么”(功能),而微架构(Microarchitecture)规定了“怎么做”(实现)。
我们来逐项分析:
- Ⅰ. 指令字格式和指令类型(属于 ISA) 这是 ISA 的核心内容。程序员必须知道有哪些指令(如加法、跳转、加载),以及指令是如何编码的(操作码占几位、地址码占几位),才能编写出机器能识别的程序。
- Ⅱ. CPU 的时钟周期(不属于 ISA) 这是计算机的具体实现细节,属于微架构或硬件实现的范畴。同一个 ISA(比如 x86 架构)可以有不同主频的 CPU 实现(如 3.0GHz 和 4.0GHz),但这不影响程序的逻辑正确性,程序员编写程序时通常不需要关心具体的时钟周期长度。
- Ⅲ. 通用寄存器个数和位数(属于 ISA) 程序员在编写汇编语言程序时,必须明确知道有多少个寄存器可用(例如 R0-R31),以及每个寄存器能存多少位数据(32位还是64位),否则无法分配变量或进行运算。因此,这属于程序员可见的属性。
- Ⅳ. 加法器的进位方式(不属于 ISA) 这是算术逻辑单元(ALU)的内部电路设计问题,属于微架构。加法器是采用串行进位还是并行进位(超前进位),只影响运算的速度,不影响运算的结果。程序员只需要知道有一条
ADD指令可以做加法,而不需要知道底层电路是如何处理进位信号的。
综上所述,属于 ISA 规定的内容是 Ⅰ 和 Ⅲ。
【2010-12】下列选项中,能缩短程序执行时间的措施是( )。
Ⅰ. 提高CPU时钟频率
Ⅱ. 优化数据通路结构
Ⅲ. 对程序进行编译优化
A. 仅Ⅰ和Ⅱ
B. 仅Ⅰ和Ⅲ
C. 仅Ⅱ和Ⅲ
D. Ⅰ、Ⅱ和Ⅲ
解析
【答案】D
程序执行时间公式为:
- I. 提高 CPU 时钟频率:时钟频率
提高,意味着时钟周期
(
) 变短。在指令数和 CPI 基本不变的情况下,执行时间缩短。(正确)
- II. 优化数据通路结构:这通常能减少指令执行所需的时钟周期数(降低 CPI)或者缩短关键路径从而允许更高的时钟频率,进而缩短执行时间。(正确)
- III. 对程序进行编译优化:优秀的编译器可以生成更高效的指令序列(减少指令条数),或者通过指令调度降低 CPI,从而缩短执行时间。(正确)
综上,I、II、III 均可缩短执行时间。
【2011-12】下列选项中,描述浮点数操作速度指标的是( )。
A. MIPS
B. CPI
C. IPC
D. MFLOPS
解析
【答案】D
- A. MIPS (Million Instructions Per Second):每秒执行多少百万条指令。这是衡量整数或通用指令执行速度的指标。
- B. CPI (Cycles Per Instruction):执行一条指令所需的平均时钟周期数。它是衡量效率的微观指标,不是速度的直接单位。
- C. IPC (Instructions Per Cycle):每个时钟周期执行的指令数(CPI 的倒数),也是效率指标。
- D. MFLOPS (Million Floating-point Operations Per Second):每秒执行多少百万次浮点运算。这是专门用于衡量科学计算(浮点运算密集型)能力的指标。
【2012-12】假定基准程序A在某计算机上的运行时间为100秒,其中90秒为CPU时间,其余为I/O时间。若CPU速度提高50%,I/O速度不变,则运行基准程序A所耗费的时间是( )。
A. 55s
B. 60s
C. 65s
D. 70s
解析
【答案】D
- 分解时间:总时间 = CPU 时间 + I/O 时间 = 90s + 10s。
- 计算优化后的 CPU 时间:
- CPU 速度提高 50%,意味着新速度是原速度的
倍。
- 时间与速度成反比:
。
- 注意:很多同学会错误地计算为
,这是错误的,速度提高 50% 不等于时间减少 50%。
- 计算总时间:
- I/O 速度不变,仍为 10s。
- 新总时间 =
。
【2013-12】某计算机主频为1.2GHz,其指令分为4类,它们在基准程序中所占比例及CPI如下表所示。
| 指令类型 | 所占比例 | CPI |
|---|---|---|
| A | 50% | 2 |
| B | 20% | 3 |
| C | 10% | 4 |
| D | 20% | 5 |
该机的MIPS数是( )。
A. 100
B. 200
C. 400
D. 600
解析
【答案】C
计算 MIPS 需要两步走:先算平均 CPI,再套用 MIPS 公式。
第一步:计算加权平均 CPI
第二步:计算 MIPS
公式:
(注:将 1.2GHz 视为 1200MHz 计算更简便)
【2014-12】程序P在机器M上的执行时间是20秒,编译优化后,P执行的指令数减少到原来的70%,而CPI增加到原来的1.2倍,则P在M上的执行时间是( )。
A. 8.4秒
B. 11.7秒
C. 14秒
D. 16.8秒
解析
【答案】D
使用比例法计算最为快捷。
原始公式:
(指令数) 变化:变为原来的
。
变化:变为原来的
。
(时钟周期) 变化:机器 M 没变,主频不变,系数为
。
新时间 与旧时间
的关系:
【2017-12】假定计算机M1和M2具有相同的指令集体系结构(ISA),主频分别为1.5GHz和1.2GHz。在M1和M2上运行某基准程序P,平均CPI分别为2和1,则程序P在M1和M2上运行时间的比值是( )。
A. 0.4
B. 0.625
C. 1.6
D. 2.5
解析
【答案】C
- 确定公式:
。
- 分析变量:因为 ISA 相同且运行同一个程序 P,所以指令条数 (N) 相同。
- 建立比值:
- 代入数据:
【2020-12】下列给出的部件中,其位数(宽度)一定与机器字长相同的是( )。
Ⅰ. ALU
Ⅱ. 指令寄存器
Ⅲ. 通用寄存器
IV. 浮点寄存器
A. 仅Ⅰ、Ⅱ
B. 仅Ⅰ、Ⅲ
C. 仅Ⅱ、Ⅲ
D. 仅Ⅱ、Ⅲ、IV
解析
【答案】B
首先明确 机器字长 的定义:指 CPU 进行一次整数运算所能处理的二进制数据的位数。
- I. ALU (算术逻辑单元):必须能够处理机器字长的数据,其宽度等于机器字长。(选)
- III. 通用寄存器 (GPRs):用于存放参与运算的操作数(整数)和地址,其宽度必须与 ALU 匹配,等于机器字长。(选)
- II. 指令寄存器 (IR):用于存放当前正在执行的指令。其宽度取决于指令字长。在变长指令系统(如 x86)或某些体系结构中,指令字长可能不等于机器字长。(不选)
- IV. 浮点寄存器:用于存放浮点数。为了保证精度(如双精度),浮点寄存器的宽度通常大于或等于机器字长(例如 32位机器上可能有 64位浮点寄存器)。(不选)
因此,一定相同的是 I 和 III。
【2021-12】2017年公布的全球超级计算机TOP500排名中,我国“神威·太湖之光”超级计算机蝉联第一,其浮点运算速度为\(93.0146PFLOPS\),说明该计算机每秒钟完成的浮点操作次数为( )。
A. \(9.3×10^{13}\) 次
B. \(9.3×10^{15}\) 次
C. \(9.3\)千万亿次
D. \(9.3\)亿亿次
解析
【答案】D
本题考查数量级单位的换算。
- 识别前缀:P (Peta) 代表
。
- K =
, M =
, G =
, T =
, P =
, E =
。
- 数值换算:
- 对应中文单位:
- 1 亿 =
。
- 1 亿亿 =
。
- 匹配选项:
- A.
- B.
- C. 9.3 千万亿 =
(与B相同)
- D. 9.3 亿亿 =
【2022-12】某计算机主频为1GHz,程序P运行过程中,共执行了10000条指令,其中,80%的指令执行平均需1个时钟周期,20%的指令执行平均需10个时钟周期。程序P的平均CPI和CPU执行时间分别是( )。
A. 2.8,28μs
B. 28,28μs
C. 2.8,28ms
D. 28,28ms
解析
【答案】A
1. 计算平均 CPI ()
平均 CPI 是所有指令执行所需的时钟周期数的加权平均值。
2. 计算 CPU 执行时间 ()
已知:
- 总指令条数
- 平均
- 主频
【2023-12】若机器M的主频为1.5GHz,在M上执行程序P的指令条数为 5×105 ,P的平均CPI为1.2,则P在M上的指令执行速度和用户CPU时间分别为( )。
A. 0.8GIPS、0.4ms
B. 0.8GIPS、0.4μs
C. 1.25GIPS、0.4ms
D. 1.25GIPS、0.4μs
解析
【答案】C
1. 计算指令执行速度 ()
指令执行速度(通常用 GIPS,即 表示,
)等于主频除以平均 CPI。
已知:
- 主频
- 平均
2. 计算用户 CPU 时间 ()
已知:
- 总指令条数
- 平均
- 主频
计算机性能指标¶
一、 性能评价的两个基本维度¶
在不同的应用场景下,人们关注的性能维度不同:
- 响应时间 (Response Time) / 执行时间 (Execution Time)
- 定义:从作业提交开始到作业完成所用的时间。
- 组成:包括 CPU 执行时间 + 等待时间(磁盘访问、内存访问、I/O 操作、操作系统开销等)。
- 适用场景:个人电脑、银行事务处理(关注是否这就办完)。
- 性能关系:执行时间越短,性能越好。
\(\text{性能} \propto \frac{1}{\text{执行时间}}\)
- 吞吐率 (Throughput) / 带宽 (Bandwidth)
- 定义:单位时间内系统能处理的请求或任务数量。
- 适用场景:数据中心、多媒体流、Web 服务器(关注单位时间能处理多少数据)。
二、 与 CPU 时间相关的核心指标¶
这是计算题中最常考的部分,核心在于CPU 执行时间公式。
1. 时钟周期与主频¶
- 时钟周期 (\(T\)):CPU 中最小的时间单位,CPU 仅完成一个最基本的动作。
- 主频 / 时钟频率 (\(f\)):时钟周期的倒数。
- 公式:\(f = \frac{1}{T}\)
- 单位:Hz (赫兹), MHz, GHz。例如 1GHz = \(10^9\) Hz,对应的时钟周期 \(T = 1\text{ns}\)。
2. CPI (Cycles Per Instruction)¶
- 定义:执行一条指令所需的平均时钟周期数。
- 性质:不同指令(如加法、乘法、访存)的周期数不同,因此 CPI 通常指平均值。
- 计算公式:
\(\text{CPI} = \frac{\text{程序所需的总时钟周期数}}{\text{指令条数 (IC)}}\)
\(\text{CPI} = \sum (\text{某类指令的 CPI} \times \text{该类指令的比例})\)
3. CPU 执行时间 (重点)¶
- 定义:指 CPU 真正花费在运行该程序上的时间(不包括 I/O 等待时间)。
- 分类:
- 用户 CPU 时间:执行用户程序代码的时间(通常性能评价主要看这个)。
- 系统 CPU 时间:为了执行程序而花费在操作系统上的时间。
- 核心推导公式("CPU 性能公式"):
\(T_{\text{CPU}} = \text{总时钟周期数} \times T = \frac{\text{总时钟周期数}}{f}\)
\(T_{\text{CPU}} = \frac{\text{指令条数 (IC)} \times \text{CPI}}{f}\)
- 结论:CPU 性能由三个要素共同决定:
- 时钟频率 (\(f\)):由硬件技术和工艺决定。
- CPI:由计算机体系结构和指令集设计决定。
- 指令条数 (IC):由指令集设计和编译器技术决定。
三、 运算速度指标¶
1. MIPS (Million Instructions Per Second)¶
- 定义:每秒执行多少百万条指令。
- 公式:
\(\text{MIPS} = \frac{\text{指令条数}}{\text{执行时间} \times 10^6} = \frac{f}{\text{CPI} \times 10^6}\)
- 局限性:不同机器的指令集不同,指令功能强弱不同(比如一条复杂指令顶五条简单指令),单纯比较指令条数主要用于同系列机对比。
2. IPC (Instructions Per Cycle)¶
- 定义:每个时钟周期执行的指令数。
- 关系:IPC 是 CPI 的倒数 (\(IPC = 1 / CPI\))。现代 CPU 利用流水线和多核技术,IPC 可能大于 1。
3. 浮点运算指标 (FLOPS)¶
- 主要用于衡量科学计算能力。
- MFLOPS (Million): \(10^6\) 次/秒
- GFLOPS (Giga): \(10^9\) 次/秒
- TFLOPS (Tera): \(10^{12}\) 次/秒
- PFLOPS (Peta): \(10^{15}\) 次/秒
- EFLOPS (Exa): \(10^{18}\) 次/秒
- ZFLOPS (Zetta): \(10^{21}\) 次/秒
四、 硬件规格相关概念 (易混淆点)¶
1. "字长" 的辨析¶
- 机器字长:
- 指 CPU 一次能处理的二进制数据的位数。
- 通常等于 CPU 内部寄存器 的位数、ALU 的宽度。
- 直接影响计算机的运算精度和数的表示范围。
- 指令字长:
- 一个指令字中包含的二进制代码的位数。
- 取决于操作码的长度、操作数地址的个数及长度。
- 注意:指令字长与机器字长没有必然联系,可以是机器字长的整数倍或一半。
- 存储字长:
- 一个存储单元存储的二进制代码长度。
- 通常等于 MDR (存储数据寄存器) 的位数。
2. 存储容量¶
- 主存容量:存储单元个数 (\(M\)) \(\times\) 存储字长 (\(N\))。
- 例如:\(1K \times 8\text{位}\)。
- 单位换算注意事项:
- 在描述存储容量时,K, M, G, T 通常按 \(2\) 的幂次计算(\(1K = 2^{10} = 1024\))。
- 在描述速率、频率时,k, M, G, T 通常按 \(10\) 的幂次计算(\(1k = 10^3 = 1000\))。