操作系统--用户态和内核态
--为什么操作系统要引入用户态和内核态这个概念?
用户态(User Mode)和内核态(Kernel Mode)是操作系统为保护系统资源和硬件安全而设计的两种运行模式。区分这两种模式的主要目的是限制用户程序对敏感系统资源的直接访问,确保系统稳定性(说人话就是 两种运行模式下操作系统分配的权限和掌握资源不同 依据不同使用场景选择特定运行模式给与相应权限资源 )
--内核态(核心态)
内核态是 CPU 的高权限运行模式,操作系统的内核程序(如进程管理、内存管理、设备驱动、中断处理等核心功能)在此模式下运行。
核心特点:
权限无限制
可以直接访问计算机的所有硬件资源(如 CPU、内存、硬盘、网卡等),执行所有 CPU 指令(包括特权指令,如修改内存地址空间、关闭中断、操作 I/O 设备等)。直接操作内核数据
可以访问操作系统内核的所有数据结构和内存区域(如进程控制块 PCB、页表、内核栈等)。负责核心功能
操作系统的核心任务(如进程调度、内存分配、文件系统管理、处理硬件中断等)必须在 kernel 态完成,因为这些任务需要最高权限。
--用户态
用户态是 CPU 的低权限运行模式,应用程序(如浏览器、文档编辑器、游戏等)在此模式下运行。
核心特点:
权限受限
不能直接访问硬件资源,也不能执行特权指令。例如,应用程序不能直接读写硬盘,必须通过操作系统内核提供的接口(系统调用)间接完成。只能访问用户空间
应用程序只能访问自己的内存空间(用户空间),无法直接访问内核的内存空间(内核空间),避免了应用程序误操作或恶意破坏内核数据。依赖系统调用与内核交互
当应用程序需要执行高权限操作(如读写文件、网络通信)时,必须通过 “系统调用” 切换到内核态,由内核完成操作后再返回用户态。
--内核态与用户态转换
应用程序运行在用户态期间,可能需要执行高权限操作(例如读写文件、网络通信等),此时就需要切换到内核态然后执行完高阶权限操作后再次回到用户态:
1.用户态 → 内核态
- 触发方式:系统调用(如
read()
、write()
)、硬件中断(如键盘按键、网络数据包到达)、异常(如内存访问越界、除零错误)。 - 切换过程:CPU 保存当前用户态的执行上下文(如寄存器数据、程序计数器),加载内核态的上下文,进入内核程序执行。
2.内核态 → 用户态
- 当内核完成请求(如系统调用执行完毕)或处理完中断 / 异常后,会恢复用户态的上下文,CPU 切换回用户态,继续执行应用程序。
这样切换有什么好处?或者说内核态用户态有什么好处?
安全性上
隔离了应用程序和系统内核,防止程序篡改内核数据
整体运行上(包括操作系统和应用程序)
应用程序和内核的隔离,使得一个应用程序崩溃后,不会影响操作系统,使得操作系统可以干预崩溃和保证整体的正常运行