计算机系统原理简答题快速记忆方法
第一章 计算机系统概述
必考题速记
① 冯·诺依曼计算机组成及功能
口诀:"两输运控存"
| 部件 | 功能 |
|---|
| 输入设备 | 接收用户输入 |
| 输出设备 | 展示处理结果 |
| 运算器 | 算术+逻辑运算 |
| 控制器 | 取指→译码→控制协调 |
| 存储器 | 存储程序和数据 |
② 存储程序工作方式(3句话版本)
- 程序和数据以二进制预先存入存储器
- 运行时自动从存储器取出指令执行
- 实现了自动连续执行,提高工作效率
③ 指令执行四个阶段
取指令 → 分析指令(译码) → 执行指令 → 存储结果
↑ ↑ ↑ ↑
从存储器 确定操作性质 具体操作 写回存储器
取出指令
④ 计算机层次结构(由低到高)
口诀:微机操汇高
- 微程序机器层 ← 硬件直接执行
- 机器语言机器层 ← 机器指令
- 操作系统机器层 ← 系统调用
- 汇编语言机器层 ← 汇编语言
- 高级语言机器层 ← C/Java等
⑤ 为什么MIPS不能很好反映性能?
| 原因 | 说明 |
|---|
| 原因1 | 只考虑指令数量,忽略指令复杂性 |
| 原因2 | 忽略内存访问、I/O等影响因素 |
| 原因3 | 理论值与实际运行存在差距 |
第二章 数据的表示和运算
必考题速记
① 为什么用二进制?
- 只有0和1两种状态 → 与电路开关一致
- 运算规则简单 → 计算高效
- 抗干扰能力强 → 只涉及两种状态
② 浮点数表示范围和精度由什么决定?
| 组成 | 决定 |
|---|
| 阶码 | 表示范围(指数大小) |
| 尾数 | 表示精度(小数位数) |
记忆:阶码管"大小",尾数管"精细"
③ 为什么要规格化?两种操作?
- 目的:提高浮点数的精度和运算效率,确保尾数最高位为1
| 操作 | 方向 | 触发条件 |
|---|
| 左规 | 尾数左移,阶码减小 | 处理尾数溢出 |
| 右规 | 尾数右移,阶码增大 | 处理尾数下溢 |
④ 汉字编码为什么要多种编码?
| 编码类型 | 是否二进制 | 用途 |
|---|
| 输入码(拼音/五笔) | 否 | 方便人输入 |
| 内码(GB2312等) | 是 | 计算机内部存储 |
| 字模码(点阵) | 是 | 显示字形 |
记忆:输入给人用 → 内码给机器用 → 字模给显示用
第三章 程序的转换及机器级表示
必考题速记
① 高级语言→可执行文件的步骤
源程序(.c)
↓ 词法分析
↓ 语法分析
↓ 语义分析
↓ 代码生成
↓ 代码优化
目标文件(.o)
↓ 链接
可执行文件
② 无条件跳转 vs 调用指令
| 对比项 | 无条件跳转 | 调用指令 |
|---|
| 相同点 | 都改变程序执行流程 | 都改变程序执行流程 |
| 操作 | 只改变PC值 | 改变PC值+保存返回地址 |
| 能否返回 | 不能 | 能(return) |
③ 按值传递 vs 按地址传递
| 方式 | 传递内容 | 修改是否影响原变量 |
|---|
| 按值传递 | 复制参数值 | 不影响 |
| 按地址传递 | 传递地址 | 影响 |
比喻:
- 按值 = 给你一份复印件(改了原件没变化)
- 按地址 = 给你原件地址(直接改原件)
④ 为什么递归开销大?
- 空间开销:每次递归调用占用额外栈空间
- 时间开销:频繁函数调用和返回
- 递归越深 → 栈空间占用越多 → 可能栈溢出
⑤ 数据为什么要地址对齐?
DRAM以块为单位访问
→ 若数据跨多个块:需多次访问(低效)
→ 若地址对齐:一次访问获取所有数据(高效)
第四章 可执行文件的生成与加载
必考题速记
① 链接器的两项主要工作
- 符号解析:将符号引用与符号定义关联,确定地址
- 重定位:确定符号的最终内存地址
② 各节(.section)存放内容
| 节名 | 存放内容 |
|---|
.text | 程序代码(指令) |
.rodata | 只读数据(常量字符串) |
.data | 已初始化的全局/静态变量 |
.bss | 未初始化的全局/静态变量 |
③ 静态链接 vs 动态链接
| 对比项 | 静态链接 | 动态链接 |
|---|
| 时机 | 编译时 | 运行时 |
| 方式 | 库代码复制到可执行文件 | 共享库映射到内存 |
| 文件大小 | 大 | 小 |
| 依赖外部库 | 不依赖 | 依赖 |
| 共享 | 不可共享 | 多程序共享 |
④ 虚拟地址空间的好处
- 每个进程拥有独立的虚拟地址空间
- 避免进程间地址冲突
- 提高系统安全性和稳定性
⑤ shell加载程序的过程
① 用户输入命令行
② shell解释命令,识别要执行的程序
③ shell创建新进程
④ 加载器加载可执行文件 → 执行入口点
第五章 存储器层次结构
必考题速记
① 为什么采用层次存储结构?
| 矛盾 | 解决方案 |
|---|
| CPU速度快 vs 主存速度慢 | 引入Cache |
| 主存容量小 vs 需要大容量 | 引入虚拟内存 |
结论:用多层次存储,兼顾速度、容量、成本
② 为什么引入Cache能提高效率?
Cache速度快(接近CPU速度)
→ CPU先在Cache找数据
→ 命中:直接读取(快)
→ 未命中:才去主存(慢)
→ 利用局部性原理,命中率高
→ 整体访存效率提升
③ 三种Cache映射方式对比
| 映射方式 | 对应关系 | 是否需要替换策略 | 特点 |
|---|
| 直接映射 | 一对一固定 | 不需要 | 简单但冲突多 |
| 全相联映射 | 任意对应 | 需要 | 灵活但硬件复杂 |
| 组相联映射 | 组内任意 | 需要 | 折中方案 |
直接映射不需要替换策略原因: 新数据来了直接覆盖固定位置,没有"选哪个替换"的问题
④ 为什么要考虑Cache写策略?
CPU修改Cache数据时
→ Cache和主存内容不一致(数据不同步)
→ 必须有策略决定何时写回主存
| 写策略 | 方式 | 优点 | 缺点 |
|---|
| 写回法 | 替换时才写主存 | 速度快 | 可能短暂不一致 |
| 写通法 | 立即写主存 | 始终一致 | 速度慢 |
⑤ Cache-主存 vs 主存-外存 的区别
| 层次 | 解决的问题 | 手段 |
|---|
| Cache-主存 | 速度问题(CPU太快,主存太慢) | 引入高速Cache |
| 主存-外存 | 容量问题(主存不够大) | 引入虚拟内存 |
⑥ 物理地址 vs 逻辑地址
| 对比项 | 物理地址 | 逻辑地址 |
|---|
| 定义 | 内存真实地址 | 用户程序中的地址 |
| CPU使用 | 直接使用 | 需转换后使用 |
地址转换由硬件实现(MMU) 原因:硬件转换速度快,满足CPU快速访问需求
第六章 I/O子系统
必考题速记
① I/O子系统层次结构(从上到下)
用户层I/O软件
↓
设备独立性软件
↓
设备驱动软件
↓
中断处理软件
↓
硬件(设备)
② 三种I/O控制方式对比
| 方式 | CPU介入程度 | 效率 | 适用场景 |
|---|
| 程序直接控制 | 一直轮询等待 | 低 | 简单/低速设备 |
| 中断控制 | I/O完成才介入 | 中 | 中速设备 |
| DMA方式 | 仅启动和结束 | 高 | 高速/批量数据 |
记忆:效率递增,CPU介入递减
③ 为什么DMA能提高批量数据效率?
| 方式 | 数据路径 | CPU参与 |
|---|
| 传统方式 | 数据 → CPU → 内存 | 全程参与 |
| DMA方式 | 数据 → 直接到内存 | 不参与传输 |
- 减少CPU开销
- CPU可同时执行其他任务
- 支持高速数据传输
④ 保护/恢复现场时为什么要关中断?
如果不关中断:
→ 中断可能在保存/恢复过程中发生
→ 破坏正在保存的现场状态
→ 导致状态不一致,系统出错
关中断保证:保护/恢复现场的原子性
⑤ I/O端口两种编址方式
| 编址方式 | 地址空间 | 优点 | 缺点 |
|---|
| 独立编址 | I/O和内存地址分开 | 互不干扰 | 需专门I/O指令 |
| 统一编址 | I/O和内存地址统一 | 访问方式简单 | 占用内存地址空间 |
答题模板
万能答题框架:"是什么 + 为什么 + 怎么做"
示例:为什么引入Cache?
是什么: Cache是CPU和主存之间的高速缓存
为什么需要: CPU速度远快于主存,存在速度差异,导致CPU经常等待,效率低下
怎么做: 将频繁访问的数据存入Cache,CPU先查Cache,命中则直接读取,利用局部性原理提高命中率,从而提高整体访存效率
高频考点总结
| 题目类型 | 核心答案要点 | 目标字数 |
|---|
| 冯诺依曼组成 | 五部件+各自功能 | 100字 |
| 指令执行过程 | 四阶段 | 80字 |
| Cache原理 | 局部性+命中率 | 100字 |
| 三种I/O方式 | CPU介入程度对比 | 120字 |
| 静态vs动态链接 | 时机+特点对比 | 100字 |
| 虚拟内存好处 | 独立+安全+扩容 | 80字 |
考前30分钟速查清单
答题注意事项
- 先写结论,再写理由
- 用分点写,不要大段文字
- 每点不超过2行,简洁有力
- 遇到不会的,写相关概念也能得部分分