免费注册 查看新帖 |

Chinaunix

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

关于TSS的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-10 05:18 |只看该作者 |倒序浏览
本人是新手,看的是于渊的书,有个问题一直弄不明白,想请教一下各位。 ring0 -> ring1,需要用到TSS作堆栈切换吗?

本人曾经为这个问题做过一个测试:

1)不装载TSS,试验 ring0 -> ring1
2)不装载TSS,试验 ring1 -> ring0

1)是成功的
2)是失败的

对于2)的失败能理解,书上也说的很清楚,从“低特权级往高特权级”转移(call)时要用到TSS作堆栈切换,我没装载TSS,当然失败。

对于1)的成功,我就感到很奇怪。程序原来运行在ring0,当转移至ring1时,在没有装载TSS的情况下它如何获知ring1的ss和esp?难道在ring1运行时用的是ring0的堆栈?如果是的话,假设在ring1时会进行跳转,ring1->ring2,那在ring2时用的也是ring0的堆栈?

论坛徽章:
0
2 [报告]
发表于 2009-06-10 05:19 |只看该作者

回复 #1 ts0612 的帖子

顶一下

论坛徽章:
0
3 [报告]
发表于 2009-06-10 08:57 |只看该作者
好久没看这块了,不过印象中ring1切换到ring0的时候, ring1的堆栈指针是保存在ring0的栈中的,
不确定是不是这样。
仅供参考

论坛徽章:
0
4 [报告]
发表于 2009-06-10 09:45 |只看该作者
那本书里讲过?

论坛徽章:
0
5 [报告]
发表于 2009-06-10 11:05 |只看该作者
只有在进入内核态的时候,才访问(具体说是读)TSS的esp0.
这就是为什么内核中所有进程共用一个TSS,而只是在切换任务的时候,改变这个tss的esp0就可以了。

在从内核态回到用户态的时候,是通过iret,是访问esp0栈中的数据返回的。

换句话说,现在的tss,有用的就是esp0。

论坛徽章:
0
6 [报告]
发表于 2009-06-10 13:28 |只看该作者

回复 #5 gtkchen 的帖子

gtkchen,

我还是不太明白你的意思。

书中说,特权级分4级,0,1,2,3,假设有程序A,它对应有4中运行态,ring0,ring1,ring2,ring3,对应的给它设置了4个堆栈,ss0:esp0, ss1:esp1, ss2:esp2, ss3:esp3。

那按照你的说法,除了ss0:esp0之外,其余的3个堆栈还有必要存在吗?

另外,还是原来的问题,ring0 -> ring2的retf(iretd)操作,在真实情况下它涉及到堆栈切换吗?如果涉及到,它在哪里切换的?(call的话,我知道是从TSS中切换的,retf/iretd我就不知道了)

谢谢

论坛徽章:
0
7 [报告]
发表于 2009-06-10 13:59 |只看该作者
linux只用了0和3,2个级别,所以1和2就舍弃了,
所以0和3级别的堆栈必须有。

0-->3的变化,必然引起堆栈的变化。

iret做了什么?你看看intel的手册,它要pop出ss3和esp3,因此导致了切换。

不能直接用iret,前提是必须这个内核态的堆栈有ss3,esp3,eflags,cs,eip才能用iret

论坛徽章:
0
8 [报告]
发表于 2009-06-10 14:11 |只看该作者

回复 #7 gtkchen 的帖子

gtkchen,

你说的是linux,于渊的好像不是linux..........

他的书里面提到在TSS里面存放了3个堆栈指针信息,ss0:esp0, ss1:esp1, ss2:esp2。至于ss3:esp3就没有在TSS里面,理由是它是特权级最低的(不太理解)。另外,在他的里面特权级是分4级的:0,1,2,3.......

gtkchen,虽然你说的是linux的情况,并不是书中的情景,但也感谢你的回复,谢谢。

论坛徽章:
0
9 [报告]
发表于 2009-06-10 15:16 |只看该作者

回复 #8 ts0612 的帖子

各位,就于渊的书中有关TSS的问题,谁能给出解答........

论坛徽章:
0
10 [报告]
发表于 2009-06-10 15:48 |只看该作者

回复 #1 ts0612 的帖子

还是检查检查你的代码吧 没TSS怎么进行RING切换哦?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP