0x02.分级保护域
分级保护域(hierarchical protection domains)又被称作保护环,简称 Rings ,是一种将计算机不同的资源划分至不同权限的模型
在一些硬件或者微代码级别上提供不同特权态模式的 CPU 架构上,保护环通常都是硬件强制的。Rings是从最高特权级(通常被叫作0级)到最低特权级(通常对应最大的数字)排列的
在大多数操作系统中,Ring0 拥有最高特权,并且可以和最多的硬件直接交互(比如CPU,内存)
内层ring可以任意调用外层ring的资源
一、Intel Ring Model
Intel 的 CPU 将权限分为四个等级:Ring0、Ring1、Ring2、Ring3,权限等级依次降低,大部分现代操作系统只用到了ring0 和 ring3,其中 kernel 运行在 ring0,用户态程序运行在 ring3

使用 Ring Model 是为了提升系统安全性,例如某个间谍软件作为一个在 Ring 3 运行的用户程序,在不通知用户的时候打开摄像头会被阻止,因为访问硬件需要使用 being 驱动程序保留的 Ring 1 的方法
操作系统本身便是一个运行在内核态的程序,当计算机通电之后首先会载入 ROM(BIOS/UEFI),之后载入第二引导程序(Linux 通常用 GNU Grub),由第二引导程序来将操作内核载入到内存当中并跳转到内核入口点,将控制权移交内核
内核在完成一系列的初始化过程之后,会启动一些低权限(ring3)的进程以向我们提供用户界面
二、虚拟内存空间
在现代操作系统中,计算机的虚拟内存地址空间通常被分为两块——供用户进程使用的用户空间(user space)与供操作系统内核使用的内核空间(kernel space),对于 Linux 而言,通常位于较高虚拟地址的虚拟内存空间被分配给内核使用,而位于较低虚拟地址的虚拟内存空间责备分配给用户进程使用
- 32 位下的虚拟内存空间布局如下:

- 64位下的虚拟内存空间布局如下:

三、用户态 & 内核态
抛开华丽的辞藻,这两个词最本质的含义是:
- 用户态:CPU 运行在 ring3 + 用户进程运行环境上下文
- 内核态:CPU 运行在 ring0 + 内核代码运行环境上下文
通常情况下,不同用户进程间的用户地址空间是隔离的,但都共享着相同的内核地址空间,即不同的用户进程在相同的内核虚拟地址空间上都有着一致的对内核物理地址空间的映射