Skip to content

Nguyên lý cấu tạo máy tính

Mở đầu

Sau khi có CPU từ transistor, máy tính tổ chức thành hệ thống thế nào? Chương trước build CPU core từ transistor + adder + register. Nhưng CPU không đủ — cần phối hợp memory, I/O, cần bus connect, instruction system drive. Chương này từ CPU view → toàn hệ thống view: kiến trúc Von Neumann, instruction system, storage hierarchy, bus + I/O.

Bạn sẽ học:

  • System view: hiểu CPU, memory, I/O phối hợp thế nào
  • Hardware terminology: instruction cycle, pipeline, CPI, cache hit rate
  • Performance mindset: hiểu bottleneck + optimization
  • Foundation: cho OS, architecture, embedded
ChươngNội dung
1Kiến trúc Von Neumann
2Instruction system (ISA)
3CPU controller
4Storage hierarchy + cache
5Bus + I/O + DMA

0. Toàn cảnh

Chương trước hiểu CPU bên trong. Nhưng CPU chỉ là 1 execution unit, để máy "dùng được" cần peripheral.

CPU 指令执行周期详细演示
CPU
控制单元 CU
PC256程序计数器
IR指令寄存器
MAR内存地址寄存器
MDR内存数据寄存器
算术逻辑单元 ALU
ACC0累加器
通用寄存器组
R00
R10
R20
R30
地址总线
数据总线
控制总线
主存 Memory
0x100LOAD R0, [0x200]
 0x101LOAD R1, #7
 0x102ADD R0, R1
 0x103STORE [0x201], R0
数据区
 0x51242
 0x5130
Fetch取指
Decode译码
Execute执行
Write Back写回
步骤 0 / 32
点击"时钟脉冲"开始逐步执行,或点击"自动运行"连续播放。

Phân tầng hardware

  • CPU core: execute instruction
  • Register: high-speed storage trong CPU
  • Main memory: lưu program + data, CPU access qua address bus + data bus
  • I/O devices: input/output qua I/O controller
  • System bus: kết nối CPU-Memory-I/O, gồm address/data/control bus

1. Von Neumann: "hiến pháp" máy tính hiện đại

1.1 Stored-program

1945, John von Neumann đề xuất stored-program architecture.

Core

Stored-program: program như 1 loại data đặc biệt, lưu trong memory như data thường. CPU đọc + execute instruction từ memory.

Nghĩa:

  • Máy tính cũ: program là hardwired, đổi program phải re-solder mạch
  • Von Neumann: program trong memory, đổi program chỉ cần sửa memory content

1.2 5 component chính

CPU 寄存器组CPU 内部的高速存储单元
专用寄存器 (Special Registers)
PC
0x00401000
程序计数器
IR
0x8B450008
指令寄存器
MAR
0x00401000
内存地址寄存器
MDR
0x00000000
内存数据寄存器
ACC
0x0000001A
累加器
通用寄存器 (General Purpose Registers)
RAX
0x00000000
返回值
RBX
0x00000000
基址寄存器
RCX
0x00000000
计数寄存器
RDX
0x00000000
数据寄存器
RSI
0x00000000
源索引
RDI
0x00000000
目标索引
RBP
0x00000000
栈帧指针
RSP
0x7FFDE000
栈指针
程序状态字 (PSW / FLAGS)
CF0进位标志
PF0奇偶标志
AF0辅助进位
ZF0零标志
SF0符号标志
OF0溢出标志
寄存器 vs 内存
特性寄存器内存 (RAM)
位置CPU 内部CPU 外部
访问速度最快 (< 1ns)较慢 (50-100ns)
容量极小 (Bytes)大 (GB)
作用暂存指令/操作数/结果存储程序和数据
PartENFunction
ALUArithmetic Logic UnitPhép số học + logic
CUControl UnitChỉ huy phối hợp
MemoryLưu program + data
InputInputBàn phím, chuột
OutputOutputMàn hình, máy in

1.3 Data path

Data path = đường data chảy giữa các unit. Trong CPU, connect: register, ALU, MDR.

Width data path (truyền được mấy bit/lần) ảnh hưởng trực tiếp performance.

