用户模式和内核模式
什么是用户模式?
当执行应用程序代码的时候是用户模式,且每个程序有自己的独立空间,其他程序一般无法访问。
什么是内核模式?
当调用系统api函数时(系统调用),会暂停执行应用程序代码,转而执行内核代码(内核也是程序),进行内核空间的访问,这就是内核模式。
内核模式与用户模式之间的访问
内核有权限访问用户空间,用户空间被禁止直接访问内核空间,因为内核空间的数据和代码是所有程序共享的,如果一个程序修改了内核空间中的数据,不仅会影响操作系统内核的稳定性,还会影响到其他程序,这是很具破坏性的。
为什么要区分两种模式?
因为用户程序不安全,所以在用户程序调用内核接口时(调用相关函数,即进行输出输入,分配内存,响应鼠标等等关于硬件的操作),需要内核模式来进行各种校验,防止出错。
为什么内核和用户程序要共用地址空间
因为如果内核和用户程序是分别的独立地址空间,那么在用户程序进行系统调用时,要切换到另一个地址空间,这相当于切换了一个进程,寄存器需要进栈出栈,而cpu的缓存以及mmu页表缓存也会失效,这会使得内存的访问相当低效(因为缓存本来就是为了提升效率而出现的),而采用共享地址空间的方案时,用户模式和内核模式之间的切换仅仅是模式切换,只需要寄存器进栈出栈,cpu的缓存不会消失,大大提升了效率。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构