外观
一句话答案
用户态运行应用程序(受限),内核态运行 OS(特权),系统调用/异常/中断触发切换,切换有保存恢复寄存器开销。
核心要点
切换场景: 系统调用(read/write) / 异常(缺页) / 中断(IO完成)
开销: 保存/恢复寄存器 + 切换栈 + TLB/Cache 影响
减少切换: mmap / sendfile / 批量系统调用 / io_uring
追问与易错
追问方向:
- 系统调用开销在哪?
- 中断和系统调用区别?
- 怎么减少态切换?
易错点:
- ❌ 所有操作都需要切换——用户态计算不需要
- ❌ 内核态比用户态快——不是更快是有更高权限
💡 记忆锚点
用户态像普通员工只能在工位干活(受限),内核态像管理员能进机房操作一切(特权)。要用管理员权限就得刷卡(系统调用trap),刷卡要时间(保存/恢复寄存器+切栈)。减少刷卡次数的办法:mmap直接映射不走read、sendfile让内核自己搬不来回切、io_uring批量提交系统调用。