[本博客连载并且会持续修正,转载请注明出处:http://blog.chinaunix.net/uid-26583089-id-5729088.html]

    我和很多朋友一样,是为了摆脱对计算机的好奇学习内核的,“没有生命的计算机是如何理解程序的”!
    “理解”一词,往往是我们揭不开计算机神秘面纱的主要原因。戳一下气球,它会爆炸,就说明气球能理解“戳”这个动作吗,那它为什么不跑?这只是一种很基本的物理现象罢了,就如同生物界的“条件反射”,并没有思考的过程。计算机也同样,它对于人类指令的反应,只是一组硬件发生了连续的物理动作,而这种动作是人类事先安排的,即使是“闹铃”,那也是人类安排的一个定时器。
    程序是什么?是一组开关状态。光是把电脑屏幕理解为很多个灯的话,就不难理解为什么是一组开关,而不是一个。
    那这组开关状态又是怎么“钻进”电脑的?BIOS里面的程序是“烧”进去的,可以理解为人工按进去的,其它的程序又是通过这段程序“拖”进去的。
    高级程序由编译器翻译成二进制,世界上第一个编译器自己由什么翻译?不用翻译,直接用开关编写。
    高级语言依赖文字,那么文字是怎么“写进”电脑的?文字其实是一个开关矩阵,特殊电路根据矩阵中0或1的位置在屏幕轰击,便是文字的形状,也就是说往电脑“写字”,其实还是按开关。另外,文字的集合,就是字库,每个文字对应一个编号,使用文字是使用相应的编号,而不是对应文字开关的开关矩阵本身。
    。。。
    内核是什么?
Linux内核预备知识(1)-LMLPHP
    任何程序都是加载进内存才可以执行,如果站在可以看见内存全貌的地方,就发现内存里有一份内核代码,和各种不同的用户程序代码(暂且把代码中使用的数据,也算做代码),而有些进程只执行内核代码中的指令,有些进程既执行内核代码中的指令,又执行用户程序中的指令。
    如何区分内存中的一份代码是内核代码,还是用户代码?这就是“存储管理”一节所要讲述的,目的是让学习者理解“内核空间/用户空间”。
    计算机的使命无非是执行内存中这些指令,虽然很多朋友目前对内核可能还一无所知,但至少了解内核的权限比普通程序的权限大吧,所以用户代码就不可能随意调用内核函数了,否则就是“垂帘听政”,用户进程想干嘛就干嘛了。然后,内核程序的主要意义,就是为用户程序封装与硬件打交道的细节,用户进程需要与某些硬件交互时,必须经由内核。怎么解释这一对矛盾的问题呢?那就是“中断、异常和系统调用”这一节的目的。
    每个进程虽然有if、switch等,可以控制CPU“跳着”执行一些指令,但再怎么也跳不到别的进程,那是如何做到让多个进程轮流着执行的呢?“进程与进程调度”一节正是解答这个问题。
    进程间通信又是如何做到的?期待“Unix进程间通信”这一节吧。
    上图只画了内存中的内容,除了内存,还有很多外置,比较重要的就是文件系统,所以专门有一节“文件系统”,用于解开文件系统的实现内幕。
    学习完《Linux内核源代码情景分析》上册,理解以上的几个问题后,自然就理解内核是什么了。而且如上图所画,我们不能只片面的问自己内核是什么,否则我们可能永远得不到答案,我们要知道整个系统大致是如何运作的,并体会内核充当的是什么样的角色。比如,没见过汽车去想发动机是什么,我们可能会想得头破血流,可能觉得它是从火星来的不明物体,也可能觉得它就是一堆废铁。。
    总之,就是不要急于通过哪一篇文章就能一下子理解内核是什么,那是不可能的,我们需要对以上问题有一个比较全面的理解之后,才能体会内核是什么,并且脚踏实地的的花时间去搞懂这些问题,是一定能理解内核的,就放心的学习吧。

01-19 05:27