本文简单总结了操作系统和编译系统的优秀学习资源和学习顺序。

PS:所有加 * 的内容都整体较难,可以选择性的阅读

推荐前置学习内容

  1. C语言,推荐Linux C编程一站式学习

  2. *深入理解计算机系统,神书不解释

操作系统篇

计算机体系结构

  1. 计算机速成课 P1 ~ P9 用通俗易懂的语言介绍了计算机底层硬件的工作原理

  2. Nand2Tetris Project1 ~ Project6 相关视频,课程设计了硬件模拟器,可以让我们设计一个简单的CPU,了解计算机底层硬件的实际工作原理。课程前六章的作业较为简单,对初学者很友好

  3. *计算机体系结构 这是计算机体系结构的教材,讲的很全很深,不适合初学者

操作系统

  1. 操作系统导论,结构清晰,内容通俗易懂的操作系统入门书籍,官网上可找到相应的作业代码(提供的python代码是python2的),对于一些不清楚的内核接口,可以查阅UNIX环境高级编程,配合使用,威力无穷。

  2. *当你来到这里的时候,简单的理论无法满足你的需求,要想再进一步,就需要看真正的操作系统代码,Linux 0.12版的代码就是很好的学习素材。哈工大的 操作系统 课程,配合 linux内核完全注释,让你明白花儿为什么这样红。

  3. **Linux 0.12的代码虽然基本功能较为完善,但距离真实使用的操作系统仍有不小的差距,这时候就需要 Linux内核源代码情景分析 帮你理解一下 Linux 2.40 版本的源代码(注:零基础不要直接刷大BOSS,会被一招秒。。。)

编译原理篇

热身

  1. UC Berkeley CS 61A 的编程入门神课,前半部分讲 python,后半部分会用python 实现一个简单的 Lisp 语言解释器

  2. *Nand2Tetris Project7 ~ Project11,相关视频需要翻墙去youtube上找,这几个项目相对之前难度明显上升,会用一条简单的汇编来实现一个类 Java 语言

  3. *计算机程序的构造和解释,神书中的神书,使用Lisp写一个Lisp解释器,实现自举

正题

  1. *在完成了以上内容之后,相信你已经对编译原理有了大致的系统认知,接下来就是具体内容的深入学习,前端可以看大名鼎鼎的龙书 编译原理,后端可以看 编译器设计

  2. *如果觉得单单看书太过枯燥无味,可以看一些github上大神的项目

其他资源整理