简介:《计算机系统概论(原书第二版)》第一章习题答案,适合计算机专业本科生、考研复习者及自学人群,用于对照教材核心知识点查漏补缺,并检验对冯·诺依曼架构、模拟与数字系统、组合逻辑电路、性能权衡及高级语言抽象层次的理解。资源仅含1个PDF文件,压缩包体积33KB,内容覆盖1.1、1.3、1.5、1.7、1.15等多个课后习题的英文原题与规范解答,包含加法器、乘法器等组合逻辑电路设计步骤,以及ISA与微架构的概念辨析,便于快速定位与核对。目前已有720人学习下载。通过这份答案,读者可以掌握第一章关键习题的推导思路与英文表达,尤其适合备考期末、准备复试或自学时集中复习计算机系统基础概念,辅助建立从硬件逻辑到软件编程的完整认知框架。
1. 从一道CPI计算题说起:第一章习题到底在考什么
翻开《计算机系统概论(原书第二版)》第一章的习题,很多人第一反应是去找那本传说中的"习题答案"。可真正对着答案看的时候,往往更懵:答案只写了结果,没写为什么这么代公式;概念题只给了几个关键词,你不知道哪些关键词能得分、哪些写了也白写。第一章是全书地基,它不会直接让你写汇编,也不会让你画门电路,但它会用一套概念把硬件、软件、性能串成一条线,用题逼你把这条线走通。
这篇笔记不做逐题复制粘贴,只做一件事:把第一章的习题拆成四种题型,给每类题一套能落地的解题模板和参数推导方法,再列出我批改时见过的高频翻车点。适合两类人——刚学完第一章、做题总差半口气的同学,以及想快速复习"性能计算"这条主线的在职读者。看完你会明白:答案不是拿来对的,是用来验证思路的。
2. 第一章的知识骨架:把计算机系统概论拆成四个能做题的模块
第一章题目再多,也绕不开四个知识模块。这四个模块对应四种出题源头,先把它们的边界画清楚,做题时就知道该调取哪块知识。
2.1 硬件四件套:CPU、内存、I/O 与总线都在干什么
第一章反复强调一个观点:计算机系统由硬件和软件共同组成,硬件部分是看得见摸得着的物理实体。绝大多数教材会把硬件拆成四大部件:中央处理器(CPU)、主存储器、输入输出设备(I/O),以及把它们连接起来的总线。
这里有个非常容易被忽略的考点:CPU 内部不是一块铁板,它由运算器、控制器和寄存器组构成。习题常让你区分"运算器负责算术逻辑运算,控制器负责取指令和发出控制信号,寄存器组负责暂存数据"。我批过不少作业,写到运算器和控制器的人很多,但把寄存器单独提出来的人很少——而在判断题里"寄存器属于CPU的一部分"恰恰是高频考点。
主存储器和外存的区别也是必考。主存(内存)直接和CPU交换数据,按地址访问,断电丢数据;外存(磁盘、SSD)用于长期保存,断电不丢。习题如果问"某数据断电后仍然存在,它可能在哪个部件中",答案不是内存,而是外存或者只读存储器。做题时先把"存储层次"的职责分清:寄存器最快最贵,内存次之,外存最慢最便宜。
I/O设备的考点就更直白:输入设备把外部信息变成计算机能处理的数据,输出设备把处理结果变成人能感知的形式。真正容易丢分的是总线——总线是传输介质,不是设备。题目问"CPU 和内存之间靠什么交换数据",很多人的第一反应是"内存”,实际上应该答“总线(或者系统总线)”。记住一句话:部件是节点,总线是连节点的路。
2.2 冯·诺依曼结构:存储程序是第一章的灵魂
第一章大概率会在开篇不久就给出冯·诺依曼结构,它是整个体系的支点。冯·诺依曼结构最核心的贡献不是"计算机要有CPU、内存、I/O"——这个划分之前就有人提过——而是存储程序思想:把程序和数据一起存放在存储器中,计算机按顺序逐条取出指令并执行。
这个思想的直接推论有两个,都是命题点。第一,指令和数据在存储器里形式上没有区别,都是二进制串,CPU是靠"取出时机和用途"来区分它们的。第二,程序必须加载到内存才能执行,外存里的程序只是"躺在那里",不进入内存就无法被CPU取指。习题如果给一段描述:"程序保存在硬盘上,CPU 直接从硬盘取指令执行",这通常是错的,因为CPU不能直接访问外存。
做题建议是画一条执行链:程序在外存 → 加载到内存 → CPU 从内存取指令 → 译码 → 执行 → 写回结果。任何一道问"指令执行流程"的题,把这六步写全,再配上一句话说明每一步在哪个部件完成,得分点基本就齐了。不要只写"取指、译码、执行"三个词,那个太薄,很多答案给分是按部件对应的。
2.3 性能计算链:主频、CPI、指令数、执行时间的关系
这一节是整个第一章习题的技术含量所在,也是"对着答案也看不懂"的重灾区。性能计算围绕一条核心公式展开:
执行时间 = 指令数 × CPI × 时钟周期
时钟周期是主频的倒数。如果主频是 2 GHz,那么时钟周期就是 1 / (2×10⁹) 秒,也就是 0.5 纳秒。这里最容易翻车的不是公式记不住,而是单位换算:主频用 GHz,指令数用百万条(MIPS 里那个 M),CPI 又是平均每指令周期数,三者单位不统一,直接相乘会差出几个数量级。
我见过最典型的错误是:把 MIPS(每秒百万条指令)当成"指令数"去参与计算。MIPS 是性能指标,不是指令数的计数单位。正确做法是先把所有单位化成基本单位:指令数用"条",时间用"秒",主频用"Hz"。公式里的 CPI 全称是 Cycles Per Instruction,平均每条指令消耗的时钟周期数,它把"指令数"和"时钟周期数"桥接起来。实际做题时,题目经常给你两种数据:一是指令条数和 CPI,二是主频,让你求执行时间;或是反过来,给你执行时间和指令数,让你反推 CPI。不管题目怎么变,都要先写出这三个量的关系,再代入数据。
还有一个概念要和 CPI 区分开:时钟频率本身不等于性能。两个处理器主频一样,CPI 不同,执行同一程序的耗时也不同。这个点在简答题里经常出现,用来考察"性能由多因素决定"的观念。
2.4 层次视角:从高级语言到晶体管的分层协作
第一章的最后一块知识是计算机系统的层次结构。不同教材分层方式略有差异,但主干是一致的:从上到下依次是应用问题、高级语言、汇编语言、操作系统、指令集架构、微体系结构、数字电路。习题不会让你默写每一层,但会让你回答两个问题:某个问题发生在哪一层,或者某层之间通过什么接口通信。
这里面最值得记的接口是两个:高级语言和汇编语言之间的编译,汇编和机器指令之间的汇编,以及指令集架构(ISA)和微体系结构之间的实现关系。ISA 是程序员能看到的机器接口,微体系结构是硬件怎么实现这套接口,同一个 ISA 可以有不同实现——这是第一章少有的"业界真实感"知识点,也是很多同学理解困难的地方。
层次结构的做题技巧是"上推与下探":题目给一个现象,先判断它属于哪一层,再判断相邻层谁对上负责、谁对下实现。比如"编译器把 C 代码变成汇编",这是高级语言层向汇编语言层的翻译;"CPU 如何完成一条加法指令",这是微体系结构层实现 ISA 层。把这种上下关系写清楚,比堆一堆名词得分高。
3. 第一章习题的四种题型与解题模板
第一章的课后题无论怎么变,本质只有四类:概念辨析、结构描述、性能计算、简答论述。每种题型有各自的得分逻辑,下面直接给模板。
3.1 概念辨析题:先界定术语,再谈关系
概念辨析题通常长这样:"判断对错并说明理由:计算机的性能只取决于时钟频率。"或者给一组术语,让你说明它们之间的区别和联系。这类题看着简单,实际阅卷时最看重的不是你背没背关键词,而是你有没有把术语之间的关系说清——注意,是说关系,不是罗列定义。
我的答题模板是三步:定义、关系、边界。先给术语下一个一句话定义,例如"CPI 是每条指令平均消耗的时钟周期数";再说它与相邻术语的关系,比如"CPI 和时钟周期相乘,再乘以指令数,得到程序执行时间";最后指出边界,比如"CPI 低不代表整体快,因为指令数可能更大"。不要小看这个三步,一个"关系"描述往往顶三个关键词的分。
如果题目要求你区分两个易混概念,比如"主频和 MIPS",先各自定义,再指出一个衡量时钟快慢、一个衡量指令吞吐率,最后给出二者没有必然正比关系的判断。这样的结构在阅卷时一眼就是完整答案。反过来,只写"主频是1秒内的时钟周期数,MIPS是每秒百万指令",中间没有建立联系,在很多评分标准里只能拿一半分。
3.2 结构描述题:画图顺序决定印象分
结构描述题常见的问法是"画出冯·诺依曼结构框图并说明各部分作用"或者"描述一条指令在计算机中的执行过程"。这种题有个隐性要求:你不仅要会,还要写得像"懂行的人写的",而不是像背书。
我的习惯是先用文字交代连接关系,再补功能。以冯·诺依曼结构图为例:先写"CPU 通过系统总线与主存、I/O 设备相连,数据在 CPU 与主存之间双向流动",再逐一说明运算器执行算术逻辑运算、控制器产生控制信号、寄存器暂存数据和指令、主存按地址存取。这样写的好处是:即使你图画得不够漂亮,文字已经把连接关系讲清楚了——而连接关系才是这个知识点的核心。
描述指令执行过程时,用"取指、译码、执行、写回"四阶段,每一阶段加一句"此时数据位于哪个部件"。比如"取指阶段,CPU 按程序计数器给出的地址,从主存中取出指令送入指令寄存器"。阅卷时最反感的是只写"CPU 取指令,然后执行",因为缺少部件名称,等于没答。给每个阶段贴上部件标签,这道题的得分点就全部踩中。
3.3 性能计算题:CPI 与执行时间的最小推导模板
性能计算题是第一章里唯一需要动笔算的题型,也是最值得用"模板化"方式处理的题。先给一道标准的示例:
某处理器主频为 2 GHz,执行一个程序共包含 4×10⁶ 条指令,平均 CPI 为 1.5。求该程序的执行时间;若将平均 CPI 降到 1.0,主频不变,执行时间变为多少?
这套计算题背后其实是同一个式子:
# 性能计算最小推导模板 freq = 2e9 # 主频 2 GHz,换成 Hz instructions = 4e6 # 指令数,单位是"条" cpi = 1.5 # 平均 CPI clock_cycle = 1 / freq # 时钟周期 = 主频的倒数 time_total = instructions * cpi * clock_cycle print(f"执行时间: {time_total:.6f} 秒") cpi_new = 1.0 time_new = instructions * cpi_new * clock_cycle print(f"CPI 降为 1.0 后: {time_new:.6f} 秒")执行时间: 0.003000 秒 CPI 降为 1.0 后: 0.002000 秒这段代码展示了计算题的标准路径:先把主频从 GHz 换算成 Hz——这是整个推导里最容易出错的一步;再把指令数用科学计数法写清楚,避免后面乘出多余的"百万"量级;最后严格按"时钟周期=主频倒数"和"执行时间=指令数×CPI×时钟周期"两步走。如果题目给的参数带分数,比如 CPI 是 0.5 的倍数,先化成小数再代入,不要一路保留分数到最终结果。
参数说明:freq必须用 Hz 做单位,2 GHz 对应2e9;instructions用"条"做单位,不要用"百万条";cpi是平均值,题目给的是指令类型占比时,要先按占比加权求出平均 CPI 再代入。实际考试不许用代码,但可以在草稿纸上列两步:先写"时钟周期 = 1/主频",再写"执行时间 = 指令数 × CPI × 时钟周期"。这两行写出来,即使最后数值算错,也可能保住步骤分。
另一类常见变体是求 MIPS,计算公式为 MIPS = 主频 / (CPI × 10⁶)。这里特别提醒:MIPS 的 M 是"百万",公式里除 10⁶ 就是为了把每秒执行的指令数换算成"百万条每秒"。如果题目要求你比较两个处理器,建议不要只看 MIPS,还要看指令数差异,否则会掉进出题人设置的陷阱。
3.4 问答题:把"是什么"升级成"为什么"
第一章的问答题通常不会直接问定义,而是给出一个情境,问"为什么这样设计"或"这样做的优缺点"。例如:"为什么计算机内部采用二进制表示数据?""为什么程序必须加载到内存才能运行?"这种题最忌讳只回答"因为计算机是二进制"这种单向陈述。
回答的杠杆点在于因果关系。以"程序必须加载到内存才能运行"为例,标准的因果链是:CPU 只能访问主存,不能直接访问外存 → 程序在外存时 CPU 无法取指 → 必须先把程序复制到主存 → 才能按地址逐条取指执行。这条链的五句话缺一不可。答"因为内存快"属于结果倒推,没有解释机制,在阅卷里撑不过两行。
另一个高频问答题是"为什么用层次结构组织计算机系统"。可以从两个角度答:一是复杂度管理,层次把复杂问题逐层抽象,用户只面对高级语言,底层细节被封装;二是可移植性,上层应用不直接依赖底层硬件,换个机器只要保留兼容接口就还能跑。这两个角度都踩在"为什么"上,比默写每层名字有用得多。
4. 对着答案做题最容易翻车的5个坑
第一章习题的答案在网上有好几个流传版本,我做过横向比对,同一个题在不同版本里甚至会出现数值差异。如果只对着答案背、不理解推导过程,会踩到下面这些真实存在的坑。
4.1 单位换算出错:GHz 和 Hz 差着十个数量级
现象:算出来的执行时间比参考答案小 1000 倍,或者大 10⁹ 倍,自查公式发现没问题,最后发现是主频单位没换算。
原因:题目写 2 GHz,直接代入公式时把 2 当成 2 Hz 用,时钟周期算成了 0.5 秒,导致执行时间大得离谱;或者反过来,把指令数的"百万"漏掉,结果时间小得离谱。还有更隐蔽的,算 MIPS 时忘记除以 10⁶,把每秒百万条指令写成了每秒多少亿条指令。
解决:拿到数据先统一单位,主频一律写成一秒多少次(Hz),指令数一律写成"条",然后用科学计数法代入。我给自己定的步骤是:先换算,再列公式,最后才按计算器。不要省掉任何一步,因为换算恰恰是阅卷时最容易扣过程分的环节。
4.2 把 MIPS 和 CPI 混着用
现象:计算执行时间时,题目给了 MIPS,有人直接用"指令数 ÷ MIPS"来算,结果和答案对不上。
原因:MIPS 是"每秒百万条指令",它是执行时间的倒数形态,不是指令数的单位。用"指令数 ÷ MIPS"算出来的东西只有在某些特定条件下才接近执行时间,而且要在百万量级换算上再做一次转换,很容易错。
解决:如果题目给 MIPS,第一件事是先把它换算成 CPI,公式是 CPI = 主频 / (MIPS × 10⁶),再把 CPI 代入执行时间公式。如果题目给 CPI,就不要再绕道 MIPS。一句话:同一个计算题里,CPI 和 MIPS 只用其中一个作为中间量,不要两个同时参与运算。
4.3 对着版本不一致的答案硬背
现象:某道题在你手上这本书的习题编号是 1.12,网上答案是 1.12,但内容和教材正文对不上,数值也对不上。
原因:《计算机系统概论(原书第二版)》有英文原版和中文翻译版的差异,习题编号和个别数据在不同印次里会调整。网上的答案版本可能对应英文版或者另一印次,直接照抄必然翻车。
解决:核对答案前,先确认你手上的题目数据(主频、指令数、CPI)和答案里代进去的数据是否一致。不一致时,以你手上这本教材的题目为准,只参考答案的推导方法,不要硬背最终数值。数据不同但方法相同的题,用方法重算一遍,比抄答案可靠得多。
4.4 概念题只写关键词,不写对象之间的关系
现象:答案里写了"CPU""主存""总线"一堆词,但老师批改时只给了少量分数,理由是"没有回答问题"。
原因:概念题的问法通常是"说明 A 和 B 的区别和联系",只罗列 A 的功能、B 的功能,没有一句话说明二者通过什么联系起来。阅卷人找不到"关系"这一层,自然不知道你在回答这道题。
解决:先用一句话点明关系,再展开。比如问"CPU 和主存的关系",先写"CPU 通过总线访问主存中的数据与指令",再补充 CPU 负责取指执行、主存负责按地址存储。关系句放最前面,后面的细节都是支撑,哪怕细节写不全,主要得分点也已经拿到。
4.5 只看最后结果,不看推导的起跑线
现象:做题时对答案"好像懂了",但隔三天再做同类型题,又在同一个地方卡住。
原因:这是最普遍的坑,原因只有一个:你只看了答案的最后一行,没有追溯第一步为什么从"时钟周期 = 1/主频"开始。习题答案的数值是终点,推导顺序才是起点。你跳过起点看终点,等于没学。
解决:每次对答案时,先在草稿纸上自己写一遍完整推导,再和答案对照。重点看第一步:题目给的数据,对应公式里的哪个变量,单位是什么。第一步如果对了,后面即使算错也知道错在哪里;第一步就错了,说明你还没识别出这道题属于哪类题型,需要回到第 3 章重新过一遍模板。
5. 用一张自测清单,检验第一章是否真的过关
与其反复"做题—对答案—忘掉",不如把第一章的验收标准做成一张可勾选的清单。我一般推荐的做法是:先不看任何资料,用 15 分钟回答下面这些问题,能答出 80% 以上,才说明第一章真正过关了。回答不出来的,就是你需要回去补的模块。
| 自测问题 | 考察点 | 答不出来的补救方向 |
|---|---|---|
| 冯·诺依曼结构的核心思想是什么? | 存储程序 | 回看 2.2 节的六步执行链 |
| 指令和数据在内存中怎么区分? | 指令与数据的本质 | 回到取指与执行两个阶段 |
| 写出执行时间与主频、CPI、指令数的关系,并说明它的单位要求 | 性能计算链 | 把 3.3 节的代码模板重写一遍 |
| 主频高的 CPU 一定更快吗? | 多因素决定性能 | 用 CPI 和指令数各举一个反例 |
| CPU 能直接执行外存里的程序吗?为什么? | 存储层次与取指机制 | 从"CPU 只能访问主存"推导一遍 |
| 常见处理器主频 2 GHz 的含义是什么? | 单位理解 | 翻译成"每秒 2×10⁹ 个时钟周期" |
这个清单比反复刷题高效的地方在于,它逼你从"会背答案"转向"能解释为什么"。我自己的习惯是做完一章习题后,把错题按上面表格的类型打标签——概念辨析、结构描述、性能计算、问答题——连续两周复习时只重做标签最多的那一类,不再整套刷。这种方法帮我保持了很长一段时间的低错率,也适合当作你复习第一章的固定动作。
最后一句话提醒:习题答案的价值在于暴露你的推导断点,而不在于那个最终数值。第一次做错不丢人,丢人的是同一个断点连续遇上三次还不回头查。把断点记下来,下次做题前先翻它一眼,错题自然越来越少。希望这篇笔记能帮你在第一章稳稳打牢地基,后面几章的路会好走很多。
本文还有配套的精品资源,点击获取