大家都知道源理君很多期的文章都是关于linux内核的功能,本着公众号的原则,只讲原理,将复杂的代码转换为通俗易懂的文字,图片 。最后呈现给大家 。可以源理君一直没有从大框架上系统的给各位梳理Linux内核体系结构 。那本文就一个目的,站在山顶向下看 。
Linux系统的层次框架
文章插图
【Linux内核框架,体系结构,讲的很清楚】从图中我们可以分为两个层次:
- 用户空间
- 内核空间
下层就是内核空间了 。Linux内核空间又分为了三层:
- 系统调用层;它是属于最上层,它提供了用户空间和内核空间通信的方式 。
- Linux内核:应该更加确切的说是独立于体系结构的内核代码,这些通用的代码适用于任何体系结构 。
- 依赖体系结构的代码:这部分我们通常称之为BSP,这些代码主要是为了兼容不同平台或者处理器而引入的 。
随着时间的流逝,Linux 内核在内存和 CPU 使用方面具有较高的效率,并且非常稳定 。但是对于 Linux 来说,最为有趣的是在这种大小和复杂性的前提下,依然具有良好的可移植性 。Linux 编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行 。一个例子是 Linux 可以在一个具有内存管理单元(MMU)的处理器上运行,也可以在那些不提供 MMU 的处理器上运行 。Linux 内核的 uClinux 移植提供了对非 MMU 的支持 。
Linux内核体系结构
文章插图
Linux内核的主要组件有:
- 系统调用接口
- 进程管理
- 内存管理
- 虚拟文件系统
- 网络堆栈
- 设备驱动程序、硬件架构的相关代码 。
系统调用层提供了某些机制执行从用户空间到内核的函数调用 。它是依赖真个体系结构的 。在这一层提供多路复用和多路分解服务 。
(2)进程管理
进程管理的核心就是进程的调度 。在Linux内核中,进程调度的单元是进程,线程对与调度来说相当于进程概念 。内核通过系统调用提供了应用程序编程接口 。例如:创建新进程(fork,exec),结束进程(kill, exit),并且提供了控制进程,同步进程和进程间通信的接口 。
进程管理还包括处理活跃进程之间共享CPU的需求 。内核使用的是CFS完全公平调度器,在我之前文章《Linux完全公平调度器CFS》有详细阐述 。
(3)内存管理
内核所管理的另外一个重要资源是内存 。源理君的另一篇文章《搞懂Linux内存管理,仅此一篇》有详细讲解Linux内存管理 。为了提高效率,引入了虚拟内存的概念,内存是按照所谓的内存页 方式进行管理的(一般一个内存页大小 4KB和8KB,绝大部分为4KB) 。Linux 不仅管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制 。不过内存管理要管理的可不止 4KB 缓冲区 。Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器 。这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空 。这样就允许该模式根据系统需要来动态调整内存使用 。为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况 。由于这个原因,页面可以移出内存并放入磁盘中 。这个过程称为交换,因为页面会被从内存交换到硬盘上 。内存管理的源代码可以在 ./linux/mm 中找到 。
(4)虚拟文件系统
虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象 。VFS 在 系统调用 和内核所支持的文件系统之间提供了一个屏蔽层 。如下图所示:
推荐阅读
- linux解决中文乱码问题
- Linux Netcat 命令—超级网络工具详解
- linux系统参数调优全解析
- 做完这些设置,你的Linux系统对很多安全问题和网络攻击就免疫了
- 恢复 Linux 分区下误删的文件
- Linux基础必备知识:nfs服务
- 详解Linux命令---如何用htpasswd创建密码文件?
- 探索 Linux 上的 /run
- 美团二面:什么叫进入内核态?
- Linux如何查看服务器开放的端口号