大家好,我是小北。
今天单独讨论下,如何学习操作系统这个话题。
操作系统发展到今天,已经非常复杂了,像Windows、Linux任意一个都是几千万行代码级别,想靠个人完全搞懂,几乎是不可能的了。
所以需要先明确一下我们学习的目的,不同的学习目的,适用不同的方法,这里我仅仅列一下作为一名开发人员,我们掌握OS的几种目标:
第一种:
知晓OS基本概念:看在线课程原理部分的视频或者看《现代操作系统》之类的书,可大致知道OS的概念;
第二种:
理解OS基本原理:在1的基础上,完成与OS相关的课程练习题,可进一步理解OS基本原理,练习题可以参考学堂在线清华OS课程的练习题:
第三种:
掌握OS部分核心功能实现(细节):在2的基础上,能够通过编程完成类似xv6的几个lab,
比如xv6就会涉及以下模块:
BootingaPCMemoryManagementMultitaskingFilesystem,SpawnandShellNetworkDriver每个模块代码量都不会很多,但是麻雀虽小,五脏俱全,通过自己动手实现thread、spinlock、semaphore这些东西,会让你理解更加深刻。
当然,在往上走就是去研究最新LinuxKernel,研究一些子模块了,有些还需要阅读最新的System领域论文。
最新的LinuxKernel里有很多新的算法、研究结果不断的加入。
当然,这就超出了我所能掌握的范畴了哈哈。
不过说实话,如果你还在校大二大三,我真的墙裂建议你去做一些国外的计算机lab,比如OS、Network。
等到毕业了,几乎就不太可能从头开始系统学习那些基础知识了,除非你能自己闭关两三年,啥也不做,待在一个地方专心修炼。
好好珍惜在学校大把的空闲时间,做一些让在专业上让自己受益一生的事情。
这里我可以列举几个,国内不少喜欢System的同学都会去跟MIT、CMU、UCB这些计算机名校的课程。
比如MIT的6.DistributedSystem、6.DatabaseSystems、MIT6.OperatingSystemEngineering.....
xv66.就是今天要介绍的主角:
MIT6.:OperatingSystemEngineering