1.概念辨析
用户态(User Mode)
-
权限较低:运行普通应用程序的环境,无法直接访问硬件和内核数据。
-
隔离性:不同进程之间互相隔离,保护彼此的数据和状态。
-
系统调用:当需要访问系统资源(如文件、网络、内存管理)时,必须通过系统调用进入内核态。
内核态(Kernel Mode)
-
权限较高:内核和系统服务在此模式下运行,可以直接操作硬件、管理内存和调度进程。
-
系统资源管理:负责管理所有硬件资源、内存以及进程间通信,确保系统稳定运行。
-
受保护的环境:内核态代码受严格保护,防止用户程序直接访问或篡改,保证系统安全性。
-
模式切换:从用户态进入内核态通常由系统调用、异常或中断触发,切换过程中需要保存和恢复执行上下文。
2.用户态内核态切换
在Linux,Windows,macOS这些操作系统中当用户态与内核态进行切换时,往往要进行进程上下文的切换,(如将寄存器,程序计数器(PC)的值存入内核栈中)然后切换到内核栈。
那么问题来了,为什么要将进程上下文保存到内核栈中?而不是直接存储到用户栈?
因为内核栈需要进入内核态才能够进行修改,安全性比较高。而用户栈很容易被篡改,如果切换到被篡改的进程上下文内容,那将会很恐怖。
3.优劣
直接看总结表吧
| 属性 | 用户态(User Mode) | 内核态(Kernel Mode) |
|---|---|---|
| 权限 | 低 | 高 |
| 安全性 | 高,受限访问 | 低,影响整个系统 |
| 访问硬件 | 不能直接访问,需系统调用 | 可以直接访问 |
| 效率 | 低,系统调用开销大 | 高,无需额外切换 |
| 稳定性 | 进程崩溃不会影响系统 | 错误可能导致系统崩溃 |
| 错误影响范围 | 只影响当前进程 | 可能影响整个系统 |
1344

被折叠的 条评论
为什么被折叠?



