Linux内核组成及功能
该博文只是粗略地整理Linux内核的一些基本知识结构:
可以直接跳到思维导图看知识结构
有附上相关博文,可以供大家参考
如果有错误,欢迎指出~
Linux内核组成及功能
Linux内核结构
- 内核提供的基本功能
- 这些功能对应的哪些代码模块
内核功能增删-可加载模块(LKM)工作机制
内核与用户空间通信方式
Linux内核结构
Linux内核提供的基本功能
1、进程调度(SCHED)
- 进程调度负责控制进程对CPU的访问,当需要选择下一个进程运行时,由进程调度子系统根据某种算法选择最值得运行的进程。
- 如果某个进程还在等待其他资源,则该进程将不会被选择。
- Linux的调度算法是基于优先级的。
2、内存管理 (Memory Management)
用来管理多个进程对内存的使用
Linux支持虚拟内存,即在计算机中运行的程序,其程序代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只把当前使用的程序块保留在内存中,其余还没有运行的程序块,则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块 —— LKM支持。
内存管理从逻辑上可以分为
- 硬件无关部分:提供了进程的映射和逻辑内存的兑换
- 硬件有关部分:为内存管理硬件部分提供了虚拟接口。
3、虚拟文件系统 (Virtual File System)
- 隐藏了各种硬件的具体细节,为所有设备提供了统一的接口
- 虚拟文件系统提供了数十种不同的文件系统:
- 逻辑文件系统: Linux所支持的文件系统,如ext3, FAT等
- 设备驱动程序:为每一种硬件控制器所编写的设备驱动模块
4、网络接口 (Network Interface)
网络接口提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为:
- 网络协议:实现每一种可能的网络传输协议
- 网络驱动程序:与硬件设备的通信。 每一种可能的硬件设备都有相应的设备驱动程序。
5、进程通信 (Interprocess Communication)
进程通信提供了进程之间的各种通信机制。分为三种主要的通信方式,适用于进程间;及一种内核态与用户态间的通信方式。
五种功能如下图:
参考文档:
http://blog.csdn.net/u010889616/article/details/47868887
https://wenku.baidu.com/view/2b33e765aaea998fcd220e33.html
代码模块
源代码的主要模块可分为:
因此,对应内核功能,除了头文件、通用内核库、平台兼容性(所有功能模块都会调用)外,内核功能与代码模块的对应为:
参考文档:
https://wenku.baidu.com/view/a3a009fb941ea76e58fa0459.html
https://wenku.baidu.com/view/10043eaef524ccbff1218421.html
http://blog.csdn.net/dyllove98/article/details/8915754
http://blog.chinaunix.net/uid-22330495-id-164941.html
LKM工作机制
LKM是Linux内核为了扩展其功能所使用的可加载内核模块。它无须重新实现整个内核,而只需要动态加载,类似于局部渲染。因此,常被用作特殊设备的驱动程序。
具体机制如下图:
参考文档 :
https://www.ibm.com/developerworks/cn/linux/l-lkm/
https://wenku.baidu.com/view/10043eaef524ccbff1218421.html
http://blog.csdn.net/zhaqiwen/article/details/8288472
http://www.cnblogs.com/fanzhidongyzby/p/3730131.html
内核与用户空间通信方式
通信方式依据来自的内核态不同,分为硬软中断与用户态,和进程上下文与用户态两种。分类的原因是硬软中断无法与用户态本来无关,而进程上下文则与用户的进程息息相关。
- 硬软中断处于操作系统食物链的最顶端,本来没有进程能够中断它,它只能自行中断,这种机制就是自旋锁。一般的方法是,内核态通过向进程上下文发送消息,再由进程上下文向上级提出请求,因为它们共同维护一个临界区。而自Linux 2.4以来,netlink套接字提供了另一个通道,即用户态可以直接向软中断提出申请。这样,不经过进程上下文,减少了一个过程,就提高了实时性。
- 进程上下文本来就与用户态密切相关,它出于内核态的最底层,最接近民众,所以它通信的方式也比较亲民。可以用一般的进程的通信方式进行通信。
具体方式如下图:
参考文档:
https://www.ibm.com/developerworks/cn/linux/l-netlink/
http://blog.csdn.net/wuruixn/article/details/24960935
http://blog.csdn.net/jxth152913/article/details/17921581