Introduction

用户与内核的比较

典型操作系统架构

../_images/Typical_operating_system_architecture.svg

单体内核

../_images/Monolithic_kernel.svg

单体内核 可以 是模块化的

“混合”内核

许多操作系统和内核专家认为这种标签没有实际意义,仅仅是市场营销的策略。Linus Torvalds 对此评论道:

“至于所谓的‘混合内核’,那完全是营销的产物。‘噢,微内核获得了很多好评,我们怎样才能为我们的内核也赢得一些好评呢?我有个主意,就让我们给它起一个很酷的名字,暗示它拥有所有其他系统的优势。’”

地址空间

  • RAM 和外设内存

用户和内核共享虚拟地址空间

../_images/User_and_kernel_sharing_the_virtual_address_space.svg

执行上下文

多任务处理

抢占式内核

抢占式多任务处理与抢占式内核是两个不同的概念。

如果一个进程在内核模式下运行时可以被其他进程抢占,那么这个内核就是抢占式的。

然而,请注意,即使是非抢占式内核,也可能支持抢占式多任务处理。

可分页的内核内存

如果内核内存的某些部分(如代码、数据、堆栈或动态分配的内存)能够被交换到磁盘上,那么该内核就支持可分页的内核内存。

内核堆栈

每个进程都配备了一个内核堆栈,该堆栈用于维护函数调用链和局部变量的状态。当进程因系统调用而运行在内核模式下时,会使用到这个内核堆栈。

由于内核堆栈的容量相对较小(通常在 4 KB 到 12 KB 之间),内核开发人员必须避免在堆栈上分配大型数据结构或进行深度未受限的递归调用。

可移植性

非对称多处理(ASMP)

../_images/Asymmetric_multiProcessing.svg

对称多处理(SMP)

../_images/Symmetric_MultiProcessing.svg

CPU 可扩展性

Linux 开发模型

维护者层次结构

Linux 源代码布局

../_images/ditaa-f45246aade5ecc7cfb71f7f103a57f95fc7c2b9e.png

Linux 内核结构

../_images/Linux_kernel_architecture.svg

arch

设备驱动程序

进程管理

内存管理

块I/O管理

../_images/Block_IO_management.svg

虚拟文件系统

../_images/Virtual_Filesystem_Switch.svg

网络堆栈

../_images/Networking_stack.svg

Linux 安全模块