Linux进程的同步和管理,LinuxThread跟NPTL总结

实现都是1*1模型,都应用了clone()系统调用,但ps出来的结果不同(最简单的,还有其它诸多不同),内核到底在这里做出了哪些改变?

百度了半天没有找到结果,都是一句NPTL要求了内核特殊支持带过,到底内核原来的处理跟现在的处理有什么不同却没有说明,让人很烦躁。下面把我看到的只言片语连总结带猜输出如下,不对之处请大家指正。

LinuxThread,

内核根本没有任何的线程的概信念。线程间共享进程的各种资源使用clone()系统调用,线程的信号处理及线程内同步都是基于用户的管理线程来完成,因为线程间的内存映射都一样,所有进程内的所有线程只能使用同一个sighandler,但线程在内核是不同的进程,所以可以为不同的线程设置不同的sigmask。同步都基于信号来实现,所以线程间的同步效率并不比进程间的同步效率高反而更低。因为内核里面跟本没有线程的概念,这些都是通过创建第一个线程是同步创建的管理线程来实现的。在这个管理线程内部维护了用户线程到内核进程的映射,所有pthread的API都是通过管理线程转化到内核进程来模拟实现。所以pthread之外的API,如getpid(),表现出跟POSIX线程标准不一样的特性。

NPTL,

线程间共享进程的各种资源仍然使用clone()系统调用。另外,如为了管理进程组有了会话期的管理数据结构,为了管理进程有了进程组的管理数据结构,那么为了支持NPTL,内核引入了线程组的概念,既同同一个进程的线程都属于同一线程组,就是说内核较之前增加了线程这一层的管理数据结构,所以在内核线程的概念是真实的存在着。但是对于调度,内核仍然把不同的线程视为不同进程来调度,或者,也可以这样理解,现在的内核就是以线程做为调度的单元了。对于线程的信号处理,内核有了线程组的概念所以可以做到完全遵循POSIX标准。而线程的同步提供了新的同步原语futex, 当然futex也可以用到进程间的同步去。

欢迎大家补充与指正以达抛砖引玉的效果, ^_^

|

Warning: LinuxThreads is outdated since 2006.1 as NPTL is the only alternative with 2006.1 and later

http://people.redhat.com/drepper/nptl-design.pdf

|

nptl: Native Posix Thread Lib

楼主看看这篇文章

http://www.ibm.com/developerworks/cn/linux/l-threading.html

|

don't know,no idea,follow you,study...

|

留下脚印学习。

|

Good!

Recommend! Up~

|

不错啊,留下脚印学习一番.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值