zero314zero314
  • 一. 计算机组成原理

    • 第一章 计算机系统概述
    • 第二章 数据的表示和运算
    • 第三章 存储系统
    • 第四章 指令系统
    • 第五章 中央处理器
    • 第六章 总线
    • 第七章 输入输出系统
  • 二. 操作系统

    • 操作系统文档
  • 三. 计算机网络

    • 计算机网络文档
  • 四. 数据结构

    • 数据结构文档
  • 五. Linux 学习路线

    • Linux 学习路线图
  • 六. Golang 文档

    • 标准库介绍
    • 高效编程
    • 代码审查
    • 设计模式

🎯 学习目标

  • 主线:从硬件体系结构到 Linux 内核源码的系统性掌握
  • 覆盖:(计组 →OS→ 数据结构 → 计网)完整知识体系
  • 深度:硬件原理到软件实现,底层机制到上层应用

📅 整体时间规划

提示

共计 12-15 个月

  • 阶段一:硬件基础(3-4 个月)- 计算机组成原理

  • 阶段二:系统软件(3-4 个月)- 操作系统 + Linux 内核

  • 阶段三:算法基础(2-3 个月)- 数据结构 + Linux 内核数据结构

  • 阶段四:网络系统(2-3 个月)- 计算机网络 + Linux 网络栈

  • 阶段五:综合实战(1-2 个月)- 项目实践 + 408 冲刺


🔧 阶段一:硬件基础 - 计算机组成原理(3-4 个月)

1.1 数字逻辑与电路基础

理论学习:

  • 数字电路、布尔代数、逻辑门电路
  • 组合逻辑电路、时序逻辑电路
  • 编码器、译码器、多路选择器
  • 触发器、寄存器、计数器

硬件实践:

  • 使用 Logisim/Digital 搭建简单 CPU
  • Verilog HDL 基础实验
  • FPGA 开发板实验(可选)

1.2 计算机硬件系统

CPU 体系结构:

  • 冯·诺依曼体系结构 vs 哈佛体系结构
  • CISC vs RISC 指令集架构
  • x86/x64 体系结构深入分析
  • ARM 体系结构对比学习

指令系统:

  • 机器指令格式、寻址方式
  • 指令类型:数据传输、运算、控制转移
  • 汇编语言与机器语言对应关系
  • RISC-V 指令集学习(开源架构)

Linux 结合:

  • 分析 Linux 在 x86 架构上的启动过程
  • 理解 Linux 内核的架构相关代码(arch/x86/)
  • 学习内联汇编在 Linux 内核中的使用

1.3 处理器设计原理

CPU 内部结构:

  • 运算器(ALU)设计原理
  • 控制器设计:硬布线 vs 微程序控制
  • 寄存器组织、程序计数器、状态寄存器
  • 指令流水线设计与优化

高级 CPU 技术:

  • 超标量、超流水线技术
  • 分支预测、乱序执行
  • 多核处理器架构
  • 缓存一致性协议

实践项目:

  • 设计并实现简单的 CPU 模拟器
  • 分析 Linux 内核中的 SMP(对称多处理)支持
  • 研究 Linux 调度器如何利用多核架构

1.4 存储器系统

存储器层次结构:

  • CPU 寄存器、高速缓存、主存、辅存
  • 缓存设计:直接映射、组相联、全相联
  • 缓存替换算法:LRU、FIFO、随机替换
  • 写策略:写回 vs 写直达

主存储器:

  • SRAM vs DRAM 工作原理
  • 内存控制器设计
  • 虚拟存储器概念引入
  • 内存映射 I/O 机制

Linux 内存管理基础:

  • 分析/proc/cpuinfo和/proc/meminfo
  • 理解 Linux 内存布局
  • 学习内存屏障和缓存同步

1.5 输入输出系统

I/O 接口技术:

  • I/O 端口编址方式
  • 程序查询、中断、DMA 三种 I/O 方式
  • 中断系统设计:中断向量、中断优先级
  • 总线系统:系统总线、I/O 总线

存储设备原理:

  • 机械硬盘结构与工作原理
  • 固态硬盘(SSD)技术
  • 磁盘调度算法:FCFS、SSTF、SCAN 等

Linux 设备管理预览:

  • Linux 设备模型概述
  • 字符设备 vs 块设备概念
  • 中断处理机制初步理解

💻 阶段二:系统软件 - 操作系统 + Linux 内核(3-4 个月)

2.1 操作系统核心理论(408 重点)

基础概念:

  • 操作系统定义、功能、分类
  • 系统调用机制与用户态/内核态切换
  • 操作系统内核结构:宏内核 vs 微内核

关键机制:

  • 中断和异常处理机制
  • 系统引导过程详解
  • 内核数据结构设计

2.2 进程管理深入

进程理论:

  • 进程概念、进程控制块(PCB)
  • 进程状态转换图
  • 进程创建、终止、切换机制
  • 线程概念与实现模型

进程调度:

  • 调度算法:FCFS、SJF、RR、优先级调度
  • 多级反馈队列调度
  • 实时调度算法
  • 多处理器调度

