《深入Linux内核架构》

内核的任务

技术层面:通俗的讲,内核是硬件和软件/程序之间沟通的桥梁,属于两者之间的中间层,有点像Android的HAL硬件抽象层。举个例子就是,复制一份数据,再硬件层是磁盘扇区之间的数据复制,需要从扇区A到内存,再从内存到扇区B,对于程序而言,只是一个复制数据的命令而已,不涉及对硬件的直接操作,间接的对硬件数据进行了修改。
系统层面:内核是资源管理器,管理系统中的所有资源,包括CPU时间、磁盘、网络、内存等。
程序开发层面:内核为程序开发提供了一系列的标准库,通过对库的调用,实现对系统软硬件的操作。

内核的实现策略-两种范式

微内核:把不同的功能分为不同的微内核(组件),优点是清楚的划分,缺点是个组件间通讯需要消耗额外的时间片。
宏内核:把微内核的各个组件打包到同一个内核文件中,不同组件之间可以直接相互访问,提高效率,缺点是组件间可能产生嵌套引用。Linux内核的模块话,侧面的也实现了微内核的组件划分效果。

内核的各个组成部分

111.png

进程切换与调度

Linux是多任务系统,但是同时只能运行不超过CPU数目的进程,内核会按照很短的时间在不同进程直接切换执行(用户感知不到),此部分概念与《操作系统》中一种,属于CPU时间片概念。
调度就是,不同进程有优先级之分,重要进程得到的CPU时间更多一点。

Unix 进程

Unix的进程是一种层次结构,每个进程都依赖于一个父进程,内核的启动程序init作为第一个进程,PID为0

创建进程的方式
  1. fork
    fork会创建当前进程的副本,新进程与当前进程pid不同,当前进程的内存内容会被复制给新进程,Linux采用COW(写时复制)技术使新进程在写入内存数据之前,先与当前进程共享内存页。
  2. exec
    exec讲新程序加载到当前进程的内存中执行,覆盖现在执行程序的内存页数据。
线程

又称为轻量级进程,与fork类似,但是只为新进程创建需要创建的资源,其余的与父进程共享,且减少了不同进程间的资源切换时间,此部分内容看《操作系统》一书更加易理解。

命名空间

命名空间就是一个进程所能看到的系统视图,是对全局资源的分组,使得属于不同命名空间的不同进程所看到的系统属性资源不同。虚拟化、容器都使用了此技术。

虚地址空间

虚拟地址空间的特权级别

内核把虚拟地址空间分为两个部分:核心态和用户态,使之彼此隔离,保护各个系统进程。可以对某些系统调用进行限制。

虚拟和物理地址空间

讲进程的虚地址空间映射到物理空间中,一个小方格代表一个页帧。
2222.png

Last modification:June 11, 2022
If you think my article is useful to you, please feel free to appreciate