区别
用户态:供应用程序运行的空间,只能受限制地访问内存
内核态:控制计算机的硬件资源,例如协调CPU资源,分配内存资源,并且提供稳定的环境
为什么要划分
1. 安全性
给不同的操作给与不同的“权限”。有些指令是非常危险的,如果错用,将导致系统崩溃,比如清内存、设置时钟等。如果允许所有的程序都可以使用这些指令,那么系统崩溃的概率将大大增加。
2. 稳定性
隔离了操作系统代码与应用程序代码。即便是单个应用程序出现错误也不会影响到操作系统的稳定性,其它的程序还可以正常的运行。
如何从用户态进入内核态
1. 系统调用
系统调用的实现(2种)
1) 中断方式
在 Linux 的实现中,所有的系统调用共用 128 号中断,对应中断处理程序是 system_call。system_call 会根据 EAX (某个寄存器) 传入的系统调用标号跳转并执行相应的系统调用程序。函数执行完成之后,会把结果放到 EAX 中返回给应用程序。