免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3941 | 回复: 13
打印 上一主题 下一主题

【求助】关于386的LDT和TSS的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-16 21:17 |只看该作者 |倒序浏览
各位大虾,小弟最近学习《UNIX系统下的80386》(一本老书)一书,在学习有关任务切换时,书中有如下一段话
“虽然在UNIX系统中有大量的进程,但只有一个进程(在单处理器系统中)是当前进程,于是在GDT中,没有必要为每一个进程设置一个LDT描述符和TSS描述符,而只要有一个当前进程的LDT描述符和TSS描述符,且它们的选择子是固定的,只要在进程切换之前,用新进程的LDT描述符和TSS描述符替换掉在GDT中的老的进程的LDT描述符和TSS描述符就可以了。”

按照上面的说法,是不是LDT描述符和TSS描述符在GDT中是固定的?在下面的注释中,似乎LDT描述符是GDT中的第40项,TSS描述符是GDT中的第46项,但是CPU中有LDTR和TR两个寄存器,这两个寄存器是用来指定LDT描述符和TSS描述符在GDT中的位置的,如果LDT描述符和TSS描述符在GDT中是固定的,那么这两个寄存器不就没有存在的必要了吗?

而且该书还称“从80386来说,只要用新任务的TSS描述符的选择子加载任务寄存器TR,就实现了任务切换” TSS描述符的位置都固定了,不同进程的TSS描述符的选择子还有区别吗?

知道的XD解释一下哈,小弟谢了先!

论坛徽章:
0
2 [报告]
发表于 2005-10-17 09:41 |只看该作者

【求助】关于386的LDT和TSS的问题

说的没错,早期的linux内核中,在GDT表中,是每一个进程占用2项GDT条目,一个是LDT,一个是TSS。而在以后的版本中(看《深入理解linux内核-第二版》),只是占有一对,且选择子固定,每当进程切换时,会重新设置LDT的内容和TSS的内容为要切换到进程的LDT和TSS。

论坛徽章:
0
3 [报告]
发表于 2005-10-17 12:30 |只看该作者

【求助】关于386的LDT和TSS的问题

[quote]原帖由 "dzbjet"]说的没错,早期的linux内核中,在GDT表中,是每一个进程占用2项GDT条目,一个是LDT,一个是TSS。而在以后的版本中(看《深入理解linux内核-第二版》),只是占有一对,且选择子固定,每当进程切换时,会重新设置LDT?.........[/quote 发表:


谢谢这位师兄!我没有你说的那本书哈,你说的占有一对,一对是两个吗?还有就是既然位置已经固定了还拿TR和LDTR来干什么呢?而且切换TR就是切换任务,而TR值应该是不变的哈,小弟不是很明白,师兄讲详细点哈

论坛徽章:
0
4 [报告]
发表于 2005-10-17 16:00 |只看该作者

【求助】关于386的LDT和TSS的问题

TR,选择子的位置固定但它的内容要变的啊

论坛徽章:
0
5 [报告]
发表于 2005-10-17 17:49 |只看该作者

【求助】关于386的LDT和TSS的问题

[quote]原帖由 "bhpang2"]TR,选择子的位置固定但它的内容要变的啊[/quote 发表:


内容变化的我觉得应该是TR所指向的TSS描述符的内容哈,TR本身存放的只是相当于一个选择子,而TSS描述符在GDT中位置不变,那么标志描述符的选择子就应该不变,不知是不是这样的啊

论坛徽章:
0
6 [报告]
发表于 2005-10-17 19:24 |只看该作者

【求助】关于386的LDT和TSS的问题

TSS描述符也应该不会变吧,变得应该是其指向的TSS段内容吧
请指教

论坛徽章:
0
7 [报告]
发表于 2005-10-17 20:54 |只看该作者

【求助】关于386的LDT和TSS的问题

原帖由 "xw009" 发表:
TSS描述符也应该不会变吧,变得应该是其指向的TSS段内容吧
请指教


别的Unix不知道,Linux根本不使用Intel的那套任务切换机制。

Intel的意思是想,没个进程一个TSS数据结构,由TR寄存器指向,等到切换任务时,只要使TR指向新任务的TSS就行了;而Linux是全局用一个TSS──确切的说,在SMP中,是每个CPU一个TSS──所有的进程有关的东西,都放在自己的内核栈里边,TSS->;esp0就指到进程的内核栈,切换任务时,只要根据TR取出TSS的esp0域的值就可以知道所有需要的信息了。

Linux的这种实现方式更加灵活,也更高效。Intel的设计太复杂了。

论坛徽章:
0
8 [报告]
发表于 2005-10-18 11:42 |只看该作者

【求助】关于386的LDT和TSS的问题

原帖由 "xw009" 发表:
TSS描述符也应该不会变吧,变得应该是其指向的TSS段内容吧
请指教


应该要变吧,TSS描述符中放的是关于TSS段的基址、段限。权限一类的东西,TSS段在内存中的位置不是固定的吧,段限、权限不同的任务的TSS也不同吧

论坛徽章:
0
9 [报告]
发表于 2005-10-18 12:08 |只看该作者

【求助】关于386的LDT和TSS的问题

原帖由 "albcamus" 发表:


别的Unix不知道,Linux根本不使用Intel的那套任务切换机制。

Intel的意思是想,没个进程一个TSS数据结构,由TR寄存器指向,等到切换任务时,只要使TR指向新任务的TSS就行了;而Linux是全局用一个TSS──确切?.........


内核栈中存放的是当前的进程信息还是所有的进程的信息啊,那么TR、TSS中的值都是固定不便的了?旧进程的信息保存倒内核栈、新进程的信息重内核栈中取出?小弟不是很明白,斑竹大人讲详细点哈!

论坛徽章:
0
10 [报告]
发表于 2005-10-18 12:11 |只看该作者

【求助】关于386的LDT和TSS的问题

>;>;内核栈中存放的是当前的进程信息还是所有的进程的信息啊
每个进程一个内核栈

>;>;那么TR、TSS中的值都是固定不便的了
没错

>;>;旧进程的信息保存倒内核栈、新进程的信息重内核栈中取出?
正是
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP