免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: chenzhanyiczy
打印 上一主题 下一主题

难题:内核线程讨论 [复制链接]

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
41 [报告]
发表于 2009-02-13 00:03 |只看该作者
原帖由 system888net 于 2009-2-12 23:59 发表


建议可以考虑这样测试(仅举例子,可以变化):
           0. 第一个进程p0
           1. p0 fork()一个进程 p1
           2. p0和p1的user thread都退出。
           3. p1的进程退出.
           4. ...



没理解明白,

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
42 [报告]
发表于 2009-02-13 00:04 |只看该作者
原帖由 system888net 于 2009-2-13 00:00 发表



版本的差异?



不知道,不跟先不管这个先,1:1能解释清楚的话,那么n:1也是可以的,呵呵

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
43 [报告]
发表于 2009-02-13 10:12 |只看该作者
最新进展,请结合14的信息

下面是14楼的部分信息:

10个用户态线程(pthread_create创建的)都运行完后(线程都是正确的退出),主线程sleep()一段时间,在ps -emo THREAD | grep test3,如下,下面的线程都是内核线程:

  bssdev 934214 926102        - A  99  60 11        *   200001  pts/3   - test3
       -      -      -  1089551 S   0  60  1 f100070f10010a40  8c10400      -   - -
       -      -      -  1183781 S   0  60  1 f100070f10012140  8c10400      -   - -
       -      -      -  1188093 S   0  60  1 f100070f10012240  8c10400      -   - -
       -      -      -  1216909 S   0  60  1 f100070f10812940  8c10400      -   - -
       -      -      -  1229139 R  99 109  0        -   400010      -   - -
       -      -      -  1290729 S   0  60  1 f100070f10813b40  8c10400      -   - -
       -      -      -  1139453 S   0  60  1 f100070f11011640  8c10400      -   - -
       -      -      -  1159737 S   0  60  1 f100070f11011b40  8c10400      -   - -
       -      -      -  1249867 S   0  60  1        -  2400400      -   - -
       -      -      -  1127371 S   0  60  1 f100070f11811340  8c10400      -   - -
       -      -      -  1344427 S   0  60  1 f100070f11814840  8c10400      -   - -
       -      -      -  1352545 S   0  60  1 f100070f11814a40  8c10400      -   - -


接着,监视了一下线程的状态(对应上面的信息),监视信息如下:

1089551   flags = PR_ASLEEP | PR_NOREGS                  
1183781  flags = PR_ASLEEP | PR_NOREGS   
1188093  flags = PR_ASLEEP | PR_NOREGS   
1216909   flags = PR_ASLEEP | PR_NOREGS   
1229139  flags = PR_NOREGS         
1290729   flags = PR_ASLEEP | PR_NOREGS   
1139453  flags = PR_ASLEEP | PR_NOREGS   
1159737  flags = PR_ASLEEP | PR_NOREGS   
1249867  flags = PR_ASLEEP | PR_NOREGS   
1127371  flags = PR_ASLEEP | PR_NOREGS   
1344427  flags = PR_ASLEEP | PR_NOREGS   
1352545   flags = PR_ASLEEP | PR_NOREGS


这里flags指的是内核线程的状态, 结合 man proc,可以看到

PR_ASLEEP 的意思是:Thread is in an interruptible sleep within a system call
中文的翻译:PR_ASLEEP 该线程是系统调用的可中断休眠中的LWP。

所以可以看出,内核线程确实是sleep了,而不是退出了,但这是怎样造成的呢? 不理解上面的PR_ASLEEP 的意思

论坛徽章:
0
44 [报告]
发表于 2009-02-13 11:18 |只看该作者
AIX(Advanced Interactive eXecutive)是IBM开发的一套UNIX操作系统.
楼主应该去找找aix相关内核知识,
虽然大家都是叫pthread_create,但这只是posix的一个标准,windows/linux/unix在内核层的实现肯定不一样,绝不能以linux的知识来推测unix.

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
45 [报告]
发表于 2009-02-13 16:55 |只看该作者
看到上面最新的进展,system888net 兄 有什么想法没?

论坛徽章:
0
46 [报告]
发表于 2009-02-13 17:55 |只看该作者

回复 #14 chenzhanyiczy 的帖子

个人觉得这个和内核的线程机制有关。在一些unix 系统之,比如solaris中,每个用户线程可能由多个内核线程lwp来提供服务(solaris内核结构这本书上好像有具体描述),可能aix和solaris的线程实现差不多吧,没具体研究过。
但是linux中的内核线程视乎和某一个具体的线程关系不大。linux创建用户线程和创建内核线程都有同一的接口。只是内核线程没有用户空间。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
47 [报告]
发表于 2009-02-13 18:34 |只看该作者
在 aix 试验中,一个用户线程是对应一个内核线程的即lwp。

只是现在问题是 :用户线程销毁时,对应的内核线程还保留着,原因是什么?

论坛徽章:
0
48 [报告]
发表于 2009-02-13 20:03 |只看该作者
原帖由 chenzhanyiczy 于 2009-2-13 10:12 发表
最新进展,请结合14的信息

下面是14楼的部分信息:

10个用户态线程(pthread_create创建的)都运行完后(线程都是正确的退出),主线程sleep()一段时间,在ps -emo THREAD | grep test3,如下,下面的线程都是 ...


好.

能贴一下lwpctl, lwpsinfo,lwpstatus的内容吗?

[ 本帖最后由 system888net 于 2009-2-13 20:07 编辑 ]

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
49 [报告]
发表于 2009-02-13 21:26 |只看该作者
lwpctl, lwpsinfo,lwpstatus

怎样看其中的内容? 我不会,没找到什么方法查看这些内存里面的信息

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
50 [报告]
发表于 2009-02-13 21:26 |只看该作者
lwpstatus 中的flag是可以查看的,用procflags ,如43楼所示
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP