一、用户态与内核态
Linux系统运行时分为两个核心状态:用户态与内核态。用户态指 CPU 处于低特权级别,应用程序只能访问用户虚拟地址空间,不能直接访问硬件和执行特权指令。当应用程序通过系统调用请求内核服务时,CPU 会从用户态切换到内核态,进入高特权级别,执行内核代码并访问内核地址空间与硬件资源。

图 用户态与内核态切换示意图
Linux的应用程序在用户态下运行,它仅能访问自身的用户虚拟地址空间,无法直接访问计算机硬件资源(如内存、磁盘、外设等)。不能执行特权指令(如修改CPU状态、访问内核地址空间等)。
Linux内核在内核态下运行,可直接访问内核地址空间,自由操作所有硬件资源(如内存分配、磁盘读写、外设控制等),能够执行所有CPU指令,包括修改系统状态、管理进程调度、处理中断等核心操作。
二、CPU特权
CPU 在执行程序时,会处于不同的权限等级中。当前的权限等级决定了这段代码能不能访问硬件、修改系统内存、执行敏感危险指令。
基于x86架构的CPU设计了 4 个特权级,数值越小权限越高:
Ring 0:最高特权,可执行所有指令、直接访问硬件/内存、操作控制寄存器与 MMU;
Ring 1、Ring 2:中间特权,Linux完全不使用;
Ring 3:最低特权,仅能执行普通指令,禁止特权指令与直接硬件访问。
ARMv8-A / ARMv9-A 架构(64 位应用处理器)定义了 4 个异常级别 EL(Exception Level),级别数字越大权限越高:
EL0(用户级):应用运行,非特权,仅执行非特权指令;
EL1(内核级):OS 内核运行,管理内存、进程、外设,Linux内核在此;
EL2(虚拟化级):Hypervisor 运行,管理虚拟机,提供硬件虚拟化支持;
EL3(安全级):固件运行,处理安全异常。
Linux系统充分利用CPU特权,实现内核与应用的隔离:
用户应用程序运行在最低特权级,受限执行,保证系统安全;
Linux 内核运行在最高特权级,负责管理硬件、内存、中断等核心资源;
应用程序通过系统调用、异常、中断进入内核,完成后返回用户态;
Linux 不使用 CPU 提供的中间特权级,X86只用 Ring0(内核)、Ring3(用户),ARM只用 EL1(内核)、EL0(用户)。
三、Linux系统启动流程
Linux启动过程包括引导、内核初始化、用户空间启动、正常运行四个核心阶段。
1、引导
计算机开机后,BIOS/UEFI会进行硬件自检,确认CPU、内存、磁盘等硬件正常后,会寻找引导设备(如硬盘、U盘),然后加载引导设备的引导程序,引导程序会加载Linux内核镜像和初始化内存, 引导程序将内核镜像加载到内存中,并将系统控制权交给内核,引导阶段结束,进入内核初始化阶段。
2.内核初始化
内核接管控制权后,首先检测并识别所有连接的硬件设备(如CPU、内存、磁盘、网卡等),加载对应的设备驱动程序,然后创建进程控制块(PCB)、内存管理表等核心数据结构,用于后续进程管理和内存分配。核心数据结构创建完成后,内核会创建系统第一个进程(init进程,PID=1),该进程是所有后续进程的父进程,负责启动用户空间的服务和程序。内核会挂载系统的根文件系统,让系统能够访问磁盘上的文件和程序,此时内核初始化完成,开始向用户空间过渡。
3.用户空间启动
在内核初始化阶段启动的init进程会根据运行级别,启动对应的系统服务(如网络服务、SSH服务、防火墙服务等),这些服务运行在用户态,由内核提供资源支持。设置系统环境变量、创建用户会话、启动登录管理器(如GNOME、KDE或命令行登录界面),等待用户登录。用户输入用户名和密码后,系统验证通过,会为用户创建一个shell进程(如bash),该进程运行在用户态,用户通过shell可以执行各类应用程序。
4.正常运行
用户登录后,系统进入正常运行状态,此时用户态与内核态协同工作。
用户通过shell或图形界面启动应用程序(如浏览器、终端),这些应用程序运行在用户态,受权限限制,无法直接访问硬件。
当应用程序需要访问硬件资源(如读取文件、连接网络)时,会通过系统调用触发状态切换,CPU从用户态切换到内核态,内核执行对应的特权操作。内核完成操作后,切换回用户态,将结果返回给应用程序,应用程序继续运行;若应用程序异常,仅影响自身进程,不会导致系统崩溃(内核态受到保护)。
系统运行过程中,内核会持续进行进程调度、内存管理、中断处理等核心操作,维持系统稳定运行。init进程则持续监控系统服务,确保服务正常运行。
四、用户态与内核态切换机制
用户态与内核态无法直接切换,必须通过系统调用实现,整个切换过程分为三个步骤:
步骤1:
触发请求:应用程序在用户态下运行时,若需要访问硬件资源或执行特权操作(如读取文件、分配内存),会主动发起系统调用请求。
步骤2:
状态切换:CPU接收到系统调用请求后,会切换特权级别,从低特权的用户态切换到高特权的内核态,同时保存用户态的程序上下文(如程序计数器、寄存器值等)。
步骤3:
执行与返回:内核在内核态下执行对应的核心操作(如完成文件读取、内存分配),操作完成后,恢复用户态程序上下文,CPU切换回用户态,将操作结果返回给应用程序,应用程序继续在用户态运行。
五、Linux关机流程
用户在Linux终端输入shutdown等关机命令,或者在图形界面点击“关机”按钮发起关机请求,请求会被传递给系统初始化进程(init或systemd),触发关机流程。此时系统会检查发起请求的用户权限,仅root用户或拥有sudo权限的用户可执行关机操作。
初始化进程收到关机请求后,会向所有用户态进程发送终止信号,通知进程准备关闭,应用进程收到关机通知后,会主动释放资源(如关闭打开的文件、断开网络连接);若部分应用进程未在规定时间内终止,系统会发送强制终止信号,强制结束进程。同时,系统会逐步停止所有用户空间服务(如网络服务、SSH服务、数据库服务),确保服务正常退出,避免数据丢失。
用户进程和服务全部终止后,内核会卸载所有挂载的文件系统(除根文件系统外),确保磁盘数据同步写入(避免缓存数据未写入磁盘导致丢失),并关闭所有硬件设备,停止设备驱动程序的运行,释放内核占用的内存、CPU等核心资源,清理内核数据结构(如进程控制块、内存管理表)。
全部处理完成后,内核会向硬件发送断电信号,硬件接收到断电信号后,切断电源,系统完成关机。
六、本节总结
Linux系统运行时分为两个核心状态:用户态与内核态,应用程序在用户态运行,内核程序在内核态运行,在用户态运行的应用程序不能直接访问硬件和执行特权指令,若应用程序需要访问硬件资源,要通过系统调用请求内核服务,此时CPU 会从用户态切换到内核态,进入高特权级别,执行内核代码并访问内核地址空间与硬件资源,内核执行完成返回数据给应用程序,CPU 从内核态切换到用户态。
Linux启动过程包括引导、内核初始化、用户空间启动、正常运行四个核心阶段。计算机开机后,BIOS/UEFI会进行硬件自检,确认CPU、内存、磁盘等硬件正常后,会加载引导设备的引导程序到内存,引导程序会加载Linux内核镜像和初始化内存, 引导程序将内核镜像加载到内存中,并将系统控制权交给内核,内核接管控制权后会识别硬件设备并加载设备驱动,初始化核心数据结构,并创建第一个进程,用于启动用户空间的服务和程序。
Linux 关机时,无论是终端执行关机命令还是图形界面操作,请求都会交给 systemd 或 init 等初始化进程处理,只有 root 或拥有 sudo 权限的用户可发起关机请求。系统先向所有用户进程发送终止信号,超时未退出则强制结束,同时有序停止各类用户服务以保障数据安全。随后内核同步磁盘数据、卸载文件系统,关闭硬件并释放内核资源,最终向硬件发送断电指令,完成整个关机流程。