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

http://blog.chinaunix.net/uid-27052262-id-3259903.html

https://zhidao.baidu.com/question/1770526969811425660.html