1.4 Von Neumann bottleneck

Tốc độ truyền data CPU ↔ Memory chậm hơn nhiều tốc độ xử CPU.

CPU thường "wait data". Đa số optimization hiện đại xoay quanh:

TechNguyên lý
CacheStorage nhỏ cao tốc gần CPU
Instruction PipelineNhiều instruction ở stage khác nhau
SuperscalarCùng 1 clock cycle issue nhiều instruction
Multi-coreNhiều CPU core chia task

2. Instruction System: interface CPU-Software

Câu hỏi: "program" trong memory hình thù gì? CPU đọc thế nào?

Trả lời: Instruction Set Architecture (ISA). Nếu CPU là service, ISA là API doc — định nghĩa mọi command CPU hiểu, format, phạm vi data.

2.1 Từ code đến instruction

🔗 从代码到指令:一行代码的翻译之旅

点击每个阶段,看你写的代码如何一步步变成 CPU 能执行的指令

1你写的代码
int a = 10 + 5;
这是你在编辑器里写的高级语言代码。对人类来说很好懂,但 CPU 完全看不懂——它不认识 int、也不知道 + 是什么。
2编译器翻译成汇编
MOV  R1, #10    ; 把 10 放入寄存器 R1
MOV  R2, #5     ; 把 5 放入寄存器 R2
ADD  R3, R1, R2 ; R3 = R1 + R2
STORE R3, [a]   ; 把结果存到变量 a 的内存地址
3汇编器转成机器码
0001 0001 0000 1010  → MOV R1, #10
0001 0010 0000 0101  → MOV R2, #5
0010 0011 0001 0010  → ADD R3, R1, R2
0100 0011 1000 0000  → STORE R3, [a]
4CPU 逐条执行
时钟 1: 取指 → 译码 → 执行 MOV R1, #10
时钟 2: 取指 → 译码 → 执行 MOV R2, #5
时钟 3: 取指 → 译码 → 执行 ADD R3, R1, R2
时钟 4: 取指 → 译码 → 执行 STORE R3, [a]
💡 关键理解
指令集就是 CPU 的「API」——它定义了 CPU 能听懂的所有命令。 编译器的工作就是把你写的高级语言「翻译」成这套 API 的调用序列。 不同的 CPU(x86、ARM)有不同的指令集,就像不同的服务有不同的 API。
LayerContentAi hiểu
High-levelint a = 10 + 5;Người
AssemblyMOV R1, #10 / ADD R3, R1, R2Người (cần train)
Machine code0001 0001 0000 1010CPU

Sao cần hiểu chuỗi này?

  • Compile error → biết lỗi ở "high-level → assembly"
  • Runtime crash → biết lỗi ở stage CPU execute
  • Performance optimization → biết compiler optimize gì
  • Chọn CPU architecture (x86 vs ARM) → biết khác ở "ISA API"

2.2 1 instruction hình thù gì?

Mỗi machine instruction = chuỗi binary, có format chặt:

  • Opcode: làm gì (cộng? jump? read memory?)
  • Operand: làm với ai (register nào? memory address? constant?)
Instruction:  ADD  R3, R1, R2
              ───  ──────────
              opcode  operand
              (cộng) (R3 = R1 + R2)
机器指令格式操作码 + 操作数 = 机器指令
常用操作码 (Opcode)
00000000NOP无操作
00000001MOV数据传送
00000010ADD加法
00000011SUB减法
00000100MUL乘法
00000101DIV除法
00000110AND逻辑与
00000111OR逻辑或
00001000NOT逻辑非
00001001XOR异或
00001010SHL左移
00001011SHR右移
00001100JMP无条件跳转
00001101JE相等跳转
00001110JNE不等跳转
00001111CALL调用子程序
00010000RET返回
00010001PUSH压栈
00010010POP出栈
00010011LOAD从内存加载
00010100STORE存入内存
FormatStructureVí dụUse
0-addressChỉ opcodeRETStack machine
1-addressOpcode + 1 addrINC R1Single operand op
2-addressOpcode + 2 addrMOV R1, R2Hay dùng nhất
3-addressOpcode + 3 addrADD R3, R1, R2Không phá source

