实模式和保护模式

一. 实模式介绍

    X86体系的CPU启动时进入实模式, 20根地址线, 16位寄存器, 最多访问1M的内存空间,使用段地址(CS) + 偏移地址的方式来访问.

 

二.保护模式介绍

     提供了硬件对多任务的支持并能够快速地进行任务切换和保护任务环境,  物理内存也不能直接被程序访问. 4个特权和完善的特权检查机制. 为了在32位保护模式下执行纯16位程序,支持虚拟8086方式,它不是一个真正的CPU模式,还属于保护模式. 使用MMU通过分段和分页管理实现虚拟地址到物理地址的转换.

     进入保护模式的主要步骤:

1.准备GDT

2.用lgdt加载gdtr

3.打开A20

4.设置cr0的PE位为1.

5.跳转,进入保护模式.

三. 系统管理模式

    当SMI引脚为有效输入时进入系统管理模式,首先保存当前的CPU上下文. 它有独立的地址空间,用来执行电源管理和系统安全方面的指令.

 

四. 扩展模式

     64位CPU支持这种模式,该模式有两种子模式,子模式的切换完全基于代码段寄存器(CS).

     1)该模式下,64位操作系统运行在32位兼容环境,能正常16,32位应用程序就像基本的保护模式一样访问32位地址空间,但不能运行纯16位实模式

     2)该模式下,处理器完全执行64位指令,使用64位地址空间和64操作数.

 

==================================================================

保护模式下段寄存器还是16位,放的不是段值而是段选择子,高13位表示在描述符表中索引段描述符的序号), bit2表示GDT/LDT. bit[1:0]是RPL用来指明请求特权级.

段描述符表(Segment Sign Table,SDT) :每项64位, 表示段的基地址,段界限和访问权限.

段描述表的基地址放在段描述符寄存器中(Segment Sign Table Register, SDRT).

段描述符表(SDT)分两种,一种是全局段描述符表(GDT),另一种是局部段描述符表(LDT), 对应的寄存器分别为GDTR和LDTR. 全局段描述符表在内存中只有一个,而局部段描述符表可以有多个. 有多少个用户进程就有多少个局部段描述符表. 根据段寄存器里的第2位是0还是1决定指向的段是GDT还是LDT。

CPU寻址步骤:

0)在保护模式下引用一个内存地址首先,将段选择子装入相应的段寄存器中,然后CPU会自动根据段选择子找到相应的段描述符,并找出基地址,最后在加上偏移量,就得到了所需要的内存地址

1)根据段选择子查找GDTR或者LDTR的段描述符表项地址,根据段描述表项和偏移地址得到CPU的线性地址.

2)GDT中的第一个描述符必须是空,即全为0。在程序中这个描述符不能用来进行内存访问,否则将产生General Protection异常

3)由于GDT中的描述符都是64位长,因此为了让CPU的访问速度达到最快,需要将GDT的入口地址以8字节对齐,即放入8的倍数的位置

4)如果CR0的PG(bit32)=1表示启用分页机制(4K/页).则线性地址根据页目录和页表项再映射到物理地址上.

Intel Architecture中有关于保护模式的图:

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值