免费注册 查看新帖 |

Chinaunix

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

关于linux中TSS段的问题,请教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-10-13 19:20 |只看该作者 |倒序浏览
linux的实现为单核系统只用一个TSS,这个TSS存储当前进程的内核堆栈地址等。

但在多核系统中,每个CPU仍然使用各自的TSS

那为什么每个cpu都有各自的TSS呢,都用同一个不行吗?

论坛徽章:
0
2 [报告]
发表于 2009-10-13 21:16 |只看该作者
我晕哦,这个问题问得太水了,对不起观众,非常不好意思。

TSS段主要用在当前的进程从用户态切入内核态时去找到该进程的内核堆栈。

多核上的进程是真正的并发,每个核都可以同时运行不同的进程,所以“当前进程”的数量可能达到cpu数量这么多,所以要为每一个“当前进程”准备一个TSS。也就是有几个核就得有几个TSS。

论坛徽章:
0
3 [报告]
发表于 2009-10-13 23:27 |只看该作者
如果只用一个的话就会引起竞争。影响并发

论坛徽章:
0
4 [报告]
发表于 2009-10-14 22:09 |只看该作者
我觉得在多核上还不能归结为竞争产生的效率问题。

如果只用一个TSS,那么这个TSS应该存储哪个进程的内核堆栈地址呢?
多个cpu必然导致多个进程同时运行,而各个进程的切内核栈是相互独立的。
如果只用一个TSS,那么这个TSS如果存的是cpuA上的当前进程内核堆栈地址,那么cpuB上的当前进程如果发生系统调用或中断等需要切入内核栈,那么它的内核栈去哪里找呢?
所以我觉得应该认为是在功能上都不好实现,而不是效率问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP