动手制作操作系统——认识实模式与保护模式

因为计算机启动后按照实模式寻址,CPU只能访问1M的内存,所以为了访问1M内存后更大的空间,就需要进入到保护模式,保护模式不仅有更大的地址空间,还将程序分成了4个特权级(0~4),数字越小特权级越高,在涉及特权级的操作时,处理器将会对特权级进行比较,最终允许访问或者拒绝访问。

首先给出几个关键词


段基址:段的起始地址。

段界限:某个段可以寻址的相对段基址的最大偏移地址。

描述符:一个特殊的数据结构,包含段基址,段界限,属性,共8字节。

全局描述符表(GDT):由描述符组成的数组,在系统中只能有一个。

局部描述符表(LDT):由局部描述符组成的数组,在系统中可以有若干个。

CPL:当前执行程序的特权级。

RPL:描述符选择子的特权级。

DPL:段的特权级。

一致代码段:被拿出来共享的代码段,可以被低特权级用户直接访问,和非一致代码段共同是描述符中的一个属性。

非一致代码段:限制低特权级访问而被操作系统保护起来的代码段。

下面具体看一下保护模式下CPU是如何寻址的:

假设,描述符表中只有一个段基址为0(描述符中段基址位数为32位,由高到低位于描述符的第8,5,4,3字节),段界限为4GB(段界限位数为20位,由高到低位于描述符的第7字节前四位,1,0字节,但由于属性中有一位可以将段界限粒度变成4K,所以段界限最大可以达到4GB)的描述符,寄存器GDTR中保存描述符表的首地址,只在分段模式下,所有CPL,RPL,DPL都为0。


现在我们希望访问物理地址0x00500000(物理地址第5M+1个字节):

首先要选择从哪个段的基址访问,这里只有一个段,那么就选择描述符表中的第一个描述符,将第一个描述符的地址相对描述符表头的偏移量装入段寄存器,

然后第5M+1个字节 在相对基址0,偏移量为0x00500000处。

那么就将 EIP设置为0x00500000。

这就是保护模式的寻址方式。


然后看一看程序特权级是如何检查的:

访问数据段:

当程序访问数据段,TSS,要确保CPL和RPL<=数据段描述符的DPL。

直接转移:

1、当程序转移至非一致代码段时,若CPL与目标代码段描述符的DPL相等,且使用的选择子RPL小于等于DPL,则允许访问,CPL不变。

2、当程序转移至一致代码段时,若CPL大于等于目标代码段描述符的DPL,则允许访问,CPL不变。

通过门描述符的转移:

1、当程序通过调用门转移至一致代码段时,若CPL小于等于调用门描述符的DPL,且目标代码段描述符的DPL小于等于CPL,则允许访问,CPL不变。

2、当程序通过调用门转移至非一致代码段时,分成两种情况,一种是通过call转移,一种是jmp:

  call:同一致代码段;

  jmp:CPL小于等于调用门描述符的DPL,且目标代码段描述符的DPL等于CPL,则允许访问

转移后CPL等于目标代码段描述符DPL。


总结如下:

实模式:直接访问物理内存,寄存器CS×16+IP就是物理地址,地址空间只有1MB。

保护模式:寄存器GDTR中保存描述符表(GDT)的界限和第一个表项的地址,寄存器CS中为描述符表的索引,描述符中记录着表示对应段的段基址(物理内存段的起始地址)和段界限(此段最多能容纳的字节数),而EIP中为相对于这个描述符中的段基址的偏移,地址空间为4GB。

程序通过DPL,CPL,RPL3种特权级来控制程序是否可以转移,以及数据是否可以被使用,仅在保护模式中有效。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《x86汇编语言:从模式保护模式》是一本经典的计算机软件和硬件教材。该书通过详细讲解x86汇编语言的模式保护模式两个阶段的特点和转换过程,帮助读者深入了解计算机的底层工作原理。 模式是早期x86处理器的工作模式,它具有简单和直接访问内存的特点,但存在一些限制,例如只能寻址最多1MB的内存空间。《x86汇编语言:从模式保护模式》首先介绍了模式的基本概念和操作指令,然后通过际的编程示例,让读者熟悉模式下的汇编语言编程。 接着,《x86汇编语言:从模式保护模式》详细介绍了保护模式的内存管理、特权级和中断处理等概念和机制。保护模式是现代操作系统常用的工作模式,它具有更强大的内存管理能力和安全性,可以有效地利用计算机的资源。通过学习保护模式的相关知识,读者可以了解操作系统的内核和应用程序的执行过程,并且能够编写更强大和高效的程序。 《x86汇编语言:从模式保护模式》还介绍了x86处理器的特殊指令和编程技巧,例如x87浮点指令和SSE指令集等。这些指令和技巧可以提高程序的性能和效率,使程序员能够充分发挥x86体系结构的优势。 总之,《x86汇编语言:从模式保护模式》是一本全面且用的教材,通过对x86汇编语言的学习,读者可以更深入地了解计算机的底层原理和操作系统的工作方式。无论是想成为程序员还是深入研究计算机体系结构的人员,这本书都是一本必读之作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值