第46周:操作系统与体系结构
目标:掌握操作系统与体系结构核心知识,能够深入讨论进程调度、内存管理、并发原语、缓存一致性等面试高频题。
1. 进程调度
1.1 Linux CFS 调度器
1 | CFS(Completely Fair Scheduler): |
1.2 调度策略
1 | # 查看进程调度策略 |
1.3 进程状态机
1 | 进程状态: |
1.4 调度延迟
1 | CFS 目标: |
1.5 调度域(sched_domain)
1 | 多核调度: |
2. 虚拟内存
2.1 虚拟地址到物理地址
1 | 地址翻译过程: |
2.2 TLB(Translation Lookaside Buffer)
1 | TLB:地址翻译缓存 |
2.3 TLB shootdown
1 | 多核 TLB 一致性: |
2.4 内存映射
1 | // 进程虚拟内存布局(典型 64-bit Linux): |
3. 缓存与一致性
3.1 多级缓存
1 | 典型 CPU 缓存层次(Intel): |
3.2 缓存行(Cache Line)
1 | Cache Line = 缓存最小单位(64 字节) |
3.3 MESI 协议
1 | MESI(缓存一致性协议): |
4. 内存屏障
4.1 重排序问题
1 | 为什么需要内存屏障? |
4.2 内存屏障类型
1 | // === Linux 内核内存屏障 === |
4.3 acquire/release 语义
1 | // Acquire:之后的读写不能提前 |
5. 原子操作
5.1 原子操作 API
1 | // === Linux 内核原子操作 === |
5.2 无锁数据结构
1 | // === 无锁计数器 === |
6. 锁的深入
6.1 锁类型对比
| 锁 | 适用 | 性能 |
|---|---|---|
| spinlock | 短临界区、单核外 | 中(忙等) |
| mutex | 通用、可能阻塞 | 中(含睡眠切换) |
| rwlock | 读多写少 | 读快写慢 |
| seqlock | 极少写多读 | 读极快 |
| RCU | 极少写 | 读无开销 |
| futex | 用户态同步 | 内核态最轻 |
6.2 RCU 机制
1 | RCU(Read-Copy-Update): |
6.3 futex
1 | // futex:用户态同步原语 |
7. 中断与软中断
7.1 中断分层
1 | Linux 中断处理层次: |
7.2 网卡中断负载均衡
1 | 问题: |
8. 进程、线程、协程对比
1 | 进程(Process): |
9. 常见面试题
9.1 进程 vs 线程
1 | Q:进程和线程的区别? |
9.2 协程 vs 线程
1 | Q:协程和线程的区别? |
9.3 内存屏障
1 | Q:什么是内存屏障?为什么需要? |
9.4 CAS 的 ABA 问题
1 | Q:什么是 CAS 的 ABA 问题? |
9.5 进程/线程切换的开销
1 | Q:进程切换的开销来自哪里? |
9.6 CPU 缓存一致性
1 | Q:多核 CPU 如何保证缓存一致性? |
10. 实战:内核配置优化
1 | # === CPU 调度调优 === |
11. 资源推荐
1 | 必读: |
- 本文作者: CoderSong
- 本文链接: https://jack-song-gif.github.io/2026/05/07/第46周:操作系统与体系结构/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!