有关TSS的问题
本帖最后由 tomkedy 于 2011-06-01 23:04 编辑
在看ULK3(中文)里“进程“一章。开始感觉TSS应该是所有进程共享一个TSS,但到后面发现似乎跟我之前的理解不太一样。尤其是:第109页,第4段里的“......因为Linux为每个处理器而不是为每个进程使用TSS”。
各位,在Linux里,TSS的使用到底是怎样的?可以的话,举个简单的进程切换例子说明一下..........
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
回复 1# tomkedy
顶
每个处理器一个TSS段,切换进程时把TSS里的esp0改成新进程的内核栈底所处的位置。
楼上,你的意思是在linux里,所有进程都共享同一个TSS段,但在切换进程时,该共享的TSS的内容会被修改成“即将运行的进程“的相关内容(比如:esp0的修改)。是这样吗?
回复 4# tomkedy
应该是一个核心用一个TSS,每个核心都有一个tr寄存器。TSS段里还有表IO权限的信息,进程切换时也有可能会修改这些。
本帖最后由 tomkedy 于 2011-06-02 13:40 编辑
楼上,不太明白你说的“一个核心用一个TSS,每个核心都有一个tr寄存器“......
我的理解是比如在i386里,有一个专门装载TSS的寄存器tr,它跟gdtr,ldtr是一样的,是用于装载TSS结构体的。这个tr理所当然的是共享的,因为整个CPU只有这一个tr寄存器。但TSS段是否是所有进程共享的呢?我不太清楚。
因此我想搞清楚,“在linux里,所有进程都共享同一个TSS段,但在切换进程时,该共享的TSS的内容会被修改成“即将运行的进程“的相关内容(比如:esp0的修改)“,是不是这样的?
回复 6# tomkedy
多核CPU时,每个核心都有这些寄存器。在一个核心上运行的进程共用一个TSS段。