2.3 CPU tìm data thế nào? — Addressing mode

ModeẨn dụVí dụNote
ImmediateNgười đứng trước mặtMOV R1, #100Data ngay trong instruction, nhanh nhất
RegisterGọi nội bộMOV R1, R2Data trong register CPU, nhanh
DirectBiết số nhà, đến thẳngMOV R1, [0x1000]Memory address trong instruction
IndirectHỏi reception "Tom phòng nào"MOV R1, [R2]Register chứa address, query thêm 1 lần
Indexed"Toà 3 + tầng 5"MOV R1, [R2+10]Base + offset, cho array
寻址方式如何找到操作数的位置
寻址方式对比
寻址方式格式速度用途
立即数寻址MOV R1, #100最快常数赋值、初始化
寄存器寻址MOV R1, R2最快寄存器间数据传送
直接寻址MOV R1, [100]较快访问全局变量
间接寻址MOV R1, [R2]较快指针操作、数组遍历
变址寻址MOV R1, [R2 + R3]较快数组访问、循环
基址寻址MOV R1, [R2 + 100]较快结构体访问、函数参数
相对寻址JMP LABEL最快循环、条件跳转

Sao cần nhiều mode?

  • Constant (x = 100) → immediate
  • Variable op (a + b) → register
  • Array (arr[i]) → indexed
  • Pointer (*ptr) → indirect

2.4 Phân loại instruction

TypeLàm gìĐại diệnCode bạn viết
Data transferMove dataMOV, LOAD, STORElet x = y, param function
Arithmetic+, -, ×, ÷ADD, SUB, MUL, DIVa + b, count++
LogicBit opAND, OR, NOT, XORflags & 0xFF
ShiftDịch trái phảiSHL, SHRx << 2 (= ×4)
Control transferJump + callJMP, CALL, RETif, for, function call
I/OCommunicate peripheralIN, OUTRead keyboard, write screen

Insight

Mọi code bạn viết — dù logic phức tạp đến đâu — cuối cùng đều decompose thành 6 loại basic op. CPU "thông minh" không vì làm phức tạp, mà vì execute simple ops tốc độ vài tỷ/giây.

2.5 2 triết lý: CISC vs RISC

⚔️ 两种设计哲学:CISC vs RISC

点击对比维度,看两种指令集架构的核心差异

上千条复杂指令
指令数量
几十到几百条精简指令
一条能做很多事
单条指令
一条只做一件事
变长(1-15字节)
指令长度
定长(通常4字节)
复杂指令多周期
执行速度
大多数单周期完成
较高
功耗
较低
难优化(指令长度不一)
流水线
易优化(指令整齐)
轻(硬件做更多)
编译器负担
重(软件做更多优化)
🌍 现实中的选择
💻 你的电脑x86 (CISC)兼容几十年的软件生态
📱 你的手机ARM (RISC)低功耗,电池续航更久
🍎 Apple SiliconARM (RISC)高性能低功耗,颠覆了笔记本市场
🔬 RISC-V 开发板RISC-V (RISC)开源免费,IoT 和教育领域崛起

Ẩn dụ:

  • CISC = dao thuỵ sĩ: 1 dao tích hợp kéo, mở bia... nhiều chức năng nhưng không tốt nhất từng cái
  • RISC = bộ tool chuyên nghiệp: mỗi tool chỉ 1 việc, nhanh + tốt

Sao phone dùng ARM, PC dùng x86?

  • x86 (CISC) dominate PC/server 40 năm, ecosystem software khổng lồ. Đổi architecture = recompile mọi software
  • ARM (RISC) thống trị mobile nhờ low power. Mobile battery nhỏ, mỗi mW quý
  • Apple Silicon chứng minh RISC cũng high-performance — M-series vượt x86 cả hiệu năng + power
  • RISC-V open-source, đang lên ở IoT, education, AI chip

3. Controller: "trung tâm chỉ huy" CPU

3.1 Cấu tạo

控制器工作原理控制信号如何协调 CPU 各个部件
控制单元 CU
指令寄存器 IR
指令译码器
时序发生器
输出控制信号:
PC→MAR
MEM→MDR
MDR→IR
IR→ID
ALU→ACC
ACC→MDR
PC
程序计数器
MAR
地址寄存器
Memory
主存
MDR
数据寄存器
IR
指令寄存器
ID
译码器
ALU
算术逻辑单元
ACC
累加器
当前微指令
控制器核心概念
控制信号:由控制器发出的电信号,用于控制数据通路中各个部件的动作
时序:CPU 操作按时钟节拍进行,每个节拍执行特定微操作
硬布线 vs 微程序:硬布线控制器速度快但设计复杂;微程序控制器灵活但速度稍慢
ComponentFunction
PC (Program Counter)Address instruction tiếp
IR (Instruction Register)Instruction đang execute
DecoderParse opcode + operand
Clock generatorSinh nhịp, control timing
Microoperation generatorSinh control signal execute instruction
程序状态字 (PSW)CPU 的"状态指示灯"
CF
0
进位标志
PF
0
奇偶标志
AF
0
辅助进位
ZF
0
零标志
SF
0
符号标志
TF
0
陷阱标志
IF
1
中断标志
DF
0
方向标志
OF
0
溢出标志
运算结果对标志位的影响
运算结果:
0
CF:0PF:0AF:0ZF:0SF:0TF:0IF:1DF:0OF:0
标志位的典型用途
🔀
条件跳转
JE (相等跳转)、JNE、JG、JL 等指令根据 ZF、SF、OF 决定是否跳转
算术运算
多位数运算需要 CF 判断进位,OF 判断溢出
🔄
循环控制
循环指令使用 ZF 判断循环结束条件

3.2 Instruction cycle

  1. Fetch (IF): read instruction từ memory về IR
  2. Decode (ID): parse
  3. Execute (EX): thực hiện op
  4. Memory Access (MEM): nếu cần, access memory
  5. Write Back (WB): viết về register hoặc memory

3.3 Micro-operation

Micro-operation = op cơ bản nhất driven bởi control signal. Vd "fetch" decompose:

BeatMicro-opControl signal
T1PC → MARPCout, MARin
T2MEM → MDRMEMout, MDRin
T3MDR → IRMDRout, IRin
T4PC + 1 → PCPC+1, PCin

3.4 Hardwired vs Microprogram controller

FeatureHardwiredMicroprogram
ImplementCombinational logicMicroinstruction (firmware)
SpeedNhanhChậm hơn 1 chút
DesignPhức tạpĐơn giản hơn
FlexibilityKém (đổi = redesign mạch)Tốt (sửa microprogram)
TypicalRISCCISC early

4. Storage hierarchy: sao cần cache?

4.1 Pyramid

存储层次结构从快到慢,从小到大
寄存器
最快
最小 (KB)
缓存
很快
小 (MB)
内存
中等 (GB)
硬盘
大 (TB)
网络/云
最慢
无限
详细对比
存储层次访问时间典型容量成本
寄存器< 1 ns几 KB最高
L1 缓存~1 ns64 KB很高
L2 缓存~3 ns256 KB
L3 缓存~10 ns8 MB中等
内存~100 ns8-32 GB中低
SSD~100 μs256 GB-2 TB
HDD~10 ms1-10 TB最低
局部性原理
程序倾向于访问最近访问过的位置(时间局部性) 和邻近的位置(空间局部性)
利用局部性原理,缓存可以显著提高性能
LayerTypeAccess timeCapacityVị trí
RegisterSRAM<1nsvài KBTrong CPU
L1 cacheSRAM~1ns32-64KBGần core
L2 cacheSRAM~3-10ns256KB-1MBTrong chip
L3 cacheSRAM~10-20ns2-16MBTrong chip/shared
Main memoryDRAM~50-100ns8-64GBMainboard
SSDFlash~10-100μs256GB-2TBMainboard
HDDDisk~5-10ms1-10TBCase

Ẩn dụ tốc độ

CPU access L1 = lấy 1 tờ giấy trên bàn:

  • Memory → thang máy xuống tiệm tạp hoá mua giấy
  • SSD → lái xe sang thành phố khác mua giấy
  • HDD → bay sang nước khác mua giấy

Chênh tốc độ trăm triệu lần!

4.2 Nguyên lý cache

Cache giữa CPU-memory, dựa trên 2 nguyên lý locality:

Locality

  • Temporal locality: data vừa access có thể access lại sớm
  • Spatial locality: data được access, data gần đó cũng có thể được access
  1. Hit: data CPU cần ở cache → đọc trực tiếp
  2. Miss: không có → load từ memory
Hit rate = số hit / tổng access
Avg access time = hit rate × cache time + (1 - hit rate) × memory time
缓存 (Cache) 原理CPU 与内存之间的"桥梁"
CPU 核心
L1 缓存
64 KB~1ns
L2 缓存
256 KB~5ns
L3 缓存
8 MB~15ns
主存
16 GB~100ns
缓存操作演示
操作记录
为什么缓存有效?—— 局部性原理
⏱️
时间局部性
刚访问的数据很可能再次被访问
循环中的变量
📦
空间局部性
访问某个数据后,附近的数据也可能被访问
数组遍历、顺序执行
缓存映射方式
每个主存块只能映射到唯一的缓存行
速度最快
命中率较低
实现复杂度最低
命中率计算
平均访问时间 = H × Tc + (1-H) × Tm
2 ns
100 ns
90%
平均访问时间 = 12 ns

4.3 Cache mapping

ModeNguyên lýLợiHại
Direct mappedMỗi memory block 1 vị trí cố địnhĐơn giảnConflict cao
Set associativeN vị trí (N-way)Cân bằngPhức tạp
Fully associativeBất kỳ vị tríConflict thấp nhấtImplement khó

4.4 Virtual memory

Virtual memory = OS abstraction quan trọng:

  • Mỗi process tưởng có toàn bộ virtual address space
  • OS translate virtual → physical address
  • Page ít dùng swap ra disk

Ẩn dụ

Như khách sạn quản phòng:

  • Bạn (process) tưởng cả toà là của mình
  • Thực ra hotel (OS) chỉ cấp phòng đang dùng
  • Phòng không dùng "swap out" vào kho (disk)
  • Cần phòng → "swap in" ngay

5. Bus + I/O: "mạch máu" máy tính

5.1 System bus

计算机总线系统地址总线、数据总线、控制总线
CPU
控制单元
运算单元
地址总线32位
数据总线64位
控制总线控制信号
主存
0x0
0x1
0x2
0x3
0x4
0x5
0x6
0x7
操作流程
总线知识点
地址总线
CPU 发送内存地址,单向传输
数据总线
传输实际数据,双向传输
控制总线
传输读/写等控制信号
BusFunctionDirectionWidth
Address busTruyền address1-way (CPU→mem)32/64-bit
Data busTruyền data2-way32/64-bit
Control busControl signal2-wayNhiều signal lines

5.2 Bus arbitration

Nhiều device cùng yêu cầu bus → arbitration quyết định ai trước:

ModeNote
CentralizedCentral arbiter quyết
DistributedDevice tự thoả thuận

5.3 I/O access methods

ModeNguyên lýLợiHại
PollingCPU loop check I/OĐơn giảnCPU utilization thấp
InterruptI/O xong notify CPUCPU làm song song đượcOverhead interrupt
DMAI/O access memory trực tiếpCPU không tham giaCần DMA controller
I/O 方式对比程序查询 · 中断方式 · DMA
程序查询Programmed I/O
工作流程
1CPU 轮询检查 I/O 设备状态
2设备忙?继续等待
3设备就绪,发送读写命令
4CPU 逐字节读取/写入数据
5判断是否传输完成
6未完成则继续查询
CPU 参与度
速度
复杂度
三种 I/O 方式对比
特性程序查询中断方式DMA
CPU 参与度全程参与仅处理中断几乎不参与
数据传输CPU 逐字节搬运CPU 逐字搬运外设直接到内存
优点简单、控制灵活CPU 效率高CPU 完全解放
缺点CPU 利用率低中断开销硬件复杂
适用场景简单外设、低速设备中低速设备高速批量传输

5.4 DMA

DMA (Direct Memory Access) cho I/O device giao tiếp memory thẳng:

