有关TSS

发布于 2022-09-18 17:02:49 字数 985 浏览 18 评论 0

在intel手册-卷3里面看到,TSS只能在GDT中定义,不能在LDT和IDT中定义,并且对于 tss.esp0, tss.ss0, tss.ss1, tss.esp1, tss.ss2, tss.esp2 在初始化设置了之后就不能(由CPU)动态更改。那就意味着所有的任务都共用一个TSS。那我就有个疑问:

假设:
A1(ring0),A2(ring0)
B1(ring1),B2(ring1)
C1(ring2),C2(ring2)
D1(ring3),D2(ring3)

TSS的栈指针:
tss.esp0/ss0: stack0
tss.esp1/ss1: stack1
tss.esp2/ss2: stack2

-----------------------------------
那么:

以下的栈切换:

B1 -> A2 : B1自己的堆栈切换至stack0,最后在切换至A2自己的堆栈
C1-> A2  : C1自己的堆栈切换至stack0,最后在切换至A2自己的堆栈

C1 -> B2 : C1自己的堆栈切换至stack1,最后在切换至B2自己的堆栈
D1 -> B2 : D1自己的堆栈切换至stack1,最后在切换至B2自己的堆栈

D1 -> C2 : D1自己的堆栈切换至stack2,最后在切换至C2自己的堆栈

如果按照intel手册上说的,那上面的栈切换都能成功,也就是说,所有的任务转移(涉及到特权级变化,由低到高),在利用TSS切换时都是对应相同的栈(例如转移到0级,都用stack0,不管是那个任务)。

是应该这样理解吗?(我以前一直认为每个任务对应一个TSS,也怕是自己看intel手册的是否翻译错了......)

[ 本帖最后由 ts0612 于 2009-7-14 22:53 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

心安伴我暖 2022-09-25 17:02:49

1、“当前”--- 这个语意
2、TSS 的数量 1 ~ n

窝囊感情。 2022-09-25 17:02:49

说实在的是懒得讲。

看置顶贴子

秋意浓 2022-09-25 17:02:49

原帖由 mik 于 2009-7-15 22:45 发表
说实在的是懒得讲。

看置顶贴子

你懂就说,不懂就哪凉快哪去呆着,不要扯。
当版主得像当版主样。
这个版已经冷到一天没有一个帖了,你当版主还这德性?

潇烟暮雨 2022-09-25 17:02:49

原帖由 beepbug 于 2009-7-16 05:35 发表

你懂就说,不懂就哪凉快哪去呆着,不要扯。
当版主得像当版主样。
这个版已经冷到一天没有一个帖了,你当版主还这德性?

能不能象个爷样?

这么大的怨气,整个怨妇样!

你来申请呀,有人支持你,我一定申请退位给你。咱个爷们,说到做到。

你以版主是啥?

海未深 2022-09-25 17:02:49

谁要做你那样的版主?脑筋正常一点。
门口挂几片臭肉,嘴里只会说:懒得说,他就会扯。这样就算爷们了?
别像在家里和父母说话一样任性,在外面,没人吃你这一套。既然做版主,就得先学会好好说话。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文