ts0612 发表于 2009-07-14 22:48

有关TSS

在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 编辑 ]

mik 发表于 2009-07-15 22:37

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

mik 发表于 2009-07-15 22:45

说实在的是懒得讲。

看置顶贴子

beepbug 发表于 2009-07-16 05:35

原帖由 mik 于 2009-7-15 22:45 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
说实在的是懒得讲。

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

mik 发表于 2009-07-16 13:07

原帖由 beepbug 于 2009-7-16 05:35 发表 http://linux.chinaunix.net/bbs/images/common/back.gif

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

能不能象个爷样?

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

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


你以版主是啥?

beepbug 发表于 2009-07-16 18:27

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