Chinaunix首页 | 论坛 | 博客
  • 博客访问: 82184
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 132
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-06 21:51
个人简介

C、汇编;DOS、vxworks、Linux;数学;户外;

文章分类

全部博文(11)

文章存档

2016年(2)

2015年(2)

2013年(7)

我的朋友

分类: 服务器与存储

2013-05-13 21:58:15

一、描述符表

描述符表有3种,由描述符顺序排列组成,由系统地址寄存器(GDTR、IDTR、LDTR)指示其在物理内存的位置和大小。有3种表,全局描述符表GDT、中断描述符表IDT和局部描述符表LDT。

在一般情况下,若要进入保护方式,需要首先定义全局描述符表、中断描述符表和局部描述符表,至少定义全局描述符表。定义方法:用专门的指令向相应的系统地址寄存器传送基地址、界限值,然后再将所需要的描述符送入指定的描述符表中。GDT和LDT最多可以存放8192个描述符,IDT最多可以放256个描述符。

描述符表(即段表)定义了386系统的所有段的情况。所有的描述符表本身都占据一个 字节为8的倍数的存储器空间,空间大小在8个字节(至少含一个描述符)到64K字节(至多含8K)个描述符之间。

1. 全局描述符表(GDT)

全局描述符表GDT(Global Descriptor Table),除了任务门,中断门和陷阱门描述符外,包含着系统中所有任务都共用的那些段的描述符。它的第一个8字节位置没有使用。

2. 中断描述符表(IDT)

中断描述符表IDT(Interrupt Descriptor Table),包含256个门描述符。IDT中只能包含任务门、中断门和陷阱门描述符,虽然IDT表最长也可以为64K字节,但只能存取2K字节以内的描述符,即256个描述符,这个数字是为了和8086保持兼容。

3. 局部描述符表(LDT)

局部描述符表LDT(local Descriptor Table),是保护模式下存储器寻址的一种数据表,它包含了与某个任务相关联的段描述符。在设计操作系统时,通常每个任务有一个独立的LDT。LDT提供 了将一任务的代码段、数据段与操作系统的其余部分相隔离的机制。

4. LDT 与 GDT 的关系

LDT的定位与GDT不同,LDT的段基址与段限由LDT描述符表示,该描述符同一般的描述符 一样存放在全局描述符表中,因此首先要从GDT中找到LDT描述符,80386微处理器中有一个局部描述符表寄存器 LDTR,这是一个16位寄存器,LDTR中存放一个被称为“段选择符”(Segment Selector)的16位数,段选择符用来在GDT中寻找LDT描述符。


二、描述符

描述符记录着对段的管理信息,按段的性质分为三类描述符:程序段描述符、系统段描述符、门描述符。

所有的描述符都由8个字节组成,其中有32位段起始地址、20位段界限值,12位的属性位。(具体属性就不讲了)


三、段地址转换

在分段的情况下,用户使用的是逻辑地址,即一个16位的段选择器和一个32位的段偏移量。分段部分在保护方式下要根据段选择符(索引码)首次访问内存,从段描述符表中取出相应的描述符,以取得段基址、界限值、段特权级以及允许访问的类型等信息。32位的段基址加32位的偏移量得到线性地址。


四、虚拟空间

32位机能提供给编程者的最大编程空间就是它能完成变换的那些空间,成为虚拟空间。它的最大值可以按以下计算:

段寄存器的TI为决定了2个描述符表;

13位选择码决定了最多有8192个描述符;

每个描述符可以访问4G的空间;

所以2*8192*4G=64T

阅读(3404) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~