我也来看图说Linux系统内核

812 阅读7分钟

关于Linux内核的基本架构和工作原理,曾经有一张生动有趣的图,可以帮助Linux系统入门和技术人员来理解其构成和运行原理:

172808pim5iueyqwa5egww.jpg

有关这个图的解读,其实网上已经有很多说得也是非常精彩的。但笔者希望加入一些自己的思考和理解,和觉得有必要扩展的内容,希望能够更好的帮助读者。

来源: turnoff.us

这个图的原图在: turnoff.us。关于这个网站,有这样的表述:

{turnoff.us} is a geek comic site. Comics about Programming Languages, Web, Cloud, Linux, etc... 这是一个极客漫画网站,关于编程语言,Web,云计算,Linux等等...

有趣或者无聊的开发者,可以不时的去访问一下,说不定会有一些灵感,或者会心一笑(比如这个感受一下)。

security-expert.png

本文主题这个图的名字是: Inside The Linux Kernal(在Linux的内核),原图完整版的地址是:

turnoff.us/image/en/in…

这个图的精髓,笔者觉得可以一句话来总结,让我们来体会和思考吧:

Evil Is In The detail (魔鬼在细节里)

架构

先来看看整体架构。这是一个大楼内部一角,忙碌的场景,这个大楼的一角,就是Linux内核。从图上可以看到,这个部分其实是一个两层半的结构。

最下面一层看起来像是一个仓库,就是文件系统(File System);地面层有很多人(大部分都是企鹅)在各种忙碌,代表着进程表(Process Table);还有一个跃层,代表着人机交互界面(Terminals And Termina process);这些就是Linux内核的基本层次架构,所有程序执行、资源调度、系统功能都在这个内核中运行和实现。

角色和进程

图中有很多企鹅,它们通常代表着在Linux内核中运行的进程。之所以使用企鹅,应该是因为Linux的Logo和形象代表就是一个企鹅。但如果我们认真观察,会发现虽然它们都是企鹅,但是它们的装扮、动作甚至神态都是不一样的,隐喻着它们有不同的特性和状态。一般情况下,企鹅的胸前会挂着一个写有数字的工牌,代表着这个进程的进程编号,还有其他的内容,我们在后面会详细分析。

除了企鹅之外,我们还看到有几条小狗。这些都是看门狗(Watch Dog)。它们负责在系统内部进行巡查,处理各种异常状况。

最后还有一个小丑,应该就代表着系统内部的异常进程,比如病毒木马等恶意软件。

门和楼梯

这个大厅里面,有几扇门,代表着和外部世界沟通的网络端口。

左边的那个门上面的编号是80,这是标准的HTTP的端口号,所以这是一个标准Web端口;端口旁边有一个守卫进程,熟悉网络编程的同学应该可以看出来它就是Apache Tomcat,因为它头上戴着那个熟悉的羽毛。

中间角落里面那个门的门牌都歪了,因为它已经年久失修。因为它是ftp端口(端口编号21),现在已经基本上没人用了。

右边那个门编号是22,就是SSH的端口,旁边那个戒备森严,戴墨镜耳机的保安,表明了这个端口的安全级别比较高。

SSH旁边的楼梯,可以上到交互界面层;而21端口旁边,还有一个隐蔽的楼梯,上面FS的指示牌,表明从这里可以下到文件系统层。

文件系统

文件系统是单独的一层。这里面有很多柜子,按照行列码放整齐,表明了文件系统保存文件的方式和结构。文件放在柜子的抽屉里面,而且也是按照索引依次存放。

大部分抽屉都是关闭的,说明现在还没有人来访问。库房里有编号是421的一个进程正在查看文件;还有一个柜子已经打开,但旁边却没有人,可能是那个进程打开了文件,却由于某种原因没有正常关闭(比如异常或强行退出,甚至进程本身就忘了要关闭文件句柄),所以需要一条看门狗来进行处理。

交互界面

交互界面是一个跃层,说明它是内核的一部分,但和进程管理大厅联系紧密。这里墙上有很多屏幕,代表它通过可视化的界面来处理信息,实际上就是系统和人的交互界面。

屏幕有很多个,代表系统可以同时处理多路的命令交互。屏幕上的内容都有不同,有的屏幕还没有开启,有的屏幕是字符界面,有的还有图形界面,代表不同的GUI的交互状态。

这里有两个进程来管理这些屏幕。有一个进程面向屏幕,正在一个控制板上进行操作,笔者的理解是它是一个输出进程,可以控制各个屏幕的不同状态和输出内容;另一个进程面向大厅,手中拿着一份文件,应该正在向大厅里面的进程下达质量,所以它是一个输入控制进程。 这样我们也能够理解为什么这里是一个半层,因为它需要一个开放的架构来连接输入输出和执行进程。

忙碌的大厅

大厅里,就是各种进程运行和忙碌的主要场所了。

大厅的中心,是一张长条桌。这里应该就是主进程表了,一个主进程正在和一堆进程开会,可能正在协调它们的运行;这些进程神态和状态各异,有的认真听讲,有的不屑一顾,有的左顾右盼,有的沉默不语...,确实很像系统中各种任务执行的状态。

大厅一角堆了很多管道,这是Linux处理信息的重要机制。两个进程正在忙碌的使用一根管道进行数据的搬运。

大厅里还有几个比较特殊的进程。编号为213的正在紧张的看着它的手表,它是Cron(定时任务)进程,它负责定时执行一些任务;另一个端着酒杯,有点喝醉了的应该是Wine()进程。

还有一个没有在进程表桌子上的进程正在游荡,这应该是一个孤立进程或者状态异常的进程,系统正常派出看门狗来对它进行清除。

Linux内核和生态

通过上面的解读,笔者相信大家都对Linux内核有了更深入的了解。理解了这个,有助于我们理解Linux内核在Linux生态系统中的意义和定位。

所以,严格的说来,Linux不是一个操作系统,它只是一个操作系统内核。软件开发商或者各种开源软件社区,基于这个内核,配套开发了相关安装和部署程序、驱动程序、图形界面、管理工具、文件系统、应用软件等等,开发和包装出了大众认知意义上的操作系统来和Window或者Mac OS系统进行对应,这些都称为发行版。然后基于Linux内核和这些发行版本,进一步开发和丰富了相关的应用软件和系统,逐步构建成为现在庞大而丰富的Linux软件生态系统,从而支撑其我们现在丰富多彩的互联网世界。