嵌入式Linux核心课程课件第8课 用户态与内核态的区别及切换 模块二:内核核心机制文章目录嵌入式Linux核心课程课件第8课 用户态与内核态的区别及切换 模块二:内核核心机制一、课程目标二、用户态与内核态的核心定位2.1 核心定义2.2 核心区别2.3 隔离意义三、用户态与内核态的切换机制3.1 切换触发条件场景1:系统调用场景2:中断场景3:异常3.2 切换完整流程3.3 样例代码1:系统调用触发切换3.4 样例代码2:内核态打印当前运行状态3.5 样例代码3:中断触发态切换四、切换效率优化(嵌入式重点)五、课堂练习六、课后作业七、本章总结八、核心关键词第8课 课程回顾总结上一课作业答案 嵌入式Linux内核架构解析 模块二:内核核心机制代码功能说明注意事项一、课程目标理解用户态与内核态的核心定义、本质区别及隔离意义掌握用户态与内核态的切换触发条件、完整流程熟悉CPU特权级划分与地址空间隔离的底层原理掌握系统调用、中断、异常三种切换场景的实战原理能结合内核机制,分析切换过程中的资源保护与效率优化为后续驱动开发、内核调试打下基础二、用户态与内核态的核心定位在嵌入式Linux系统中,CPU运行分为两种特权级别,对应两种运行状态,核心目的是实现资源隔离与安全保护,防止用户程序误操作内核资源,导致系统崩溃。2.1 核心定义内核态(Kernel Mode):CPU的最高特权级(ARM架构为EL1,x86架构为Ring 0),内核程序运行的状态,可直接访问所有硬件资源(CPU、内存、外设),执行所有指令(包括特权指令)。用户态(User Mode):CPU的低特权级(ARM架构为EL0,x86架构为Ring 3),用户应用程序运行的状态,只能访问自身地址空间的资源,无法直接访问硬件和内核资源,执行非特权指令。2.2 核心区别对比维度内核态用户态CPU特权级最高特权级(EL1/Ring 0)低特权级(EL0/Ring 3)资源访问权限可访问所有硬件、内核资源仅访问自身用户空间资源可执行指令所有指令(含特权指令,如关中断)仅非特权指令,特权指令会触发异常运行程序Linux内核程序、驱动程序用户应用程序(如APP、Shell命令)地址空间内核空间(ARM 32位:3G~4G)用户空间(ARM 32位:0~3G)2.3 隔离意义安全保护:用户程序出错(如非法访问内存)不会影响内核和其他程序,避免系统崩溃;资源管控:内核统一分配硬件资源,防止用户程序滥用资源(如占用全部CPU、内存);简化开发:用户程序无需关注硬件细节,通过内核提供的接口即可使用资源。三、用户态与内核态的切换机制用户态与内核态的切换是嵌入式Linux的核心操作,切换过程由CPU和内核协同完成,核心是上下文保存与恢复,确保切换后程序能正常继续运行。3.1 切换触发条件用户态无法直接切换到内核态,必须通过以下三种合法场景触发,其中系统调用是最常用的场景。场景1:系统调用用户程序需要使用内核资源(如文件操作、网络通信、内存分配)时,主动调用系统调用接口(如open、read、kmalloc),触发从用户态到内核态的切换。示例:用户程序调用printf(),底层会调用write()系统调用,进入内核态执行文件写入操作,完成后返回用户态。场景2:中断硬件设备(如GPIO、串口、定时器)触发中断时,CPU会暂停当前运行的用户程序,自动切换到内核态,执行中断服务程序,中断处理完成后返回用户态。示例:按键按下触发GPIO中断,CPU暂停用户APP,进入内核态执行中断处理函数,处理完成后恢复APP运行。场景3:异常用户程序执行非法操作(如除以0、访问非法内存、执行特权指令)时,CPU会触发异常,自动切换到内核态,由内核处理异常(如终止程序、报错)。示例:用户程序访问0x00000000