Linux的内核是什么
Linux内核是Linux的核心,该核心涵盖Linux的所有功能,是一个大内核。
Linux内核采用单内核模式,是将所有基本功能集于同个进程,形成一个大进程。内核内部采用的是模块化设计,不同功能属于不同模块。模块间通信采用的是函数调用。运行内核的所有信息都在内核空间,而用户程序普遍都在用户空间。若用户程序想使用内核功能时,则需通过内核提供的接口,进行系统调用。
Linux为什么选择了单内核
单内核的优点在于实现简单。功能都在同个地址空间上,内部的协同合作都可以通过函数调用,不需要另外设计一套通信结构。除此之外Linux内核也借鉴了微内核很多优点:
- 模块化设计
- 动态装载内核模块
- 抢占式内核
Linux的单内核做了什么
CPU处理器通常为了安全期间,会对权限划分等级,如下图。对于Linux内核来说,只是用了Ring0和Ring3。其中内核处于Ring 0,用户进程处于Ring 3。Ring 0也被称为内核空间,Ring3则被称为用户空间。
- 处于Ring 0的进程,其控制权被内核独占。该等级下拥有最高权限,能访问硬件等资源
- 处于Ring 3的进程只有基本权限。想使用系统功能时,如硬件资源的内存分配,需调用内核提供的系统接口
用户态的进程进行系统调用时,进程会由用户态转为内核态,并且控制权移交到内核上。内核处理完后会再由内核态转为用户态,并将控制权还回去。此过程发生了特权模式切换:用户=>内核,再由内核=>用户。
频繁的特权模式切换会消耗一定的系统资源。因为寄存器和用户栈等数据无法在用户/内核空间不通用。所以在切换前需要先保存这些数据,等系统调用完后,切换回来时在将这些数据给加载回来。要注意的是此处的特权模式切换并非是上下文切换。
内核拥有的功能部分大致分为:
- 进程管理和调度
- 抢占式内核
- 对称多处理(SMP)支持
- 动态装载/移除模块
- 内存分配、交换分区实现
- 磁盘读取与写入
- 异常、中断和陷阱的处理
- 网络发送与接收
- 外部设备通讯
- ……