第 1 章 计算机系统概述
本章地位:组成原理的开篇,直接考分以概念选择题为主(约 2~4 分),但性能指标计算是全卷必考的送分点——主频、CPI、MIPS、CPU 执行时间的「三公式互推」几乎每隔一两年就出一道小计算。真题最爱考三类:① 层次结构与透明性(最易错的概念题);② 冯·诺依曼机的特点辨析(主机、CPU 的范围界定);③ 性能指标计算与比较。本章把这三件事一次讲透,所有计算都代入具体数值逐步演算。
1.1 计算机系统层次结构
- 系统软件:管理整个计算机系统、贴近硬件的软件——操作系统、语言处理程序(编译 / 汇编 / 解释)、数据库管理系统、标准库程序;
- 应用软件:为解决用户的特定问题而编制——购物 App、办公软件、自己写的考研刷题程序。
② 软件与硬件在逻辑功能上等价,不等于「物理上相同」——判断题中「软硬件完全相同」「可以互相替换所以性能一样」都是错的;
③ 没有配置任何软件的计算机称为裸机,裸机之上第一层软件是操作系统。
判断下列说法的正误:(1) 数据库管理系统属于应用软件;(2) 编译程序属于系统软件;(3) 固件就是硬件,与软件无关。
查看答案
(1) 错:DBMS 管理整个系统的共享数据资源,贴近硬件层,属系统软件;用 DBMS 开发出的「学生成绩管理系统」才是应用软件。
(2) 对:语言处理程序(编译 / 汇编 / 解释)是典型的系统软件。
(3) 错:固件是固化在 ROM 中的微程序,本质是「装进硬件外壳的软件」,是软硬件逻辑等价的桥梁形态。
1.1.1 高级语言如何变成机器语言:编译与解释
| 对比项 | 编译方式 | 解释方式 |
|---|---|---|
| 翻译单位 | 整个源程序一次性翻译 | 逐句翻译、译一句执行一句 |
| 是否生成目标程序 | 生成完整目标程序,可反复运行 | 不生成目标程序 |
| 执行速度 | 快(翻译一次即可反复执行) | 慢(每次运行都要重新翻译) |
| 灵活性与可移植性 | 换平台须重新编译 | 便于移植与调试 |
| 代表语言 | C、C++ | Python;Java 先编译为字节码,再由 JVM 解释执行 |
下列关于编译与解释的叙述中,错误的是( )
A. 编译程序将高级语言源程序翻译为目标程序 B. 解释程序不生成目标程序 C. Java 程序先被编译为字节码,再由虚拟机解释执行 D. 同一程序解释方式的执行速度通常快于编译方式
查看解答
D。逐项分析:
A 对:编译的核心特征就是产出完整的目标程序;B 对:解释程序逐句「翻译 + 执行」,不留下目标程序;C 对:Java 是「编译 + 解释」结合的典型。
D 错:解释方式每次运行都要重新逐句翻译,开销重复发生,通常慢于编译方式——「解释快于编译」是反话,命题人最爱这么设错。
1.1.2 五级层次结构与透明性
- 第 5 级·高级语言机器——用编译 / 解释程序支撑,面向用户;
- 第 4 级·汇编语言机器——用汇编程序支撑;
- 第 3 级·操作系统机器——用广义指令(系统调用)支撑;
- 第 2 级·传统机器——机器语言指令集,硬件直接实现;
- 第 1 级·微程序机器——由微指令解释机器指令,硬件实现。
· 对微程序设计师:必须看清传统机器的一切,指令系统对它不透明;
· 对机器语言(汇编)程序员:微程序、数据通路、时序电路、运算器内部结构——透明;通用寄存器、程序状态字 PSW、指令系统——不透明(他要用指令直接操作它们);
· 对高级语言程序员:除上述全部外,寄存器、中断、机器字长细节、I/O 接口——统统透明(C = a + b 根本不让他关心用哪个寄存器)。
② 「对某层透明」说的是该层程序员观察不到,不是「机器里没有」;
③ 常考反问:指令系统对微程序设计师透明吗?——不透明,微程序的任务就是解释每一条机器指令。
对汇编语言程序员透明的是( )
A. 程序状态字寄存器 PSW B. 通用寄存器组 C. 微程序控制器 D. 变址寄存器
查看解答
C。逐项分析:
A 不透明:PSW 中的条件码(进位、溢出、零标志)是汇编转移指令 JC / JZ 的依据,汇编程序员必须能感知;
B 不透明:MOV AX, BX 直接使用通用寄存器,程序员可见;D 同理,变址寻址要用变址寄存器,可见;
C 透明:微程序藏在第 1 级,机器指令如何被微指令解释,汇编程序员既看不见也无法干预。
套路总结:凡是「能用指令直接点名操作」的(寄存器、PSW、寻址方式)都不透明;凡是「机器自己悄悄干」的(微程序、数据通路、时序、Cache 对汇编层以下)都透明。
1.2 冯·诺依曼结构与工作原理 高频考点
1.2.1 存储程序思想与五大部件
- 由上述五大部件组成,以运算器为中心(输入输出经运算器完成,现已成为性能瓶颈);
- 指令和数据以同等地位存放于存储器内,均可按地址访问;
- 指令和数据均用二进制表示;
- 指令由操作码(干什么)和地址码(对谁干)组成;
- 指令在存储器中按顺序存放,通常顺序执行,特定条件下根据运算结果改变执行顺序(转移指令);
- 早期机器数值用定点表示(浮点机后出现)。
② CPU = 运算器 + 控制器,不含存储器;
③ 原始冯·诺依曼机以运算器为中心,现代机器以存储器为中心——判断题把两个时代说反是常见陷阱;
④ 指令和数据「同等地位存放」且形式都是二进制,机器靠取值的阶段(指令周期)区分它们,而不是靠编码长相(见例 3)。
冯·诺依曼计算机中,指令和数据均以二进制形式存放在存储器中,CPU 区分它们的依据是( )
A. 指令操作码的译码结果 B. 指令周期的不同阶段 C. 存放它们的存储单元类型 D. 二进制位串的长短
查看解答
B。逐项分析:
A 错:译码发生在取出之后,且取出的若本身是数据,谈不上译码——因果倒置;
B 对:取指阶段从存储器取出的二进制位串被当作指令送往 IR(指令寄存器);执行阶段取出的才被当作数据送运算器。同一串 0/1,阶段不同身份不同;
C 错:指令和数据混存于同一主存,单元无类型之分;D 错:两者位数可以完全相同。
判断下列说法的正误:(1) 主机由 CPU、主存和磁盘构成;(2) 冯·诺依曼机以存储器为中心;(3) 存储程序是指把指令和数据预先存入存储器,机器按地址自动逐条取出并执行。
查看答案
(1) 错:主机 = CPU + 主存;磁盘是外存,属外围设备,不在主机之列。
(2) 错:原始冯·诺依曼机以运算器为中心;现代机器才改为以存储器为中心。题目若限定「现代机器」则对,默认语境(冯·诺依曼机)则错。
(3) 对:这正是「存储程序」的标准表述——先存后取、按地址访问、自动连续执行,缺一不可。
1.2.2 工作过程:取指 → 分析 → 执行
下列关于冯·诺依曼计算机的叙述中,错误的是( )
A. 指令和数据以同等地位存放于存储器,均可按地址访问 B. 指令由操作码和地址码组成 C. 指令只能按存放顺序执行,无法改变执行顺序 D. 机器以运算器为中心,输入输出设备与存储器间的数据传送大多经运算器
查看解答
C。逐项分析:
A 对、B 对:都是冯·诺依曼机的标准特点;D 对:这正是「以运算器为中心」的含义,也是现代机器改用「存储器为中心 + 总线」的原因。
C 错:指令通常顺序存放、顺序执行,但允许根据运算结果改变执行顺序(转移 / 跳转指令)——「只能顺序执行」把话说过头了;程序能有分支、循环、函数调用正依赖这一点。
1.3 计算机性能指标 必考计算
1.3.1 机器字长、数据通路宽度与主存容量
- 机器字长:CPU 一次能处理的二进制数据的位数,通常与 CPU 内部通用寄存器的位数一致。字长越长,一次参加运算的数越多,精度越高、速度越快;
- 数据通路宽度:数据总线一次可并行传送的二进制位数,决定部件间一次「搬运」多少位;
- 存储字长:一个存储单元中存放的二进制代码的位数(由 MDR 的位数体现)。
某计算机主存 MAR 为 16 位,MDR 为 32 位,求主存的存储单元个数与总容量。
查看解答
第一步,存储单元个数由 MAR 位数决定:
\[ N = 2^{16} = 65536\ \text{个单元}\quad(\checkmark:\ 2^{10}=1024,\ 2^{16}=1024\times64=65536) \]第二步,存储字长由 MDR 位数决定:32 bit = 4 B。
第三步,总容量:
\[ 65536\times4\ \text{B} = 262144\ \text{B} = 256\ \text{KB}\quad(\checkmark:\ 262144/1024=256) \]套路总结:MAR 管「有多少个房间」,MDR 管「每个房间多大」,二者相乘即容量;只给 MAR 位数时答案只能说单元数,不能默认字节编址。
② 机器字长 ≠ 存储字长:运算器一次算 32 位,不要求一个存储单元恰好 32 位;
③ 单元个数只看 MAR,与 MDR 无关——「MDR 16 位所以有 \(2^{16}\) 个单元」是典型错误。
1.3.2 运算速度:主频、CPI、MIPS 与 CPU 执行时间
- 主频 \(f\):CPU 时钟脉冲的频率;时钟周期 \(= 1/f\),是 CPU 操作的最小时间单位(主频 2 GHz 对应 0.5 ns);
- CPI(Cycle Per Instruction):执行一条指令平均需要的时钟周期数;
- MIPS:每秒执行多少百万条指令;MFLOPS:每秒执行多少百万次浮点操作——只统计浮点运算,衡量科学计算能力;
- CPU 执行时间:一段程序真正占用的 CPU 时间,是衡量性能最可靠的尺度。
某 CPU 主频 2 GHz,运行一个含 \(10^{9}\) 条指令的程序,平均 CPI = 2。求时钟周期、程序的总时钟周期数、CPU 执行时间与 MIPS。
查看解答
① 时钟周期:
\[ T_{\text{clk}}=\frac{1}{f}=\frac{1}{2\times10^{9}}\ \text{s}=0.5\ \text{ns}\quad(\checkmark) \]② 总时钟周期数:
\[ I\times\text{CPI}=10^{9}\times2=2\times10^{9}\ \text{个周期}\quad(\checkmark) \]③ CPU 执行时间:
\[ T_{\text{CPU}}=\frac{2\times10^{9}}{2\times10^{9}}=1\ \text{s}\quad(\checkmark) \]④ MIPS(每秒百万条指令):1 s 执行了 \(10^{9}\) 条,即 \(10^{9}/10^{6}=1000\) 百万条:
\[ \text{MIPS}=\frac{10^{9}}{1\times10^{6}}=1000\quad(\checkmark) \]验算用第二公式:MIPS = f/(CPI×10⁶) = 2×10⁹/(2×10⁶) = 1000 ✓,两公式结果一致。
同一程序(\(10^{9}\) 条指令)分别在 A、B 两台机器上运行:A 机主频 2 GHz、CPI = 2;B 机主频 3 GHz、CPI = 4。哪台更快?
查看解答
A 机:
\[ T_{\text{A}}=\frac{10^{9}\times2}{2\times10^{9}}=1\ \text{s}\quad(\checkmark) \]B 机:
\[ T_{\text{B}}=\frac{10^{9}\times4}{3\times10^{9}}\approx1.33\ \text{s}\quad(\checkmark:\ 4/3=1.333) \]B 机主频高 50%,执行时间反而多约 33%——主频只是分母,CPI 在分子上等着。评价机器必须「主频 × CPI(× 指令数)」一起看。
某 CPU 主频 1 GHz,程序含 \(2\times10^{8}\) 条浮点运算指令,每条浮点指令 CPI = 4,其余开销忽略。求程序执行时间与 MFLOPS。
查看答案
总周期数:\(2\times10^{8}\times4=8\times10^{8}\);执行时间:
\[ T=\frac{8\times10^{8}}{1\times10^{9}}=0.8\ \text{s}\quad(\checkmark) \]每秒完成浮点操作 \(2\times10^{8}/0.8=2.5\times10^{8}\) 次,即 \(250\) 百万次:
\[ \text{MFLOPS}=\frac{2\times10^{8}}{0.8\times10^{6}}=250\quad(\checkmark) \]判断:(1) 机器字长一定等于数据通路宽度;(2) 主频相同的两台机器运行同一程序必然一样快;(3) MIPS 大的机器对任何程序都快。
查看答案
(1) 错:机器字长是 CPU 一次能处理的位数,数据通路宽度是总线一次能传送的位数,二者可以不同。
(2) 错:由 \(T=I\times\text{CPI}/f\),主频相同还要 CPI 相同、指令数相同才同速(例 7 已给反例思想)。
(3) 错:MIPS 依赖指令集——精简指令集的 MIPS 偏高不代表单条指令干得多;跨指令系统比较应用基准程序测总执行时间。
② CPI 是平均概念:不同指令周期数不同,程序级 CPI 按各类指令的出现频度加权平均;
③ MFLOPS 只计浮点操作,不能反映整数 / 分支密集程序的性能;
④ 时钟周期与主频互为倒数,单位换算失误是计算题最大失分点:1 GHz = \(10^{9}\) Hz,1 ns = \(10^{-9}\) s。
1.4 发展历程与分类
器件换代是划分计算机「代」的依据,一代一句话记住即可:第一代电子管(体积大、机器语言编程)→ 第二代晶体管(高级语言、监控程序出现)→ 第三代中小规模集成电路(操作系统成形)→ 第四代大规模 / 超大规模集成电路(微处理器 PC 诞生,至今)。
- SISD(单指令流单数据流):传统串行单处理器;
- SIMD(单指令流多数据流):一条指令同时处理一批数据——向量处理机、阵列处理器属此类(也是 GPU / 多媒体指令 MMX/SSE 的思想源头);
- MISD(多指令流单数据流):仅有定义,无实际机型;
- MIMD(多指令流多数据流):多核处理器、多机系统——各核执行各自的程序流。
1.5 章末自测 真题风格
限时 40 分钟,先做后看答案。难度:★★ 基础 / ★★★ 强化 / ★★★★ 冲刺。计算题全部要求代入具体数值逐步演算并用第二种公式验算。
下列关于翻译程序的叙述中,正确的是( )
A. 编译程序和解释程序都生成目标程序 B. 解释程序边翻译边执行,不生成目标程序 C. 汇编程序将高级语言翻译成机器语言 D. C 语言程序在运行过程中被逐句解释
查看答案
B。A 错:解释不生成目标程序;C 错:汇编程序翻译的是汇编语言源程序;D 错:C 走编译路线,Python 才是逐句解释。
下列各组中,对机器语言程序员全部透明的是( )
A. 指令系统、通用寄存器 B. 微程序、数据通路、时序产生逻辑 C. 程序状态字 PSW、变址寄存器 D. 中断向量、转移指令
查看答案
B。机器语言程序员能用指令点名的都不透明:指令系统(A)、PSW 与变址寄存器(C)、转移指令与中断(D)皆可见;只有藏在传统机器之下的微程序、数据通路、时序这些「硬件自己悄悄干」的事对他透明。
下列关于冯·诺依曼计算机的叙述中,错误的是( )
A. 指令和数据同等存于存储器,按地址访问 B. 指令由操作码和地址码组成 C. 原始冯·诺依曼机以存储器为中心 D. 指令和数据都用二进制表示
查看答案
C。原始冯·诺依曼机以运算器为中心,I/O 经运算器进行;「以存储器为中心」是现代机器的改进。A、B、D 均为标准特点。
取指令阶段结束时,取出的指令的二进制代码存放于( )
A. 程序计数器 PC B. 存储器地址寄存器 MAR C. 存储器数据寄存器 MDR D. 指令寄存器 IR
查看答案
D。取指路径:PC 给地址 → MAR → 主存读出 → MDR → 送入 IR 保存等待译码;PC 只存下一条指令的地址,MAR / MDR 是访存的中转寄存器。MDR 只是途中一站,阶段结束时指令已在 IR。
按 Flynn 分类法,向量处理机属于( )
A. SISD B. SIMD C. MISD D. MIMD
查看答案
B。向量机用一条向量指令同时对一批数据(多数据流)并行加工,属 SIMD;MISD 无实际机型;多核处理器才属 MIMD。
某机主存 MAR 为 24 位、MDR 为 64 位,其主存容量为( )
A. 16 MB B. 64 MB C. 128 MB D. 192 MB
查看答案
C。单元数 \(2^{24}=16\text{M}\) 个(\(\checkmark\):\(2^{20}=\)1M,\(2^{24}=16\times2^{20}\));每单元 64 bit = 8 B;容量 \(=16\text{M}\times8\text{B}=128\ \text{MB}\)(\(\checkmark\))。
某 CPU 主频 3 GHz,程序含 \(6\times10^{9}\) 条指令,平均 CPI = 1.5。程序执行时间为 \(\underline{\hspace{1cm}}\) s,该机 MIPS 为 \(\underline{\hspace{1cm}}\)。
查看答案
总周期数 \(=6\times10^{9}\times1.5=9\times10^{9}\);
\[ T=\frac{9\times10^{9}}{3\times10^{9}}=3\ \text{s}\quad(\checkmark) \]
\[ \text{MIPS}=\frac{6\times10^{9}}{3\times10^{6}}=2000\quad(\checkmark) \]
验算:\(\text{MIPS}=f/(\text{CPI}\times10^{6})=3\times10^{9}/(1.5\times10^{6})=2000\) ✓。
某 CPU 主频 2 GHz,运行一段含 \(4\times10^{8}\) 条指令的程序耗时 0.3 s。该程序在此机上的平均 CPI 为 \(\underline{\hspace{1cm}}\)。
查看答案
0.3 s 内共含时钟周期数:
\[ 2\times10^{9}\times0.3=6\times10^{8}\ \text{个周期}\quad(\checkmark) \]\[ \text{CPI}=\frac{6\times10^{8}}{4\times10^{8}}=1.5\quad(\checkmark) \]
套路总结:反求 CPI / 指令数 / 主频,都是先把 \(T\times f\) 换成「总周期数」这一桥梁量,再除 / 乘已知项。
甲说「主频 4 GHz 的机器一定比 3 GHz 的快」,乙说「MIPS 高的机器一定好」。请分别指出两句话的问题,并说明科学比较两台机器性能应怎么做。
查看解答
两句话的问题:
① \(T_{\text{CPU}}=I\times\text{CPI}/f\):主频只出现在分母,若高主频机器的 CPI 更大(如采用更复杂的功能划分),执行时间反而更长(本章例 7:3 GHz 机器输给 2 GHz 机器),主频高 ≠ 快;
② MIPS 依赖指令系统:RISC 机器指令功能简单、条数多,MIPS 天然偏高,但不代表每个程序都快;不同指令集的 MIPS 不可直接比较。
科学做法:选取与实际工作负载相近的基准程序(如 SPEC),在两机上运行并比较总执行时间(响应时间);面向服务场景还要结合吞吐率综合评价。
1.6 本章考点总结
| 考点 | 常考题型 | 热度 | 核心方法 |
|---|---|---|---|
| 层次结构与透明性 | 选择题 | ★★★★ 高频 | 先问「对谁透明」;能用指令点名的(寄存器、PSW、指令系统)不透明;硬件自己干的(微程序、数据通路、时序)透明 |
| 编译与解释 | 选择题 | ★★★ | 是否生成目标程序;解释慢但易移植;Java 先编译字节码再解释 |
| 冯·诺依曼特点 | 选择题 | ★★★★ 高频 | 存储程序(最根本);以运算器为中心;指令 = 操作码 + 地址码;指令 / 数据按指令周期阶段区分;顺序存放、可转移 |
| 部件归属 | 选择题 / 判断 | ★★★★ 易错 | CPU = 运算器 + 控制器;主机 = CPU + 主存;外存与 I/O 属外围设备;指令流进控制器、数据流过运算器 |
| MAR / MDR 求容量 | 选择 / 填空 | ★★★★ | 单元数 \(=2^{\text{MAR 位数}}\);存储字长 = MDR 位数;容量 = 单元数 × 存储字长 |
| 三公式计算 | 选择 / 填空 | ★★★★★ 必考 | \(T=I\times\text{CPI}/f\);MIPS \(=f/(\text{CPI}\times10^{6})\);先算总周期数 \(I\times\text{CPI}\) 作桥梁,再互换求第三量 |
| 性能比较观念 | 解答题 | ★★★ | 主频高 ≠ 快(CPI 在分子);跨指令集看基准程序(SPEC)总执行时间;吞吐率对量、响应时间对快 |
| Flynn 分类 | 选择题 | ★★★ | 向量机 / 阵列机 = SIMD;多核 = MIMD;MISD 无实际机型 |