2024-04-19 操作系统特权级保护
上文链接:2023-06-27 操作系统分页机制的深入浅出
本专栏文章描述的是以32位操作系统为基础的相关知识
1、操作系统中的特权级什么是?
- 特权级有4级:0、1、2、3,一般来说操作系统内核位于0,虚拟机、驱动程序等系统服务位于1、2,用户位于3
2、特权级的设计与实现
-
特权级向高级转移需要保护现场即发生调用时主调者寄存器的值
-
tss是一种内存数据结构有专门的硬件支持,在特权级管理中tss用于保存程序栈相关的信息,因为不同特权级使用的栈地址不一样。每个任务的每个特权级下只能有 一个栈,不存在一个任务的某个特权级下存在多个同特权级栈的情
况 。 也就是说, 一共 4 个特权级, 一个任务“最多”有 4 个栈。而实际中tss只记录了3个栈: ss0 和 esp0 、 ss1和 esp1 、 ss2 和 esp2 ,它们分别代表 0级栈的段选择子和偏移量、 1级栈的段选择子和偏移量、 2级栈的段选择子和偏移量。特权级转移分为两类, 一类是由中断门、调用门等手段实现低特权级转向高特权级,另 一类则相反,是由调用返回指令从高特权级返回到低特权级,这是唯一一种能让处理器降低特权级的情况。
- 第一类:特权级由低到高的情况,由于不知道目标特权级对应的械地址在哪里,所以要提前把
目标栈的地址记录在某个地方,当处理器向高特权级转移时再从中取出来加载到 SS 和 ESP 中以更新栈。 - 第二类:由高特权返回到低特权级的情况,处理器是不需要在 TSS 中去寻找低特权级目标栈的 。 其中 一个原因: TSS 中只记录 2 、 1 、 0 特权级的栈,假如是从 2 特权级返回到 3 特权级tss是没有记录的。因为在中断、调用(如:int、call指令)发生时,软硬件配合自动地把当时低特权级的战地址( SS 和 ESP )压入
了转移后的高特权级所在的栈中,所以,当用返回指令如 retf 或iret 从高特权级向低特权级返回时,处理器可以从当前使用的高特权级的战中获取低特权级的钱段选择子及偏移量。
- 第一类:特权级由低到高的情况,由于不知道目标特权级对应的械地址在哪里,所以要提前把
-
特权级检查:
- 受访者为代码段(段描述符中 type 宇段中含有 X):请求者特权级:当前cs段选择子对应段描述符的DPL即cs段选择子的RPL(又称CPL)值 = 受访者段选择子对应段描述符DPL值
- 受访者为数据段(段描述符中 type 宇段中不含有 X):请求者特权级:当前cs段选择子对应段描述符的DPL即cs段选择子的RPL值 < 受访者段选择子对应段描述符DPL值
- 当前特权级CPL必须在门描述符DPL和门中目标代码段DPL之间
-
如何完成特权级转变?答:利用门
门结构:一种内存中数据结构,同占8字节大小段描述符一样,门对应的结构称为门描述符。
门描述符用来描述门中通向的代码。 一共有 4 种门结构 :
-
任务门:任务以任务状态段 TSS 为单位,用来实现任务切换,它可以借助中断或指令发起。当中断发生时,
如果对应的中断向量号是任务门,则会发起任务切换。也可以像调用门那样,用 call 或 jmp 指令后接任务
门的选择子或任务 TSS 的选择子。
坦白说,现代操作系统很少用到调用门和任务门,陷阱门是供调试器用的。31~16 15 14~13 11~8 7~0 未使用 P DPL TYPE(D110) 未使用 31 16 15 0 TSS选择子 未使用 - TYPE字段,其中11位为D位,D位为0表示16位模式,为1表示32位模式
-
调用门:call 和 jmp 指令后接调用门选择子为参数,以调用函数例程的形式实现从低特权向高特权转移,可用来实现系统调用 。 call 指令使用调用门可以实现向高特权代码转移, jmp 指令使用调用门只能实现向平级代码转移。
31~16 15 14~13 11~8 7~0 被调程序在目标端内的偏移量31~16位 P DPL TYPE(D100) 未使用 31 16 15 0 被调程序目标代码段描述符选择子 中断处理程序在目标端内的偏移15~0位 - TYPE字段,其中11位为D位,D位为0表示16位模式,为1表示32位模式
-
中断门:以 int 指令主动发中断的形式实现从低特权向高特权转移, Linux 系统调用便用此中断门实现。
31~16 15 14~13 11~8 7~0 中断处理程序在目标端内的偏移量31~16位 P DPL TYPE(D110) 未使用 31 16 15 0 中断处理程序目标代码段描述符选择子 中断处理程序在目标端内的偏移15~0位 - TYPE字段,其中11位为D位,D位为0表示16位模式,为1表示32位模式
-
陷阱门:以 int3 指令主动发中断的形式实现从低特权向高特权转移,这一般是编译器在调试时用。
31~16 15 14~13 11~8 7~0 中断处理程序在目标端内的偏移量31~16位 P DPL TYPE(D111) 未使用 31 16 15 0 中断处理程序目标代码段描述符选择子 中断处理程序在目标端内的偏移15~0位 - TYPE字段,其中11位为D位,D位为0表示16位模式,为1表示32位模式
-
-
门描述符存于何处?
任务门描述符可以放在 GDT、 LDT 和 IDT (中断描述符表,后面章节介绍)中,调用门可以位于 GDT 、 LDT 中,中断门和陷阱门仅位于 IDT 中。
处?
任务门描述符可以放在 GDT、 LDT 和 IDT (中断描述符表,后面章节介绍)中,调用门可以位于 GDT 、 LDT 中,中断门和陷阱门仅位于 IDT 中。
- 为什么可以使用门结构进入高特权级呢? 这肯定是 CPU 硬件电路中写好的规则。