如何学习操作系统原理?

我们简单地谈一谈如何学习操作系统原理,这里我们假设读者基本是一个小白,只有一点算法和数据结构的基础,比如会用C语言写链表,快排之类的。有一点我们必须强调,一切没有(伪)代码的理论书籍都是在耍流氓。所以根据这条准则,我们得通过编程的方式来学习操作系统原理。引用某老师的一句话,"Learning by coding them"。还有一点,学习操作系统原理不是学习怎么用各种API以及如何配置操作系统里头的各种参数,我们得站在更高的角度去审视,我们得思考如何在内核中实现这些API和配置项。

本着授人以鱼不如授人以渔的准则,我们给出一个确实可行的学习路线,最好循序渐进地进行,当然可以根据自身水平跳过某些阶段:

 

第一阶段 学习计算机组成原理和体系结构:

第一步,上coursera网课:from Nand to Tetris I,获得基本的计算机组成原理知识。

第二步,细读深入理解计算机系统第二版,并做课后对应习题和实验,获得基本的计算机体系结构方面的知识。资源可以从csdn搜索各章对应Lab源码和解题报告。

 

第二阶段 学习80386相关的汇编知识:

第一步,细读汇编语言第二版(王爽),略读Professional Assembly Language (Richard Blum),细读X86汇编语言从实模式到保护模式(李忠),获得能够徒手编写gasm,nasm,wasm格式的16位/32位80386体系下的汇编小程序,并能自如地在汇编中调用C函数,在C函数中内联汇编或者调用汇编函数,重点了解80386体系方面的知识。

 

第三阶段 阅读早期操作系统代码:

第一步,细读orange'S 一个操作系统的实现(于渊),获得操作系统微内核体系基本知识。

第二步,细读Linux内核完全注释(修正版v3.0 赵炯)+ UNIX操作系统设计(Maurice J.Bach),获得操作系统宏内核体系基本知识。

Linux 0.11 源码+bochs平台运行环境:

配套视频链接:网易云课堂:操作系统课程,哈尔滨工业大学

hit-oslab-linux-20110823.tar.gz + Linux内核完全注释(修正版v3.0).pdf

配套资源链接:https://github.com/Yuandong-Chen/Linux-0.11

 

通过上述步骤的学习,读者能够获得扎实的操作系统原理方面的基础。重要的是,上述所有资源都可以在网上找到,完全免费。你完全能够发挥自己的想象,写出一个属于自己的基于80386体系的但是没法联网的操作系统了。如何写出一个能联网的操作系统呢?这是计算机网络方面的知识,又是另外一条学习路线。

 

posted @ 2017-07-20 17:30  zyzacz  阅读(15239)  评论(3编辑  收藏  举报