免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 怪怪虎
打印 上一主题 下一主题

请教关于段描述表的问题 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2007-05-05 22:24 |显示全部楼层
原帖由 怪怪虎 于 2007-5-5 21:42 发表于 1楼  
对以下几个概念比较模糊,请各位高人指点.

1.段描述表在系统中是一个含有多项的表,还是就是一个6字节的一个表项.

2. 段描述符是什么含义?与段描述表有什么关系.在系统中有多少段描述符?



1、描述符表(Descriptor Table)是一个表格,表格里每一项是描述符(Descriptor),每一个描述符(Descriptor)是 8 个字节(64位)。描述符表(Descriptor Table)里有多个描述符(Descriptor)。
    描述符表有 3 种:全局描述符表(GDT)、局部描述符表(LDT)以及中断描述符表(IDT)。


2、描述符(Descriptor)定义一内存段里各种属性,包括段基地址、段长度、权限、读/写 以及其它属性。

论坛徽章:
0
2 [报告]
发表于 2007-05-06 00:00 |显示全部楼层
原帖由 W.Z.T 于 2007-5-5 22:38 发表于 3楼  
CS的高13位就是段描述符在描述符表的索引,所以全局描述符表最多可以有2^13=8192个描述符,
在你的系统中可以自己定义有多少个描述符。一个任务包括ldt和tss两个描述符,所以一个系统最多有4096个任务。

具 ...


LDT 是可选的,TSS 属于系统管理的资源,与具体任务无关,一个系统最多有4096个任务,没有根据。

论坛徽章:
0
3 [报告]
发表于 2007-05-06 00:04 |显示全部楼层
原帖由 怪怪虎 于 2007-5-5 22:45 发表于 4楼  
我在自己动手写操作系统这本书看到
描述符 有以下几部分组成
1 字节的段基址,
  2字节的属性
3字节的段基址
2 字节的段界限.

对这个不明白的为什么会有两个段基址?

如果楼上的大哥看过这本书的话 ...



对于描述符的具体描述建议还是看看Intel或AMD文档。

段寄存器就是某个选择子

论坛徽章:
0
4 [报告]
发表于 2007-05-06 00:18 |显示全部楼层
原帖由 怪怪虎 于 2007-5-5 22:58 发表于 5楼  

请问找到段描述表是通过什么方式?
个人觉得应该是  相应的段描述表的基地址+cs中高13位. 如果是这样的话, 我不明白的地方是
相应的段描述表的基地址 从那里得到的。



如何索引到描述符:描述符表的基地址+选择子索引*sizeof(描述符)
描述符表基地址:GDT 在 GDTR 的 BASE ADDRESS 域中。
                LDT 在 LDTR 的 BASE ADDRESS 域中。
                IDT 在 IDTR 的 BASE ADDRESS 域中。
                TSS 在 TR 的 BASE ADDRESS 域中。

除 GDTR 和 IDTR 需要系统初始化设置外,其它需要在 GDT 中定位

论坛徽章:
0
5 [报告]
发表于 2007-05-06 00:39 |显示全部楼层
原帖由 W.Z.T 于 2007-5-6 00:29 发表于 10楼  


"TSS 属于系统管理的资源"这句话没看明白。tss怎么可能与具体的任务无关呢?否则进程切换时怎么保存进程的上下文?

x86体系的cpu中最多可以定位2^13=8192个描述符。在linux系统中一个任务需要 ...


TSS 是任务发生切换时系统软件管理的,任务本身不能操纵它。从某种意义讲与任务无关。
Linux 的实现 4096 限制并不代表 X86 平台的有4096 限制

论坛徽章:
0
6 [报告]
发表于 2007-05-06 01:05 |显示全部楼层
原帖由 W.Z.T 于 2007-5-6 00:56 发表于 12楼  
“TSS 是任务发生切换时系统软件管理的”

任务发生切换时,cpu自动把进程的上下文保存到tss中,不需要操作系统来管理


没错,但需要系统来定位 TSS 块,也就是说要有人(系统)去执行 LTR (Load Task Register)指令

论坛徽章:
0
7 [报告]
发表于 2007-05-07 10:39 |显示全部楼层
原帖由 怪怪虎 于 2007-5-6 22:47 发表于 16楼  
看了上边两位牛人的讨论,自己有查阅了下资料.下边说下自己对段描述表和段描述符的理解.
对于一个新手个人觉得可以这样思考.

1. 首先确定系统中只有四个段描述表. GDT, LDT,IDT, TSS
2.段描述符有好多种类, ...


1、只有3个描述符表:GDT、LDT 以及 IDT

2、注意:段描述符只是描述符其中的一种,不要以段描述符去概括描述符。
   描述符分为:段描述符,包括:代码段描述符(code segment descriptor) 和数据段描述符(data segment descriptor))
               系统描述符,包括:LDT 描述符以及 TSS 描述符、门符(gate descriptor)

   LDT 和 TSS 以系统描述符的形式存放在 GDT 中,所以必须根据 GDT 得出 LDT 表和 TSS 块,指令 LLDT 用于根据提供的选择子(Selector)在 GDT 中定位 LDT 表。 同样 LTR 用于根据提供的选择子(Selector)在 GDT 中定位 TSS 块。但是注意:使用 LTR 并不是加载 TSS 的唯一方法,在任务门符(Task Gate Descritpor)的 TSS 域 和 TSS 块中的第 0 字节中包含有 TSS 选择子。在任务切换时CPU 自动加载 TSS 块。
    门符(Gate descriptor)又可分为:调用门(Call Gate)、中断门(Interrupt Gate)和陷井门(Trap Gate)以及任务门(Task Gate)。都是发生在控制权转移的时候使用。其中最主要的用于权限的转移,如低权限向高权限代码的转移。
    门符不是段描述符,它不描述有关段的任何信息。它只是相当于一个指针,指出目标代码的定位。

论坛徽章:
0
8 [报告]
发表于 2007-05-07 11:56 |显示全部楼层
原帖由 怪怪虎 于 2007-5-6 22:47 发表于 16楼  
另外 个人认为 四个段描述表其实就是一块内存,只不过这块内存做了特出的用法.
以上对概念的一些基本理解.个人认为对全局的理解很重要.不队之处希望指正.


PS:

还有一点自己没有理解,就是说TSS是有104字节构成,可是怎么没看出TSS和任何一个描述符有联系?请高人指点.


参考资料
http://www.juqingshow.com/cpu/200702/7825.html
...


没错,描述符和描述符表都是一些数据结构。需要系统初始化时设定,或有些动态生成。

TSS 中第0字节指出调用链中上一个 TSS 块选择子,第 96 字节指出该任务的 LDT

PS:建议还是看 Intel 或者 AMD 官方文档好
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP