<<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.5 保护

本文详细介绍了处理器保护机制,包括段级和页级保护。段级保护涉及限长、类型及特权级检查,而页级保护则关注读写及用户权限设置。文章还探讨了通过门描述符实现不同特权级代码间的控制转移。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        保护机制可以被用于分段和分页机制。处理器寄存器的2个位定义了当前执行程序的特权级,称为当前特权级(Current Privilege Level,CPL)。在分段和分页地址转换过程中,处理器将对CPL进行验证。

        通过设置控制寄存器CR0的PE标志(位0)可以让处理器工作在保护模式下,从而也就开启了分段保护的模式。设置控制寄存器CR0的PG标志(位31)可以开启分页机制,同时也开启了分页保护机制。

4.5.1 段级保护

        1. 段限长Limit检查

        2. 段类型检查

        3. 特权级

4.5.2 访问数据段时的特权级检查

        为了访问数据段中的操作数,数据段的段选择符必须被加载进数据段寄存器(DS、ES、FS或GS)或堆栈段寄存器(SS)中。在把一个段选择符加载进段寄存器中之前,处理器会进行特权级检查。它会把当前运行程序或任务的CPL、段选择符和段描述符的DPL进行比较。只有当段的DPL数值大于或等于CPL和RPL两者时,处理器才会把选择符加载进段寄存器中;否则,就会产生一个一般保护异常,并且不加载段选择符。

4.5.3 代码段之间转移控制时的特权级检查

        1. 直接调用或跳转到代码段

        2. 门描述符

        为了对具有不同特权级的代码提供受控的访问,处理器提供了称为门描述符的特殊描述符集。共有4种门描述符:调用门(Call Gate),类型TYPE=12;陷阱门(Trap Gate),类型TYPE=15;中断门(Interrupt Gate),类型TYPE=14;任务门(Task Gate),类型TYPE=5。

        调用门描述符可以存放在GDT或LDT中,但是不能放在中断描述符表IDT中。一个调用门主要具有如下功能:指定要访问的代码段;在指定代码段中定义过程(程序)的一个入口点;指定访问过程的调用者需要具备的特权级;若会发生堆栈切换,它就指定在堆栈之间需要复制的可选参数个数;指明调用门描述符是否有效。

        3. 通过调用门访问代码段

        4. 堆栈切换

        5. 从被调用过程返回

4.5.4 页级保护

页目录和页表表项中的读写标志R/W和用户/超级用户U/S提供了分段机制保护属性的一个子集。

4.5.5 组合页级和段级保护

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值