爬完这6个坡,你就能对Linux操作系统了如指掌。操作系统在幕后默默地做了什么,让我们可以轻松使用电子设备?不知道大家是否有过这样的疑问:桌面上的图标是什么?美丽的画面会出来吗?这个是从哪里来的?计算机怎么知道这是我用鼠标点击的地方,又怎么知道这是我要输入的地方呢?为什么这些字符会发送到远处的另一台机器?对于普通用户来说,只要知道怎么用就够了。但作为专业人士,我们需要深究其背后的答案。操作系统其实就像一个软件外包公司,它的核心相当于外包公司的老板。你为什么这么说?假设我们现在是一家外包公司,我们的目标是让这家公司上市。其中,操作系统是这家外包公司的老大。我们把这家公司的发展阶段分为以下几个时期:创业期:老板基于开放的商业环境(x86架构)创办了一家外包公司(系统创业公司)。因为一开始没有其他员工,需要老板亲自接手这个项目(实模式)。发展期:公司逐渐壮大,接入的项目越来越多(保护模式,多进程)。为了管理各类外包项目,建立了项目管理系统(流程管理)、会议室管理系统(内存管理)、文档管理。系统(档案系统)、售前售后系统(输入输出设备管理)。成长期:公司越来越好,开始推动内部项目合作(进程间通信)和外部公司合作(网络通信)。集团化:公司业务不断增加,将成立多个子公司(虚拟化)或鼓励内部创业(容器化)。这时候,公司就变成了一个集团。Butler的调度能力不再局限于一家公司,而是集团公司(Linux集群),从而成功上市(从单机操作系统到数据中心操作系统)。外包公司上市的过程就是从入门到掌握Linux操作系统的过程。要像手背一样了解Linux,我认为您需要爬6个陡峭的斜坡。第一个坡:摒弃旧的思维习惯,熟练使用Linux命令行。入门Linux的第一步就是从Windows的思维习惯切换到Linux“命令行+文件”的使用方式。不过,在本专栏中,命令行不是我们的重点,但是考虑到一些刚入门的同学,我在第一部分会简单介绍一些可以让大家快速上手Linux的命令行。在专栏每个模块的第一节,我都会有针对性地讲解本模块的常用命令,足够你使用Linux了。第二坡:通过系统调用或glibc,学习用代码编程和操作Linux。您可以直接使用Linux系统调用或使用glibc库。如果说用命令行的人吃的是馒头,那么写代码操作命令行的人就是做馒头的。你会发现你平时使用的一个简单的命令行需要N个系统调用的组合才能完成。其中每一个系统调用都需要深入研究,阅读文档,做实验。经过一段时间的学习,你已经很接近操作系统的原理了,可以看到另外一个景象了。第三坡:了解Linux内核的机制,反复研究关键突破点,进一步了解内核的原理,有助于你更好地使用命令行和程序设计,可以将你的操作和开发水平提升到更高的水平等级。Linux内核机制是我们专栏的主要部分。我将基于最新的4.x内核进行解释。当然,我也意识到内核机制的复杂性,所以我选择通过故事和图文来帮助大家。了解并记住这些机制。第四坡:阅读Linux内核代码,关注核心逻辑和场景。一旦你爬上了这个斜坡,你应该对操作系统的原理有了更清晰的掌握。这个时候可以有针对性的做项目,把所学的和现在做的结合起来,进行重点突破。比如你学的是虚拟化,就重点研究KVM这部分;如果你学的是网络,重点关注内核协议栈的部分。第五个斜坡:试验定制的Linux组件。没有人能阻止你成为一名内核开发工程师。从只看内核代码到开始修改内核代码,这又是一个很大的坎。比如你可以自己实现一个设备驱动,实现自己的系统调用,或者实现自己的文件系统等等。在专栏的最后部分,我特意设计了两个实验来帮助大家跨过这个坎。只要你按照我的步骤学习,那么没有人能阻止你成为内核开发工程师。第六坡:面向现实世界的发展,实践没有尽头。说了这么多,我们才迈出了万里长征的第一步。我始终坚信,真正的高手,都是在实战中练就的。如果你是做运维的,仅仅熟悉上面的基本操作是不够的。生产环境中会存在很多不可控因素,尤其是大型集群。很多运维经验都来自于实战,不能只靠看书。如果是开发,对内核做少量的修改很容易,但是一旦面对真实的场景,就需要考虑各种因素,比如并发和并行、锁和保护、扩展性和兼容性,所有这需要实际项目来练习。
