码迷,mamicode.com
首页 > 其他好文 > 详细

80x86的保护模式

时间:2018-03-21 23:16:15      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:line   描述   log   gpo   图片   如何   使用   idt   需要   

什么是保护模式?

通过对程序使用的存储区采用分段、分页的存储管理机制, 达到分组使用、互不干扰的保护目的。能为每个任务提供一台虚拟处理器,使每个任务单独执行,快速切换。

所以,内存地址由段基地址、偏移地址构成。

 

在内存中段怎么描述?

段的描述符:段基地址(32位)、段长度(20位,单位为2^12,即4K)、访问权限, 总计64位。

 

出于系统的兼容问题,段寄存器都是16位的, 那么如何表示64位的段描述符呢?

通过描述符表:将段寄存器的高13位作为索引来访问该表(描述符表本身也有一个基址,加上这13位的偏移地址), 从而获得64位的段描述符。

描述符表分为两类:

1. GDT是全局描述符表,主要存放操作系统和各任务公用的描述符, 也存放LDT描述符。

2. LDT是局部描述符表, 主主要存放各个任务的私有描述符。

段寄存器:高13位用来指示描述符在描述符表中的索引号, 低两位是表示使用描述符的特权级别。另外一位(TI)是GDT和LDT的信号量,如果TI = 0, 则使用GDT, 如果 TI为1, 则使用LDT。

 

如何从GDT里找到需要的描述符呢??

芯片上有一个GDT寄存器,是48位,存放着GDT的位置与长度, 对程序员是可见。

先从GDT寄存器中找到GDT的基址,然后从段寄存器中找到需要的描述符的索引值,这样就找到了需要的描述符了。如下图所示:

技术分享图片

 

 

如何找到LDT上需要的描述符呢??

芯片上也有一个LDT寄存器, 是48位的,存放着LDT在GDT里的索引值与。

先从GDT寄存器里找到GDT的基址,再从LDT寄存器里找到LDT的索引值,这样就找到了LDT的描述符, 也就找到了LDT的基址了,然后从段寄存器里找到需要的描述符的索引值 ,这样就找到了需要的描述符了。如下图所示:

技术分享图片

80x86的保护模式

标签:line   描述   log   gpo   图片   如何   使用   idt   需要   

原文地址:https://www.cnblogs.com/yinheyi/p/8620209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!