Linux 进程管理实战:

  • 分析task_struct结构体
  • 进程创建:kernel/fork.c源码分析
  • CFS(完全公平调度器)原理与实现
  • Linux 进程调度类(scheduling classes)

2.3 进程同步与通信

同步理论:

  • 临界区、竞态条件、原子操作
  • 互斥锁、信号量、条件变量
  • 经典同步问题:生产者消费者、读者写者、哲学家就餐

进程间通信:

  • 管道、命名管道(FIFO)
  • 消息队列、共享内存、信号量
  • 信号机制详解
  • Socket 进程间通信

Linux 同步机制:

  • Linux 内核同步原语:spinlock、mutex、semaphore
  • RCU(读-复制-更新)机制
  • 内核抢占与 SMP 安全
  • futex(快速用户态互斥体)实现

2.4 内存管理系统

内存管理理论:

  • 内存分配策略:连续分配、分页、分段
  • 虚拟内存机制:请求分页、页面置换
  • 页面置换算法:FIFO、LRU、Clock 算法
  • 工作集理论与局部性原理

Linux 内存管理:

  • Linux 虚拟内存布局
  • 页面分配器:伙伴算法实现
  • Slab 分配器原理与实现
  • 内存映射与页表管理
  • OOM(内存不足)处理机制

2.5 文件系统

文件系统理论:

  • 文件概念、文件属性、文件操作
  • 目录结构:单级、两级、树形、图形目录
  • 文件分配方法:连续、链接、索引分配
  • 磁盘空间管理:空闲表、位图、链表

Linux 文件系统:

  • VFS(虚拟文件系统)架构
  • ext4 文件系统详解
  • 文件缓存机制(page cache)
  • 日志文件系统原理

📊 阶段三:算法基础 - 数据结构 + Linux 内核数据结构(2-3 个月)

3.1 基础数据结构与 Linux 实现

线性结构:

  • 数组与链表:Linux 内核链表实现分析(list.h)
  • 栈与队列:内核中的栈使用(中断栈、进程栈)
  • 字符串处理:内核字符串操作函数

Linux 内核链表深入:

  • 侵入式链表设计哲学
  • list_head结构体巧妙设计
  • 双向链表操作宏定义分析
  • RCU 保护的链表操作

3.2 树形结构与内核应用

二叉树理论:

  • 二叉搜索树、AVL 树、红黑树
  • B 树、B+树(数据库索引常用)
  • Trie 树(前缀树)应用

Linux 内核中的树结构:

  • 红黑树:rbtree.c实现分析,CFS 调度器中的应用
  • 基数树:页面缓存中的基数树使用
  • B+树索引:ext4 文件系统目录索引

实践项目:

  • 实现红黑树并对比内核实现
  • 分析 CFS 如何使用红黑树管理进程

3.3 哈希表与 Linux 实现

哈希理论:

  • 哈希函数设计
  • 冲突解决:开放寻址、链地址法
  • 动态哈希表扩容机制

Linux 内核哈希表:

  • 内核哈希表实现(hashtable.h)
  • 进程哈希表:PID 到 task_struct 的映射
  • 页面缓存中的哈希应用
  • 网络协议栈中的哈希表使用

3.4 高级数据结构

图结构与算法:

  • 图的存储表示
  • 深度优先搜索(DFS)、广度优先搜索(BFS)
  • 最短路径算法:Dijkstra、Floyd 算法
  • 最小生成树:Prim、Kruskal 算法

Linux 网络中的图算法:

  • 路由表实现与最短路径
  • 网络拓扑发现算法

排序算法深入:

  • 内排序算法复杂度分析
  • 外排序算法设计
  • Linux 内核排序函数分析

🌐 阶段四:网络系统 - 计算机网络 + Linux 网络栈(2-3 个月)

4.1 网络协议基础理论

网络体系结构:

  • OSI 七层模型 vs TCP/IP 四层模型
  • 协议栈设计原理
  • 网络服务质量(QoS)概念

物理层与数据链路层:

  • 信号传输、调制解调
  • 以太网协议、MAC 地址
  • 交换机工作原理、VLAN 技术
  • PPP 协议、HDLC 协议

4.2 网络层深入分析

IP 协议详解:

  • IPv4 报文格式、地址分类
  • 子网划分与 CIDR
  • IPv6 协议特点与迁移
  • NAT 技术原理与实现

路由算法:

  • 距离向量算法(RIP)
  • 链路状态算法(OSPF)
  • 边界网关协议(BGP)
  • 路由表查找算法优化

Linux 网络层实现:

  • IP 报文处理流程分析
  • 路由表实现:net/ipv4/route.c
  • netfilter 框架与 iptables
  • 网络命名空间实现

4.3 传输层核心机制

TCP 协议深入:

  • TCP 报文段格式详解
  • 连接建立:三次握手机制
  • 连接释放:四次挥手过程
  • 流量控制:滑动窗口机制
  • 拥塞控制:慢开始、拥塞避免、快重传

UDP 协议分析:

  • UDP 特点与适用场景
  • UDP 报文格式
  • UDP 与 TCP 性能对比

