Linux内核-0x3 内核架构

上篇文章讨论宏内核/微内核/混合内核来,读了些《深入解析Mac OS X & iOS操作系统》[1]内核架构那一章,其中对不同类型的内核有些解读。

除此之外,内核还有一些重要的内容如用户态/内核态的转换,那么又涉及到系统调用和内核陷入等。这些能力所依赖的权限,其安全保障是由硬件实现的,所以又涉及到了不同CPU架构的不同实现,还是比较复杂的,不过从宏观框架来看还是可以看懂的,一些思考和记录于下。

架构

『内核是一个调度器,内核也是一个仲裁器(arbiter),内核提供安全服务(security service)。』[1]

宏内核架构

UNIX/Linux采用的是宏内核(也称巨内核,monolithic),是目前使用非常广泛的内核架构,典型的架构图如下所示:

UNIX/Linux宏内核架构

图中可以看到,内核空间中包含了所有系统核心的功能内容,用户空间通过系统调用与内核功能进行沟通。这也是宏内核系统的特点,如果内核中有组件挂了,那整个系统都可能被拉挂。

从这张图也可以看出,宏内核需要关注的重点是『网络系统』、『文件系统』、『进程内存』等。

顺便吐槽一下,国内不少大学用的是国内某些老师出的教材,教材和讲课的重点都在进程调度、内存管理上,并非不好,但这样弱化了操作系统的全貌,或以为操作系统就是调度和内存管理,像UNIX类系统一个非常科学的做法『一切皆是文件』的思想就无法被学生学习到,而这个思想却是UNIX类系统甚至学习操作系统的都应该要有一定理解的。

『一切皆是文件』大意是用文件去抽象了不同的设备,通过定义字设备、块设备等方法去统一了不同的硬件设备的对接。

相关资料可以参看

微内核架构

微内核架构大致如下所示:

微内核架构

图中看起来,宏内核中的组件被拆开,核心内容放在内核空间,其它都拆到了用户空间,使用内核会非常的小。拆到用户空间的模块也是独立开的。

纯微内核的系统商业系统中应该是没有的,主要是因为微内核系统核心是通过『消息传递』的方式进行的,需要在不同组件之间进行内存拷贝及上下文切换来实现,效率相比宏内核要低不少,成为致命伤。

但是微内核有一些优点,比如内核的正确性(验证)是比较容易的,独立组件出现故障一般只需要重启组件而不会宕机,独立组件对于不同硬件平台实现起来也是更容易的。

混合内核

混合内核并非宏内核+微内核,而更像是内核中包含一个更小的核心,如MacOS其实是BSD包着Mach内核的,而BSD包起来产物就是MacOS的内核,叫XNU内核。

所以混合内核的核心组件也都是在内核中的,跟宏内核从宏观上看起来是一样的,组件(都在内核中)挂了也会拖挂整个系统的,不像微内核那样很健壮(不在内核中的组件挂了可以重启恢复),但是混合构应该在维护上比如宏内核容易一些。

内核使用的内存

用户态、内核态、安全

态转换

『结界』入口及处理


附录

[1] 深入解析Mac OS X and iOS操作系统 /(美)莱文(Levin,J.)著;郑思遥,房佩慈 译.——北京:清华大学出版社,2014