用户态与内核态?
-
用户态与内核态是CPU的2种运行级别;CPU运行级别分为0~3,0级权限最高,为“内核态”,3级权限最低,为“用户态”;
-
为什么分级?
不同级别对应不同的“权限”,当用户执行自己定义的函数时,级别为0,处于用户态;当操作系统执行自身的代码,如对系统硬件接口的操作,如write() / open() 函数,则会进入内核态;低级别的程序无法将自己的级别升到高级别,除非调用系统函数;这样对级别的控制,保证了用户程序无法直接的做一些破坏操作系统的行为(没有权限),而内核态下的操作系统本身可以控制用户应用程序的执行,包括杀死用户应用进程; -
当用户代码调用系统函数,如通过JNI调用本地方法(如操作内存或向端口输出指令),则会产生中断,进入内核态;当操作完成后,退出中断,返回用户态;
何时进入“内核态”?
-
系统调用,当用户代码执行时,例如需要进行文件读写,则此时用户态权限不够,通过“系统调用”申请操作系统提供“本地方法”,进入内核态调用本地方法,完成功能的实现;
-
在用户态下执行的程序发生某些异常,如“缺页异常”(即物理地址与虚拟地址所映射的“物理页”不可写),则会进入内核态;
-
外围设备的中断;若当前执行的是用户态下的程序,系统则会切换到“中断处理程序”(内核态)去执行后续操作;