网络是怎么连接的从发送到接收的完整过程
💻
发送方
192.168.1.100
📧
邮件应用
📧
应用层
邮件软件创建邮件内容
🔐
传输层
TCP 添加端口号和序号
🌐
网络层
IP 添加源地址和目标地址
🔌
数据链路层
以太网添加 MAC 地址
物理层
转换成电信号发送
🖥️
接收方
192.168.1.200
📧
邮件应用
数据封装过程
7应用层
邮件内容: "Hello!"
6表示层
数据编码: UTF-8
5会话层
会话ID: sess_123
4传输层
TCP 头: 端口 25
3网络层
IP 头: 192.168.1.100 → 192.168.1.200
2数据链路层
以太网帧: MAC 地址
1物理层
比特流: 01010101...
网络协议栈 (OSI 模型)
发送方
应用层 (HTTP, SMTP)
传输层 (TCP, UDP)
网络层 (IP)
数据链路层 (Ethernet)
物理层 (电信号)
接收方
应用层 (HTTP, SMTP)
传输层 (TCP, UDP)
网络层 (IP)
数据链路层 (Ethernet)
物理层 (电信号)
  • Không DMA: CPU tham gia cả quá trình
  • Có DMA: CPU bảo DMA controller "từ đâu đến đâu, bao nhiêu", rồi đi làm việc khác. DMA xong notify CPU.

Ẩn dụ DMA

Như order delivery:

  • Không DMA: tự đi siêu thị mua, về nhà rửa, nấu (cả quá trình)
  • Có DMA: order qua app, shipper giao tới bếp (người khác làm, chỉ "nhận hàng")

5.5 Interrupt

  1. I/O device xong → gửi interrupt request tới CPU
  2. CPU đang execute, xong instruction hiện tại thì respond
  3. CPU save state, jump tới interrupt handler
  4. Xong, restore state, tiếp tục

6. Performance: Pipeline

6.1 Instruction pipeline

CPU 指令流水线五级流水线:取指 → 译码 → 执行 → 访存 → 写回
取指(IF)
译码(ID)
执行(EX)
访存(MEM)
写回(WB)
ADD R1,R2,R3
SUB R4,R1,R5
LOAD R6,[R4]
STORE R6,[R7]
AND R8,R1,R6
总周期数0
已完成指令0
CPI0
流水线原理

顺序执行:每条指令执行完才执行下一条,N条指令需要 N × 5 个周期

流水线执行:多条指令同时处于不同阶段,理想情况下 CPI ≈ 1

Sequential (5 instruction, 15 cycle):
I1: IF→ID→EX→MEM→WB
I2:            IF→ID→EX→MEM→WB
I3:                         IF→ID→EX→MEM→WB

Pipeline (5 instruction, 9 cycle):
I1: IF→ID→EX→MEM→WB
I2:    IF→ID→EX→MEM→WB
I3:       IF→ID→EX→MEM→WB

Ideal: N instruction CPI ≈ 1.

6.2 Pipeline hazard

TypeCauseFix
StructuralResource conflictThêm HW / stagger
DataInstruction sau cần kết quả trướcData forwarding / bubble / scheduling
ControlJump đổi flowDelay slot / branch prediction

7. Tổng kết: máy tính "chạy" thế nào?

Sau khi program start, OS load executable từ disk vào memory. CPU IF unit qua address bus đọc instruction từ memory về IR. Controller decode (ID), nhận diện op type → sinh control signal. EX unit thực thi op, cần thì MEM access memory qua data bus, cuối WB về register/memory. Toàn quá trình driven bởi clock, controller sinh chuỗi micro-op điều phối.

2026 update

  • Apple M3/M4: unified memory architecture, GPU + CPU share memory
  • HBM (High Bandwidth Memory): cho AI chip, GPU
  • CXL (Compute Express Link): standard mới cho memory pooling
  • 3D stacking: chip xếp tầng, tăng density
  • VN dev: hiểu cache line giúp tối ưu data structure (struct of array vs array of struct)

Tài liệu

TopicSách
Computer architecturePatterson & Hennessy
CPU microarchitectureBryant & O'Hallaron - CSAPP
ISAARMv8 manual, Intel x64 manual
Cache coherenceMESI protocol

Tiếp theo