保护模式

本文介绍了保护模式下CPU如何进行内存管理和访问控制。包括保护性检验的多种类型、段和页保护的启用与禁用方法、段描述符的标志位含义、全局描述符表(GDT)和局部描述符表(LDT)的工作原理。

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

一、保护性检验有一下几类:
1 限长的检验
2 类型检验
3 特权级检验
4 可寻址范围的限制
5 例程入口点的限制
6 指令集的限制

二、启动/禁用段和页的保护
在这里插入图片描述
CR0寄存器的PE标志位,将处理器切换到保护模式,一旦进入保护模式则没办法重新打开或者关闭。
CR0的PG标志位置位,开启页级的保护,一旦启动就无法关闭。可以通过如下操作可以禁用页级的保护:
1、CR0寄存器的WP标志清零
2、 将每个页目录项和页表项的读写标志和普通用户/超级用户(U/S)标志置位。

三、段描描述符的标志位
在这里插入图片描述

1、 描述符(S)标志:(第二个双字的bit12位)为1说明是代码段或者数据段描述符,为0则为系统段。
2、类型域:(第二双字节的bit8-bit11位)确定代码段,数据段或者系统段的类型。
3、限长域:(limit19:16和segment limit15:00和G和E)来确定该段的长度。
4、描述符特权级(DPL):(bit13,bit14)确定该段的特权级。
5、请求特权级(RPL):(段选择符的bit0和bit1位)确定一个段选择符的请求特权级别。
6、当前特权级别(CPL):(CS段寄存器的bit0和bit1)指明当前运行的进程的特权级。
7、普通用户/超级用户(U/S)标志:(页目录项和页表项的bit2)确定该页的类型。
8、读写(R/W)标志:(页目录项和页表项的bit1)确定访问该页的类型:只读还是可读可写。

四、gdt和ldt
如果手头上有虚拟地址xxxx:yyyyyyyy
首先从GDTR中取出GDT的基址BA找到GDT
xxxx一共16位,根据倒数第三位即T1位判断
如果T1=0,xxxx的前13位表示的是GDT的位置索引,根据索引得到一个描述符
该描述符含有段的基址与其他各种信息,段的起始地址+yyyyyyyyy就得到线程地址

如果T1=1,那么从LDTR得到LDT的位置索引,在GDT里面找到LDT描述符,LDT描述符里面包含LDT的线性地址
找到LDT,取出xxxx的前13位,在LDT中找到段描述符,该段描述符里面包含段的基址等信息.
而后段的基址加上yyyyyyyy得到线性地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值