Linux 传输层实现:

  • Socket 层实现分析
  • TCP 状态机在内核中的实现
  • TCP 拥塞控制算法:Cubic、BBR 等
  • 高性能网络 I/O:epoll 实现原理

4.4 应用层协议与编程

常用应用层协议:

  • HTTP/HTTPS 协议详解
  • DNS 域名解析系统
  • SMTP/POP3/IMAP 邮件协议
  • FTP 文件传输协议

Linux 网络编程实战:

  • Socket 编程:TCP/UDP 服务器实现
  • 高并发服务器模型:多进程、多线程、异步 I/O
  • 网络性能优化技术
  • 负载均衡与反向代理实现

🚀 阶段五:综合实战 - 项目实践 + 408 冲刺(1-2 个月)

5.1 大型项目实践

项目一:简化操作系统内核

  • 实现基本的进程调度器
  • 设计简单的内存管理系统
  • 实现基本的文件系统
  • 支持基本的系统调用

项目二:网络协议栈实现

  • 用户态 TCP/IP 协议栈实现
  • 支持基本的 Socket 接口
  • 实现 ARP、ICMP 协议
  • 性能测试与优化

项目三:分布式存储系统

  • 设计分布式文件系统
  • 实现数据分片与复制
  • 一致性哈希算法应用
  • 故障检测与恢复机制

5.2 Linux 内核贡献准备

内核开发环境:

  • 内核编译与调试环境搭建
  • Git 版本控制与内核补丁制作
  • 内核编码规范学习
  • 邮件列表参与方式

内核模块开发:

  • 高级字符设备驱动
  • 块设备驱动开发
  • 网络设备驱动
  • 内核调试技术

5.3 408 考研冲刺复习

知识体系梳理:

  • 四门课程核心概念总结
  • 跨学科知识点关联分析
  • 高频考点专项突破
  • 计算题型专项训练

应试技巧训练:

  • 历年真题套题练习
  • 时间分配策略制定
  • 答题规范与技巧
  • 模拟考试与查漏补缺

📚 学习资源

硬件基础书籍

  • 《计算机组成原理》- 唐朔飞(408 考试指定)
  • 《深入理解计算机系统》(CSAPP) - 必读经典
  • 《计算机体系结构:量化研究方法》- Patterson & Hennessy
  • 《数字设计和计算机体系结构》- Harris & Harris

操作系统与 Linux

  • 《计算机操作系统》- 汤小丹(408 考试)
  • 《操作系统概念》- Silberschatz(经典教材)
  • 《深入理解 Linux 内核》- Bovet & Cesati
  • 《Linux 内核设计与实现》- Robert Love
  • 《Linux 设备驱动程序》- Rubini

数据结构与算法

  • 《数据结构》- 严蔚敏(408 考试)
  • 《算法导论》- CLRS(算法圣经)
  • 《数据结构与算法分析》- Weiss

计算机网络

  • 《计算机网络》- 谢希仁(408 考试)
  • 《TCP/IP 详解》三卷本 - Stevens(网络编程经典)
  • 《计算机网络:自顶向下方法》- Kurose

在线资源

  • Linux 内核官方:kernel.org
  • 内核开发社区:LWN.net
  • 在线源码浏览:elixir.bootlin.com
  • RISC-V 学习:riscv.org
  • 开源硬件设计:opencores.org

🛠️ 实验环境搭建

硬件仿真环境

  • CPU 设计:Logisim-Evolution、Digital
  • FPGA 开发:Vivado、Quartus(可选)
  • 硬件调试:GDB + QEMU

Linux 开发环境

  • 虚拟机:QEMU/KVM、VMware
  • 容器:Docker 开发环境
  • 调试工具:GDB、SystemTap、perf、ftrace
  • 源码管理:Git、Vim/VSCode

网络实验环境

  • 网络仿真:Mininet、GNS3
  • 抓包分析:Wireshark、tcpdump
  • 性能测试:iperf3、netperf

🎯 学习方法建议

硬件到软件的渐进式学习

  1. 硬件基础扎实:深入理解硬件原理,为软件学习打基础
  2. 理论结合实践:每个概念都要有对应的 Linux 实现分析
  3. 源码驱动学习:通过阅读源码加深对理论的理解
  4. 项目验证知识:通过实际项目检验学习成果

系统性思维培养

  • 层次化思考:理解各层之间的接口和交互
  • 全栈视野:从硬件到应用的完整技术栈理解
  • 性能意识:时刻考虑性能影响因素
  • 工程实践:注重可维护性和可扩展性

🏆 预期学习成果

完成这个学习路线后,将获得:

理论深度

  • 408 考研:四门课程的深入理解和应试能力
  • 系统原理:从硬件到软件的完整知识体系
  • 性能优化:基于硬件特性的软件优化能力

实践能力

  • 内核开发:Linux 内核模块和驱动开发能力
  • 系统编程:高性能系统软件开发能力
  • 网络编程:大规模网络应用开发能力
  • 性能调优:系统级性能分析和优化能力
最近更新: 2025/10/2 03:59
Contributors: zero