知识库
先学知识点,再做题检验。当前:计算机系统知识
01. 计算机系统知识 (13个)
02. 程序语言基础 (3个)
03. 操作系统 (8个)
04. 软件工程 (8个)
05. 数据结构与算法 (23个)
06. 数据库系统 (11个)
07. 计算机网络 (12个)
08. 面向对象技术 (10个)
09. 信息安全 (4个)
10. 知识产权与标准化 (4个)
11. 多媒体基础 (2个)
12. 项目管理 (4个)
CPU与总线
CPU五部件+流水线
重点 难度 2/3
通俗理解
把CPU想象成一个厨房:
• PC(程序计数器)= 菜谱翻到第几页(告诉我下一步做什么)
• IR(指令寄存器)= 当前正在看的那行菜谱
• ALU(算术逻辑单元)= 实际炒菜的那只手
• 控制器(CU)= 厨房总管,协调一切
流水线 — 洗车线类比
冲水→打泡沫→刷洗→冲净→吹干,五辆车同时在五个工位。
如果没有流水线:一辆洗完下一辆才能进——第5辆车要等第1辆完全洗完才能开始。
有了流水线:第1辆车刚进吹干,第2辆已经进冲净了——同时有5辆车在洗。
核心公式
流水线周期 T_pip = max(t1, t2, ..., tk) — 最慢的那个阶段
总时间 T_total = Σ(t_i) + (n - 1) × T_pip
加速比 = 非流水时间 / 流水时间 ≈ 段数(理想情况)
真题演练
某指令系统包含"取指(4ms)"、"分析(3ms)"、"执行(5ms)"三道工序。
执行50条指令用流水线要多久?
解:
1.周期 = max(4, 3, 5) = 5ms
2.总时间 = (4+3+5) + (50-1)×5 = 12 + 245 = 257ms
3.非流水线 = 12×50 = 600ms
4.加速比 = 600/257 ≈ 2.33
三种流水线冲突
• 结构冲突:硬件不够用(比如只有一个内存,取指和访存抢资源)
• 数据冲突:下一条指令依赖上一条的结果(比如上一条还没算完,下一条就要用)
• 控制冲突:遇到分支(if-else),不确定该取哪条指令
总线分类
重点 难度 2/3
通俗理解
总线 = 计算机内部的高速公路网,各种设备在公路上来回传数据。
三种总线的分工
• 地址总线(单向):CPU告诉内存"我要 xxx 号地址的数据"——只往一个方向
• 数据总线(双向):实际上传数据——CPU可以从内存读,也可以写回
• 控制总线:传读写信号("我要读!"、"完事了!")
考法1 — 寻址范围
32根地址线 → 可以访问 2^32 = 4,294,967,296 字节 = 4GB
16根地址线 → 2^16 = 65,536 = 64KB
公式:寻址空间 = 2^(地址线根数)
考法2 — 字长
64位数据总线 → 一次传 8 字节(字长=64位)
32位数据总线 → 一次传 4 字节(字长=32位)
总线分类
• 片内总线:CPU芯片内部的连线
• 系统总线:CPU ↔ 内存 ↔ I/O接口
• 通信总线:计算机 ↔ 外部设备(如USB、PCIe)
数据表示
进制转换
重点 难度 2/3
通俗理解
计算机只懂二进制(0和1),但我们习惯十进制。
进制转换就像翻译:把"中文"翻译成"英文",再把"英文"翻译成"中文"。
十进制→任意进制 — 除基取余法
整数部分:不断除以基数,余数从下往上读
例:25转二进制
25÷2=12余1 ↑ 从下往上读:11001
12÷2=6余0 ↑
6÷2=3余0 ↑
3÷2=1余1 ↑
1÷2=0余1 ↑
任意进制→十进制 — 按权展开
公式:每一位的值 × 基数的位置次方
例:二进制11001 = 1×2^4 + 1×2^3 + 0×2^2 + 0×2^1 + 1×2^0 = 16+8+0+0+1 = 25
小数转换
十进制小数→二进制:不断乘2,取整数部分
例:0.625转二进制
0.625×2=1.25 → 取整1
0.25×2=0.5 → 取整0
0.5×2=1.0 → 取整1
结果:0.101(正序读!和整数相反)
必背映射
4位二进制 = 1位十六进制
3位二进制 = 1位八进制
例:3F(十六进制)= 0011 1111(二进制)
等式类题目技巧
"3×4=13在几进制?"
解:3×4=12(十进制),设进制为r
1×r + 3 = 12 → r = 9
答案是九进制。
原码反码补码
重点 难度 2/3
通俗理解
计算机为什么不用"原码"直接做加减?
因为要处理符号位太麻烦。比如 3 + (-3) 用原码:00000011 + 10000011 = 10000110 = -6,明显错了!
补码让减法变成加法:3 + (-3的补码) = 00000011 + 11111101 = 1_00000000 = 0(进位舍去)✓
三种编码对比表
| 编码 | 表示方法 | 8位范围 | 应用场景 |
| 原码 | 符号位+绝对值 | -127 ~ +127 | 乘除法 |
| 反码 | 负数=原码取反 | -127 ~ +127 | 过渡编码 |
| 补码 | 负数=反码+1 | -128 ~ +127 | ***计算机实际使用*** |
| 移码 | 补码符号位取反 | -128 ~ +127 | 浮点数阶码 |
口诀
正数三码都一样(原码=反码=补码)
负数:原码→反码(符号位不变,数值位取反)→补码(反码+1)
特别注意
8位补码的最小值 10000000 = -128(比原码多一个)
没有 -128 的原码!因为原码范围只有 -127 ~ +127
IEEE754浮点数
重点 难度 2/3
通俗理解
浮点数 = 科学计数法的二进制版
十进制约 3.14×10² = 314
二进制:N = M × 2^E,其中M是尾数,E是阶码
单精度32位结构
| 符号(1位) | 阶码(8位) | 尾数(23位) |
s E M
• 符号位:0正1负
• 阶码:用移码表示,偏移量127(=2^(8-1)-1)
所以实际阶码 = 存储值 - 127
• 尾数:规格化后,小数点前隐含1——"白嫖"1位精度
比如实际尾数 1.0101,只存 0101
转换步骤(必考)
以 13.75 为例:
1.转二进制:13 = 1101,0.75 = 0.11 → 1101.11
2.规格化:1101.11 = 1.10111 × 2^3
3.阶码:3 + 127 = 130 = 10000010
| 4. 填入:0 | 10000010 | 10111000000000000000000 |
易错点
• 阶码位数决定能表示的范围(多大、多小)
• 尾数位数决定精度(多精确)
所以:说"阶码决定精度"是错的!
校验码
奇偶校验
重点 难度 2/3
通俗理解
奇偶校验就像班级点名:
• 奇校验:要求全班人数是奇数——少了一个人就变成偶数了,就知道出问题了
• 偶校验:要求全班人数是偶数
具体做法
发送方在数据末尾加1位校验位,使"1"的总数为奇数(奇校验)或偶数(偶校验)
接收方收到后,数一下1的个数——不对就说明传错了
局限性
• 只能检测奇数个位出错(1位、3位、5位...)
• 两位同时翻则漏检(比如00→11,1的个数没变)
• 不能纠错——知道出错了,但不知道哪一位错了
考法
"给一串数据1101001(奇校验),应加什么校验位?"
数一下1的个数=4(偶数),要变成奇数→加1,结果是11010011
CRC循环冗余校验
重点 难度 2/3
通俗理解
CRC = 升级版奇偶校验
把整个数据当成一个巨大的二进制数,除以一个双方约定好的"除数"(生成多项式)
余数就是校验码。接收方也除一下——余数不为0就说明传错了。
计算步骤(以G(x)=x^4+x^2+x+1为例)
1.多项式最高次为4→校验码长4位
2.数据后面补4个0
3.用模2除法(异或运算,不进位)除以多项式对应的二进制10010111(看多项式的系数)
4.余数就是校验码
CRC能检测什么?
• 所有单错 ✓
• 所有双错 ✓
• 所有奇数个错 ✓
• 长度≤校验位数的突发错 ✓
• 不能纠错(和海明码的区别)
易混淆
• 海明码:能纠错,用在内存纠错(ECC内存)
• CRC:只能检错,用在网络传输(以太网、WiFi)
海明码
重点 难度 2/3
通俗理解
海明码比CRC更强——不仅能发现错了,还能知道具体哪一位错了,然后翻过来就行。
就像老师不仅能发现有人答错题,还能直接指出是第几题错了。
核心公式
数据位n,校验位k,满足:2^k ≥ n + k + 1
用来求需要加多少个校验位。
真题演练
数据位48位,需要多少校验位?
2^5=32 < 48+5+1=54 → 不够
2^6=64 ≥ 48+6+1=55 → 够
所以 k = 6
校验位位置
校验位放在 2^0=1, 2^1=2, 2^2=4, 2^3=8... 的位置
(第1、2、4、8...位)
码距
码距 = 两个合法码字不同的位数
• 码距=1:无检错能力
• 码距=2:可检单错
• 码距=3:可纠单错
存储体系
存储层次
重点 难度 2/3
通俗理解
存储系统 = 你的桌面 + 书架 + 仓库
• 寄存器(口袋):随身带的几样东西——最快,但装不了多少
• Cache(桌面):常用的几本书——快,但有限
• 主存(书架):所有的书——中等速度,容量大
• 辅存/磁盘(仓库):所有的旧书——慢,但便宜容量大
金字塔规律:越往上越快、越小、越贵
局部性原理 — Cache存在的根基
• 时间局部性:刚用过的很可能马上再用
→ 循环代码、反复访问同一个变量
• 空间局部性:刚用过地址附近的也很可能要用
→ 数组遍历、连续内存访问
考法
"从快到慢排序" → 寄存器 > Cache > 主存 > 辅存
"从大到小排序" → 辅存 > 主存 > Cache > 寄存器
"从贵到贱排序" → 寄存器 > Cache > 主存 > 辅存
Cache映射
重点 难度 2/3
通俗理解
Cache = CPU和内存之间的快速中转站。
CPU要数据时,先翻翻桌上有没有(Cache)——有就直接用(命中),没有就去书架找(主存)。
三种映射方式对比
| 映射方式 | 怎么放 | 优点 | 缺点 | 冲突率 |
| 直接映射 | 固定位置(块号%行数) | 最简单最快 | 冲突率高 | 最高 |
| 全相联映射 | 随便放 | 灵活无冲突 | 查找慢 | 最低 |
| 组相联映射 | 分组,组内随便放 | 折中方案 | 适中 | 适中 |
直接映射计算
Cache有8行,主存块号25 → 25 mod 8 = 1 → 映射到第1行
替换算法
• LRU(最久未用):踢掉最长时间没被访问的——最常用,性能最好
• FIFO(先进先出):踢掉最早进来的
• 随机:随便踢一个
注意!Belady异常
FIFO算法有时会出现奇怪现象:增加Cache容量,缺页率反而上升。
LRU不会出现Belady异常。
可靠性
系统可靠性
重点 难度 2/3
通俗理解
• 串联:三个人站一排传话——只要一个人传错,整个就错了
• 并联:三个人同时传话——只要有一个人传对了就行
公式
串联可靠度 R_总 = R₁ × R₂ × R₃ × ...(越串越不可靠)
并联可靠度 R_总 = 1 - (1-R₁) × (1-R₂) × (1-R₃) × ...(越并越可靠)
真题演练
三个部件可靠度分别为0.9、0.8、0.7,串联可靠度=0.9×0.8×0.7=0.504
如果是并联:1-(1-0.9)×(1-0.8)×(1-0.7) = 1-0.1×0.2×0.3 = 0.994
MTBF/MTTR
• MTBF = 平均无故障时间(能用多久才坏)
• MTTR = 平均修复时间(坏了多久能修好)
• 可用性 = MTBF / (MTBF + MTTR)
CPU与总线
I/O控制方式
重点 难度 2/3
通俗理解
CPU和外设交换数据,有四种方式,效率依次提升:
方式1 — 程序查询(最原始)
CPU不断问外设:"好了没?好了没?"
→ CPU什么都干不了,就一直轮询
→ 就像你一直盯着微波炉计时器看
方式2 — 程序中断(进步了)
外设准备好了,主动喊一声"好了!"
CPU可以先去干别的,收到中断信号再过来处理
→ 但每次中断都要保存现场、恢复现场,频繁中断开销大
方式3 — DMA(真正解放CPU)
外设和内存之间直接建立一条"高速公路",数据自己传
CPU只需要在开始说"开始传吧"和结束时说"传完了?"——中间完全不管
→ 适合磁盘读写、大文件传输
方式4 — 通道(专业选手)
专门的I/O处理器,有自己的指令系统
大型机、服务器用——CPU完全不操心I/O
考点
程序查询↔中断↔DMA↔通道 的特点对比
中断每次传少量数据,DMA批量传
中断需要CPU每次参与,DMA不需要
CISC vs RISC
重点 难度 2/3
通俗理解
CISC = 瑞士军刀(一把刀有很多功能,但用起来复杂)
RISC = 一套专用工具(每把工具只干一件事,但组合起来什么都能干)
对比表
| 特性 | CISC | RISC |
| 指令数量 | 多(几百条) | 少(几十条) |
| 指令长度 | 不固定(1-15字节) | 固定(通常32位) |
| 执行时间 | 不统一(多周期) | 大多单周期 |
| 寻址方式 | 多(几十种) | 少(几种) |
| 访存方式 | 几乎所有指令都可访存 | 只有Load/Store可访存 |
| 实现方式 | 微程序控制 | 硬布线控制 |
| 代表 | x86(Intel/AMD) | ARM(手机芯片) |
考试要点
RISC的优点:硬件简单、容易实现流水线、功耗低
CISC的优点:编程方便、一条指令干很多事
手机芯片都是RISC(ARM架构),因为省电
PC芯片都是CISC(x86架构),因为兼容性
记忆口诀
RISC = 精简 = ARM = 手机芯片
CISC = 复杂 = x86 = PC芯片