linux内核的子系统有5个:1、 进程调度控制系统(SCHED);2、内存管理系统(MM),主要作用是控制多个进程安全地共享主内存区域;3、虚拟文件系统(VFS);4、网络接口(NET);5、进程间通信(IPC)。

本教程操作环境:Ubuntu 16.04系统、Dell G3电脑。

内核:

在计算机科学中是一个用来管理软件发出的数据I/O(输入与输出)要求的计算机程序,将这些要求转译为数据处理的指令并交由中央处理器(CPU)及计算机中其他电子组件进行处理,是现代操作系统中最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并由内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的。所以内核通常提供一种硬件抽象的方法,来完成这些操作。通过进程间通信机制及系统调用,应用进程可间接控制所需的硬件资源(特别是处理器及IO设备)。

linux内核的子系统有哪些

Linux内核主要由进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC)5个子系统组成,如下图所示。

1、进程调度

进程调度控制系统中的多个进程对CPU的访问,使得多个进程能在CPU中“微观串行,宏观并行”地执行。进程调度处于系统的中心位置,内核中其他的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。

如下图所示,Linux的进程在几个状态间进行切换。

Linux进程状态转换

在设备驱动编程中,当请求的资源不能得到满足时,驱动一般会调度其他进程执行,并使本进程进入睡眠状态,直到它请求的资源被释放,才会被唤醒而进入就绪状态。睡眠分成可中断的睡眠和不可中断的睡眠,两者的区别在于可中断的睡眠在收到信号的时候会醒。

完全处于TASK_UNINTERRUPTIBLE状态的进程甚至都无法被“杀死”,所以Linux 2.6.26之后的内核也存在一种TASK_KILLABLE的状态,它等于“TASK_WAKEKILL|TASK_UNINTERRUPTIBLE”,可以响应致命信号。

在Linux内核中,使用task_struct结构体(include/linux/sched.h)来描述进程,该结构体中包含描述该进程内存资源、文件系统资源、文件资源、tty资源、信号处理等的指针。Linux的线程采用轻量级进程模型来实现,在用户空间通过pthread_create()API创建线程的时候,本质上内核只是创建了一个新的task_struct,并将新task_struct的所有资源指针都指向创建它的那个task_struct的资源指针。

绝大多数进程(以及进程中的多个线程)是由用户空间的应用创建的,当它们存在底层资源和硬件访问的需求时,会通过系统调用进入内核空间。有时候,在内核编程中,如果需要几个并发执行的任务,可以启动内核线程,这些线程没有用户空间。启动内核线程的函数为:pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);

2、内存管理

内存管理的主要作用是控制多个进程安全地共享主内存区域。当CPU提供内存管理单元(MMU)时,Linux内存管理对于每个进程完成从虚拟内存到物理内存的转换。Linux 2.6引入了对无MMU CPU的支持。

如图所示,一般而言,32位处理器的Linux的每个进程享有4GB的内存空间,03GB属于用户空间,34GB属于内核空间,内核空间对常规内存、I/O设备内存以及高端内存有不同的处理方式。内核空间和用户空间的具体界限是可以调整的,在内核配置选项Kernel Features→Memory split下,可以设置界限为2GB或者3GB。

Linux进程地址空间

如上图所示,Linux内核的内存管理总体比较庞大,包含底层的Buddy(伙伴)算法,它用于管理每个页的占用情况,内核空间的slab分配器以及用户空间的C库的二次管理。另外,内核也提供了页缓存的支持,用内存来缓存磁盘,per backing device info flusher线程用于刷回脏的页缓存到磁盘。Kswapd(交换进程)则是Linux中用于页面回收(包括file-backed的页和匿名页)的内核线程,它采用最近最少使用(LRU)算法进行内存回收。

3、虚拟文件系统

如图所示,

Linux虚拟文件系统

Linux虚拟文件系统隐藏了各种硬件的具体细节,为所有设备提供了统一的接口。而且,它独立于各个具体的文件系统,是对各种文件系统的一个抽象。它为上层的应用程序提供了统一的vfs_read()、vfs_write()等接口,并调用具体底层文件系统或者设备驱动中实现的file_operations结构体的成员函数。

内核资料直通车:Linux内核源码技术学习路线+视频教程代码资料

学习直通车:Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈

4、网络接口

网络接口提供了对各种网络标准的存取和各种网络硬件的支持。如图3.8所示,在Linux中网络接口可分为网络协议和网络驱动程序,网络协议部分负责实现每一种可能的网络传输协议,网络设备驱动程序负责与硬件设备通信,每一种可能的硬件设备都有相应的设备驱动程序。

Linux网络体系结构

Linux内核支持的协议栈种类较多,如Internet、UNIX、CAN、NFC、Bluetooth、WiMAX、IrDA等,上层的应用程序统一使用套接字接口。

5、进程间通信

进程间通信支持进程之间的通信,Linux支持进程间的多种通信机制,包含信号量、共享内存、消息队列、管道、UNIX域套接字等,这些机制可协助多个进程、多资源的互斥访问、进程间的同步和消息传递。在实际的Linux应用中,人们更多地趋向于使用UNIX域套接字,而不是System V IPC中的消息队列等机制。Android内核则新增了Binder进程间通信方式。

Linux内核5个组成部分之间的依赖关系如下:

进程调度与内存管理之间的关系:这两个子系统互相依赖。在多程序环境下,程序要运行,则必须为之创建进程,而创建进程的第一件事情,就是将程序和数据装入内存。

进程间通信与内存管理的关系:进程间通信子系统要依赖内存管理支持共享内存通信机制,这种机制允许两个进程除了拥有自己的私有空间之外,还可以存取共同的内存区域。

虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络文件系统(NFS),也利用内存管理支持RAMDISK设备。

内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,交换进程定期由调度程序调度,这也是内存管理依赖于进程调度的原因。当一个进程存取的内存映射被换出时,内存管理向虚拟文件系统发出请求,同时,挂起当前正在运行的进程。

除了这些依赖关系外,内核中的所有子系统还要依赖于一些共同的资源。这些资源包括所有子系统都用到的API,如分配和释放内存空间的函数、输出警告或错误消息的函数及系统提供的调试接口等。

以上就是linux内核的子系统有哪些的详细内容,更多内容点点关注,每天更新!

原文作者:极致Linux内核

原文地址:https://zhuanlan.zhihu.com/p/616802538(版权归原文作者所有,侵权留言联系删除)

Linux内核--五大子系统相关推荐

  1. Linux操作系统的五大子系统

    Linux操作系统的五大子系统 Linux操作系统的五大子系统 PCB 什么是HUP信号 Linux操作系统的五大子系统 进程调度(CPU)-先进先出 .短作业优先.优先级 内存管理(内存)-虚拟内存 ...

  2. Linux如何禁用rc4加密算法,使用arc4算法的linux内核加密子系统

    我试图用"arc4"算法来加密来自模块的任意数据流 流.但我很担心我应该如何 接近后援实现一点点无知是使用arc4算法的linux内核加密子系统 $find . -type f - ...

  3. Linux内核crypto子系统的调用逻辑

    testmgr.c - crypto/testmgr.c - Linux source code (v5.15.11) - Bootlin 上述代码是内核内部即crypto子系统对外提供密码服务的测试 ...

  4. Linux内核邻接子系统(arp协议)的工作原理

    主要参考了<深入linux内核架构>和<精通Linux内核网络>相关章节 文章目录 Linux内核邻接子系统(二层到三层) 邻接子系统的核心 struct neighbour ...

  5. linux内核网络子系统初探---概述

    linux内核网络子系统初探-概述 一.网络模型 简单介绍 学习网络时,必定能在各种教材资料里见到以下三种网络模型: 三种模型间的差异: OSI七层模型是理论上的网络模型,从功能方面分成了相对独立的7 ...

  6. linux内核分为子系统,Linux内核内存管理子系统分析【转】

    还是那张熟悉的老图:Linux内核子系统简介(由七个部分组成) Linux内存管理模型: 1. 内存管子系统职能: 1>  管理虚拟地址与物理地址的映射 2>  管理物理内存的分配 2. ...

  7. CVE-2021-20226:详解 Linux 内核 IO_URING 子系统中的引用计数漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 趋势科技 ZDI 发布文章,详细描述了2020年6月收到的最近引入的 io_uring 子系统的引用计数漏洞情况.该漏洞导致在任意 fil ...

  8. linux启用dcb步骤,Linux内核DCB子系统

    q1. 网络设备是怎么利用linux内核的DCB子系统,来达到融合网络流量的各种各样的QoS需求的? q2.融合网卡或者存储流量是否也可以使用到DCB子系统,他们是怎样工作的? 本文将对上面这两个问题 ...

  9. linux内核DCB子系统

    q1. 网络设备是怎么利用linux内核的DCB子系统,来达到融合网络流量的各种各样的QoS需求的? q2.融合网卡或者存储流量是否也可以使用到DCB子系统,他们是怎样工作的? 本文将对上面这两个问题 ...

最新文章

  1. HDU_1253 胜利大逃亡(BFS)
  2. 悟空分词的搜索和排序源码分析之——搜索
  3. ubuntu18.04下安装Anaconda及numpy、matplotlib
  4. “爱思助手”曝为iOS木马:可绕过苹果DRM机制
  5. 【华为云技术分享】STM32L476移植华为LiteOS系列教程---开发前的准备 2
  6. 修改华为服务器管理口地址,修改华为服务器管理口地址
  7. 一次数据库优化的对话
  8. 在固态硬盘上安装linux系统怎么安装,教程|教你一键重装怎么将系统安装在固态硬盘上...
  9. JDK1.8下载、安装和环境配置教程
  10. 磨皮ps教程-庞姿姿
  11. 基于python的异方差检验_异方差检验及解决方法
  12. MOS管常用电路分析
  13. 【Python • 图片识别】pytesseract快速识别提取图片中的文字
  14. TZC 3012-Fibnacci Numbers(矩阵快速幂+降幂公式)
  15. 失传千年AE特效真经(二)
  16. maven出现错误 大难题-------
  17. android集成语音功能
  18. 【Java】JDK目录介绍
  19. EDA设计(verilog)—— 七段管时钟
  20. 360手机助手 无法android 4.2手机软件移动sd卡,360手机助手怎么设置安装到sd卡 360手机助手设置安装位置...

热门文章

  1. mysql和postgresql中的诸多不同 logistic回归P 2016.04.13回顾
  2. C#使用说明官方手册
  3. 用Edge将GitHub上的markdown文件在线完美转pdf
  4. 【技术美术图形部分】PBR全局光照:理论知识补充
  5. 微服务网关Zuul路由ZuulFilter过滤
  6. SQL 分组条件深入剖析
  7. AI绘画与虚拟人生成实践(一):生成人像,AI绘画模型和工具的效果对比
  8. Arduino学习之震动开关
  9. JavaWeb传统商城(MVC三层架构)的促销功能模块【进阶版】
  10. sha256算法_Go语言实现Pow共识算法