Linux 内核学习感想


  说实话,学习Linux内核是一件极其艰难的事,是一件需要毅力的事情。可是有毅力的人不一定能真正的去理解Linux内核。个人感觉学习Linux内核首先需要对操作系统的实现具有浓厚的兴趣,其次要找到一个好的切入点,最后要有一定的理论基础。

  上面提到的:兴趣,切入点,以及理论基础都是必要的。

  理论基础是说你需要了解操作系统的基本概念,什么是操作系统,操作系统中的内存管理与进程管理(个人认为这是操作系统中的难点)是如何进行的,另外还要明白什么是中断,什么是系统调用。另外就是弄清楚地址空间的概念:虚拟地址,线性地址,物理地址各有什么不同。另外不同操作系统对这些地址的理解也不同,把虚拟地址转化为线性地址在windows和linux环境下有什么不同,这些东西都需要有一定的概念。

  兴趣是需要的并且是可以培养的,你需要有一个亲自尝试的机会,记得大三的时候我们有一门叫做操作系统实习的课,课程材料使用的是MIT的研究生教学资料。这门课其实就是完成6个有关操作系统的实习,完成这6个实习的过程,其实也就是你亲自创建一个自己的操作系统的过程。在这门课程中你可以清楚地知道操作系统的启动过程,以及在X86体系结构下处理器如何从实模式转换到保护模式。你可以清晰的了解到内存的段页式管理是怎么回事,中断和系统调用是如何实现的。另外进程切换是如何实现的,什么是进程,用什么样的数据结构去描述一个进程。接着你还可以了解到文件系统是如何实现的。最后可以了解到进程的创建以及一个可执行程序是如何在操作系统上运行的。所有的这些东西如果不是自己亲自去试一试,很难想象你会有兴趣一直研究有上千万行代码的Linux内核。

  最后是切入点,你可以选择自顶向下的阅读相关的部分,也可以自底向上阅读这些代码。我使用的是后一种方法,我目前在从事一种块设备的驱动程序开发。虽然在开发中自己需要完成的部分虽然根本就涉及不到块设备层的相关数据结构和算法。但这是一个切入点,你可以循着这条线向上弄清楚linux设备驱动中块设备驱动的基本上实现方法,朝旁边发展你可以研究MTD层是如何实现的,继续朝上走,你可以了解具体文件系统层是如何实现的,继续 朝上你可以了解VFS是如何实现的。

  这样你基本上就可以把握住Linux操作系统的核心了——linux是一个以“文件系统”为基础的操作系统。其他的部分学习起来就会相对较为容易。

  作者:winuxpku

相关内容