免费注册 查看新帖 |

Chinaunix

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

[内核入门] Linux的线程库为什么是放在glibc中来实现? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-15 18:05 |只看该作者 |倒序浏览
最近开始接触多线程,用到pthread系列函数,有个疑问,进程、线程这一类东西应该是内核提供的基本功能,为什么线程库放在glibc中来实现呢?求解,谢谢

另外好奇问一下,还有没有哪些模块本来是应该有内核提供的,但是目前是放在glib库中实现的?

论坛徽章:
0
2 [报告]
发表于 2013-09-16 09:15 |只看该作者
本帖最后由 我爱芒果叶 于 2013-09-16 09:16 编辑

线程的实现有user level thread,kernel-level thread和两者结合的方式。Linux的实现了kernel-level thread,共享进程地址空间的进程相当于线程。
PThread是user level thread,内核根本不了解其线程的存在,不会对其中的线程进行调度,更不会对其进行代码实现。

论坛徽章:
1
水瓶座
日期:2013-09-28 21:40:25
3 [报告]
发表于 2013-09-16 22:50 |只看该作者
前一句是对的,后一句是错的
回复 2# 我爱芒果叶


   

论坛徽章:
0
4 [报告]
发表于 2013-09-17 08:44 |只看该作者
本帖最后由 我爱芒果叶 于 2013-09-17 08:59 编辑

回复 3# bensenq


感谢指出,不过我觉得也没全错吧。
百度了下,PThread中线程创建使用了clone,那么内核就会知道其存在,就会对其中的线程进行调度了。
如果有不对,请不吝赐教,谢谢。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
5 [报告]
发表于 2013-09-17 10:48 |只看该作者
回复 4# 我爱芒果叶
感谢指出,不过我觉得也没全错吧。
百度了下,PThread中线程创建使用了clone,那么内核就会知道其存在,就会对其中的线程进行调度了。
如果有不对,请不吝赐教,谢谢。


不要把这个概念跟操作系统上的概念想比较,这两个含义有很大的区别。linux下调度是基于线程,其实也是进程,因为linux内核不会单独区分线程和进程。
   

论坛徽章:
0
6 [报告]
发表于 2013-09-17 18:03 来自手机 |只看该作者
多线程可以在用户态实现或者内核态实现,但linux

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
7 [报告]
发表于 2013-09-18 16:05 |只看该作者
本帖最后由 arm-linux-gcc 于 2013-09-18 16:09 编辑

内核调度是基于线程的,调度器并不知道那几个线程是属于哪个进程的,系统中所有线程的id都是唯一的。

getpid,得到的task_struct中的tgid字段
gettid,得到的是task_struct中的pid字段

内核是直接支持了线程的,可以看一下glibc的代码,NPTL的,pthread_create时的那些参数,都是直接传给了内核的,所以线程的实现是内核搞定的
所谓的线程是在库中实现那个是老的linuxthread,已经淘汰了。

所以内核原生态的就支持了线程

pthread_create
  sys_clone
    do_fork
fork
  sys_fork
    do_fork
这两个最后都调用到了do_fork,sys_clone的参数有CLONE_THREAD,而sys_fork则没有传递这个flag,do_fork就是依靠这个flag来判断是要创建新的线程还是进程的


glibc中有两套线程实现,nptl和linuxthread,现在都用的前者,看下代码就知道区别了。

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP