用户态与内核态:权限与地盘的秘密
内核态、用户态本质就是权限不一样、地盘不一样。一句话总结用户态User Mode应用程序跑的地方权限极低不能乱搞硬件、不能乱改内存。内核态Kernel Mode操作系统内核跑的地方最高权限想干嘛干嘛管 CPU、内存、网卡、磁盘…1. 为什么要分这两个态为了安全 稳定。如果随便一个 APP 都能直接操作硬件、改内存那一个程序崩溃 → 整机死机病毒随便读写硬盘、网卡多个程序互相踩内存所以操作系统画了一条红线应用只能在自己小圈子里玩内核掌管一切只信任自己2. 权限差别最核心用户态受限模式不能直接访问硬件网卡、硬盘、键盘…不能访问其他进程的内存不能修改系统配置崩溃了最多自己挂掉不影响系统内核态最高特权模式可以直接读写所有内存直接控制硬件网卡收发包、写磁盘管理进程、调度 CPU内核崩溃 整个系统卡死 / 蓝屏3. 内存上的划分直观理解操作系统把虚拟内存切成两部分低地址 → 用户态空间你的 QQ、浏览器、Nginx、Java 进程都在这高地址 → 内核态空间整个系统只有一份所有进程共享但不能随便碰┌─────────────┐ 高地址 │ 内核空间 │ ← 内核态才能访问 │ (共享) │ ├─────────────┤ │ │ │ 用户空间 │ ← 每个进程独立互相看不见 │ │ └─────────────┘ 低地址一个进程不能直接跨过这条线读写数据。4. 什么时候切换系统调用应用想干 “越权” 的事必须发请求让内核代劳这个过程叫系统调用syscall比如读文件发网络包分配大块内存打印到屏幕流程用户态程序read()/write()/recv()CPU 切换到内核态内核帮你完成操作切回用户态把结果还给你这个切换是有开销的所以高性能网络会尽量减少切换。5. 结合网络收包流程把 “内核态 / 用户态” 标进去就一目了然网卡收到包 → 内核态处理硬中断、软中断、协议栈 → 放到 socket 队列依然在内核态 → 应用调用 recv() → 切换内核态 → 内核把数据从内核空间 → 拷贝到用户空间 → 切回用户态应用拿到数据关键点收包全过程前半段全在内核态应用真正拿到数据才是用户态中间那次拷贝 状态切换是传统网络性能的一大瓶颈超简记忆版用户态应用程序小弟权限小安全内核态操作系统内核大哥权限大危险系统调用小弟找大哥帮忙必须切换身份
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2443910.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!