Linux下线程为什么不是系统调用,而是做成 Pthread库提供实现?

系统调用是用户空间访问内核的唯一接口,除开异常和陷入。
应用程序是不能直接访问内核内存空间和调用内核函数的。要从应用空间陷入到内核空间,一般通过中断。中断分为软中断和硬件中断,软中断在X86的机器上是通过int $0x80指令调用的,通过该指令陷入到内核,根据内核维护的中断向量表找到对应的中断处理程序。
那么为什么线程不做成系统调用呢?
首先在Linux诞生的时候还没有线程的概念,(LINUX是在1991诞生的)。随着多核CPU的诞生,多线程能充分发挥多核CPU的优势。但是修改操作系统去支持线程是一个很大的工程,所以线程的作者采用了库函数来实现线程。但是采用库函数实现线程的话,只是模拟了线程,并没有完全实现线程的理论。比如线程不能分配到多核上,在内核看来只是一个进程。还有管理,调度之类都很麻烦。在这个场景下,IBM 启动了NGTP(Next Generation POSIX Threads)项目,以及红帽 Redhat 公司的NPTL。IBM的项目在2003年就解散了。。,大家转到了NPTL,当然这个项目是成功的。实现的方式是采用clone实现了轻量级进程,同时是内核上加入若干的机制去保证和posix的行为一致。采用NPTL的方式的产生的线程是内核级线程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值