1. 内核态与用户态的区别:
1) 内核态的代码不受任何限制,可以访问所有处理器指令集、内存地址以及I/O空间。
2) 用户态的代码只能访问其地址空间的页表项中规定的虚拟地址。
2. 用户态到内核态的切换方式:
1) 系统调用(软中断的一种):由用户进程主动发起;
2) 异常:当CPU在执行运行在用户态下的程序时,发生了异常,切换到处理此异常的内核相关程序中,比如缺页异常。被动;
3) 硬件中断:被动。
1) 系统调用(软中断的一种):由用户进程主动发起;
2) 异常:当CPU在执行运行在用户态下的程序时,发生了异常,切换到处理此异常的内核相关程序中,比如缺页异常。被动;
3) 硬件中断:被动。
3. 内核空间与用户空间的划分(32位):
内核空间:最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF);
用户空间:较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF)。
4. CPU对处于内核态根据上下文环境进一步细分:
1) 内核态,运行于进程上下文,内核代表进程运行于内核空间。
2) 内核态,运行于中断上下文,内核代表硬件运行于内核空间。
3) 用户态,运行于用户空间。
2) 内核态,运行于中断上下文,内核代表硬件运行于内核空间。
3) 用户态,运行于用户空间。
references: