这篇文章是在学习了 Linux 0.11 部分源码后再写的。个人将 Linux 下的权限分为硬件和操作系统两个层面。这样的分类是比较宽泛的。
另外,本文的讨论环境是 32 位保护模式。
硬件层面
硬件层面的权限准确地讲应该是特权级(Priviledge Level)
。特权级分成 4 级,用 0、1、2、3 来表示不同级别,值越小级别越高。其中,特权级 1、2 都不用,0 代表内核级别,3 代表用户级别。
特权级共有 3 种:
CPL(Current Privilege Level)
,代码段选择子当前特权级别,跟 CPU 当前特权级一样,不能通过代码来设定级别大小
RPL(Rquest Privilege Level)
,数据段(如 ds、ss)选择子请求特权级别,表示请求存储段(代码段、数据段、栈段)描述符、系统描述符(TSS、LDT)的特权级别,可以通过代码来设定级别大小
DPL(Descriptor Privilege Level)
,描述符特权级别,描述符可以是门描述符、存储段描述符、系统描述符,可以通过代码设定级别大小