CPL和权限

将当前特权级CPL(存放在cs寄存器的低两位)

 

CS里是放的选择子,每个选择子的01位就是RPL。选择子放入到CS后,01位就是RPL,也即是当前进程的CPL

 

 

如前所述,CPU的当前特权级(CPL)反映了进程是在用户态还是内核态,并由存放在cs寄存器中的段选择符的RPL字段指定。只要当前特权级被改变,一些段寄存器必须相应地更新(dsss寄存器)。例如,当CPL=3时(用户态),ds寄存器必须含有用户数据段的段选择符,而当CPL=0时,ds寄存器必须含有内核数据段的段选择符。ss寄存器也一样,当CPL为3时,它必须指向一个用户数据段中的用户栈,而当CPL为0时,它必须指向内核数据段中的一个内核栈。当从用户态切换到内核态时,Linux总是确保ss寄存器装有内核数据段的段选择符。

 

总结下,CPL就是跟代码段绑定的,从一个代码段jmp到另外一个代码段时,CPL如果发生变化,则dsss等其它权限相关的部分的权限必须相应地跟着变化。


《深入理解Linux内核(第三版)》§2.3 Linux中的分段

 


你可能感兴趣的:(CPL和权限)