操作系统 & 编译原理 学习攻略
本文简单总结了操作系统和编译系统的优秀学习资源和学习顺序。
PS:所有加 * 的内容都整体较难,可以选择性的阅读
推荐前置学习内容
C语言,推荐Linux C编程一站式学习
*深入理解计算机系统,神书不解释
操作系统篇
计算机体系结构
计算机速成课 P1 ~ P9 用通俗易懂的语言介绍了计算机底层硬件的工作原理
Nand2Tetris Project1 ~ Project6 相关视频,课程设计了硬件模拟器,可以让我们设计一个简单的CPU,了解计算机底层硬件的实际工作原理。课程前六章的作业较为简单,对初学者很友好
*计算机体系结构 这是计算机体系结构的教材,讲的很全很深,不适合初学者
操作系统
操作系统导论,结构清晰,内容通俗易懂的操作系统入门书籍,官网上可找到相应的作业代码(提供的python代码是python2的),对于一些不清楚的内核接口,可以查阅UNIX环境高级编程,配合使用,威力无穷。
*当你来到这里的时候,简单的理论无法满足你的需求,要想再进一步,就需要看真正的操作系统代码,Linux 0.12版的代码就是很好的学习素材。哈工大的 操作系统 课程,配合 linux内核完全注释,让你明白花儿为什么这样红。
**Linux 0.12的代码虽然基本功能较为完善,但距离真实使用的操作系统仍有不小的差距,这时候就需要 Linux内核源代码情景分析 帮你理解一下 Linux 2.40 版本的源代码(注:零基础不要直接刷大BOSS,会被一招秒。。。)
编译原理篇
热身
UC Berkeley CS 61A 的编程入门神课,前半部分讲 python,后半部分会用python 实现一个简单的 Lisp 语言解释器
*Nand2Tetris Project7 ~ Project11,相关视频需要翻墙去youtube上找,这几个项目相对之前难度明显上升,会用一条简单的汇编来实现一个类 Java 语言
*计算机程序的构造和解释,神书中的神书,使用Lisp写一个Lisp解释器,实现自举
正题
*在完成了以上内容之后,相信你已经对编译原理有了大致的系统认知,接下来就是具体内容的深入学习,前端可以看大名鼎鼎的龙书 编译原理,后端可以看 编译器设计
*如果觉得单单看书太过枯燥无味,可以看一些github上大神的项目
- UCC 用C语言实现的C语言编译器,实现自举
- awesome-compilers compiler资源大集结