什么是内核
计算机是由各种外部硬件设备组成的,比如内存、CPU、硬盘等,如果由应用程序直接和硬 件进行交互,不仅开发难度大,而且很不安全。操作系统内核的角色就是 应用连接硬件设 备的桥梁 ,使应用程序只需要关心如何和内核提供的 API 进行交互,不需要关心硬件的细 节。
现代操作系统内核一般具备以下能力:
- 进程调度的能力,管理进程、线程,决定哪个进程、线程使用 CPU;
- 内存管理的能力,管理内存,决定内存的分配和回收;
- 硬件通信能力,管理硬件设备,为进程与硬件设备之间提供交互能力;
- 提供系统调用,如果应用程序要运行更高权限的服务,就需要有系统调用,它是用户程序 与操作系统之间的接口。
内核具有很高的权限,可以直接控制 CPU、内存、硬盘等硬件,而为了安全和稳定性考虑, 应用程序具有的权限通常很低。因此大多数操作系统把内存分成了两个区域:
- 用户空间,这个内存空间专门给应用程序使用;
- 内核空间,这个内存空间只有内核程序可以访问。
用户空间的代码只能访问一个局部的内存空间,而内核空间的代码可以访问所有内存空间。
因此,当程序使用用户空间时,我们常说该程序在用户态执行,而当程序使内核空间时,程 序则在内核态执行。
Linux 内核设计
Linux 内核设计的主要特点:
- MultiTask,多任务
- SMP,对称多处理
- ELF,可执行文件链接格式
- Monolithic Kernel,宏内核
宏内核
宏内核的特征是系统内核的所有模块,比如进程调度、内存管理、文件系统、设备驱动等, 都运行在内核态。
微内核
微内核架构的内核只保留最基本的能力,比如进程调度、虚拟机内存、中断等,把一些应用 放到了用户空间,比如驱动程序、文件系统等。这样服务与服务之间是隔离的,单个服务出 现故障也不会导致整个操作系统挂掉,提高了操作系统的稳定性和可靠性。