日期:2023-02-02
版本号:V1.0
一、GNU/Linux体系结构
该体系的上部分是用户空间(或应用程序,同时包含应用程序常用的标准C库,例如stdlib.h),这是用户应用程序执行的环境(位置)。
Linux分为三部分,首先为应用程序提供的服务接口(不同版本的Linux通常会提供相同的系统调用,可以保障应用程序的源码不因内核版本的切换而进行修改);其次是狭义上的内核部分(与硬件体系无关,基于内核为应用和内核自身提供相关服务的部分),最后是板级驱动BSP(与硬件体系有关,基于硬件为应用或内核自身提供相关服务的部分)。
就目前行业内嵌入式系统使用来说,大部分技术公司都是基于芯片厂家提供的解决方案进行开发(芯片厂家将CPU\SOC\IC以及相关电路整合到一块电路上,并基于这块电路移植操作系统、相关BSP驱动程序,形成一套嵌入式开发平台)。下游的应用系统会在某一芯片厂家的某一开发平台基础上,基于成本和功能的考量,进行通常较少的软硬件修改,然后在此基础上开发相应的应用程序。
作者主要本文主要讨论与硬件和应用均无直接关系的狭义内核部分。
二、内核基本结构
2.1 进程调度SCHED
调度器究其根本,主要是控制众多进程对CPU资源的访问,当需要选择一个进程运行时,由调度程序选择最值得运行的进程并让其使用CPU运行。调度器主要包含三部分:(1)调度策略;(2)调度触发方式;(3)进程切换过程。
进程创建后至执行完毕退出间,通常会在若干个状态之间切换,切换的主要原因相关资源满足/不满足的状态变化,例如处于运行态的用户进程在请求不到相关资源时,通常会进入休眠态,而由于时间片资源使用完毕时会切换到就绪态。