内核态和用户态的区别
为什么CPU给每个程序授予不同的权限?
该博客上撰写的文章是出于教学目的而创建的。 另外,文章中的信息可能不正确,请谨慎。
CPU 并不以相同的权限执行所有代码。 操作系统的核心代码运行在高权限的内核态,一般程序运行在受限的用户态。
通常所说的内核级和用户级也常常指这个权限区域。
用户模式
浏览器、游戏和即时通讯程序等应用程序在用户模式下运行。
- 硬件无法直接控制。
- 无法访问任意物理内存。
- 您无法随意读取其他进程的内存。
- 即使出现问题,通常也只是终止相关进程。
由于每个程序都提供了独立的虚拟地址空间,即使它们使用相同的地址值,它们实际上也可能指向不同的内存。
内核模式
内核模式允许您执行 CPU 的特权指令并管理系统范围的内存和设备。
- 管理页表和虚拟内存。
- 处理中断。
- 调度进程和线程。
- 运行设备驱动程序。
- 它检查请求是否正确,然后执行硬件操作。
权限越大,内核模式错误的影响就越大。 这就是为什么一个有问题的驱动程序可能会导致整个操作系统停止工作。
这两个区域通过系统调用连接。
当用户程序想要读取文件或发送网络数据时,它必须向内核发出请求。
用户态程序
↓ System Call
权限检查+进入内核态
↓
文件、内存和设备操作
↓
返回用户模式
用户模式和内核模式之间的切换与简单的函数调用不同。 需要更改CPU权限,检查内核接收到的地址和长度是否安全,并返回结果。
这并不意味着内核模式一定比用户模式更快。 两者之间的区别不是速度等级,而是可以执行的命令和可以访问的资源的权限差异。
之所以设置这个界限,并不是为了让你感到不舒服。 这是为了防止一般程序的错误或攻击直接控制整个计算机。