Linux 线程实现机制分析
日期:2008年2月24日 作者: 查看:[大字体 中字体 小字体]-
这段代码表明,目前的Linux内核仅在pid为0的时候认可CLONE_PID参数,实际上,仅在SMP初始化,手工创建进程的时候才会使用CLONE_PID参数。
按照POSIX定义,同一进程的所有线程应该共享一个进程id和父进程id,这在目前的"一对一"模型下是无法实现的。2)信号处理问题
由于异步信号是内核以进程为单位分发的,而LinuxThreads的每个线程对内核来说都是一个进程,且没有实现"线程组",因此,某些语义不符合POSIX标准,比如没有实现向进程中所有线程发送信号,README对此作了说明。
如果核心不提供实时信号,LinuxThreads将使用SIGUSR1和SIGUSR2作为内部使用的restart和cancel信号,这样应用程序就不能使用这两个原本为用户保留的信号了。在Linux kernel 2.1.60以后的版本都支持扩展的实时信号(从_SIGRTMIN到_SIGRTMAX),因此不存在这个问题。
某些信号的缺省动作难以在现行体系上实现,比如SIGSTOP和SIGCONT,LinuxThreads只能将一个线程挂起,而无法挂起整个进程。3)线程总数问题
LinuxThreads将每个进程的线程最大数目定义为1024,但实际上这个数值还受到整个系统的总进程数限制,这又是由于线程其实是核心进程。
在kernel 2.4.x中,采用一套全新的总进程数计算方法,使得总进程数基本上仅受限于物理内存的大小,计算公式在kernel/fork.c的fork_init()函数中:max_threads = mempages / (THREAD_SIZE/PAGE_SIZE) / 8在i386上,THREAD_SIZE=2*PAGE_SIZE,PAGE_SIZE=2^12(4KB),mempages=物理内存大小
/PAGE_SIZE,对于256M的内存的机器,mempages=256*2^20/2^12=256*2^8,此时最大线程数为4096。
但为了保证每个用户(除了root)的进程总数不至于占用一半以上物理内存,fork_init()中继续指定:
init_task.rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
init_task.rlim[RLIMIT_NPROC].rlim_max = max_threads/2;这些进程数目的检查都在do_fork()中进行,因此,对于LinuxThreads来说,线程总数同时受这三个因素的限制。
4)管理线程问题
管理线程容易成为瓶颈,这是这种结构的通病;同时,管理线程又负责用户线程的清理工作,因此,尽管管理线程已经屏蔽了大部分的信号,但一旦管理线程死亡,用户线程就不得不手工清理了,而且用户线程并不知道管理线程的状态,之后的线程创建等请求将无人处理。
5)同步问题
LinuxThreads中的线程同步很大程度上是建立在信号基础上的,这种通过内核复杂的信号处理机制的同步方式,效率一直是个问题。
6)其他POSIX兼容性问题
Linux中很多系统调用,按照语义都是与进程相关的,比如nice、setuid、setrlimit等,在目前的LinuxThreads中,这些调用都仅仅影响调用者线程。
7)实时性问题
线程的引入有一定的实时性考虑,但LinuxThreads暂时不支持,比如调度选项,目前还没有实现。不仅LinuxThreads如此,标准的Linux在实时性上考虑都很少。
四.其他的线程实现机制
- 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页
-
- Linux 线程实现机制分析 相关文章:
- ·无线攻防:破解WEP密钥过程全解
- ·ZXDSL 531B 无线ADSL路由器
- ·三国群雄传之卧龙与凤雏 支线任务 - 游戏攻略
- ·综合布线系统工程设计参考大全
- ·宽带共享该怎样设置无线路由器
- ·天龙八部 极恶路线攻略 - 游戏攻略
- ·无线网络攻防实战:WEP密钥如何被攻破的
- ·谁知道现在无线上网 费用怎么收
- ·自己制造无线网络增益天线
- ·28个免费在线电影网站
- Linux 线程实现机制分析 相关软件
- ·重返狼穴III:越南视线 Line of Sight: Vietnam 简体中文版
- ·赤色战线2
- ·微软正版认证离线安装包 build 2006.12.24 第二版
- ·QQ在线查看器 V1.8
- ·重返狼穴3:越南视线
- ·近距离作战3俄国前线
- ·马赫5无线上网加速 V5.0
- ·无线上网加速器 V2.3
- ·危机最前线2
- ·二战风云:前线指挥官
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
下一篇:菜鸟手记:初次感受Linux
精品推荐
热点TOP10
- ·什么是MIS
- ·Vi命令一览表
- ·Linux操作系统介绍
- ·BIOS知识大全
- ·Linux学习手册
- ·Linux操作系统源代码详细分析
- ·VIA-威盛南桥集成AC97声卡驱动安装指南
- ·Linux From Scratch安装学习笔记
- ·RPM命令大全
- ·linux知识大全
- ·常见端口表汇总
- ·Linux 线程实现机制分析
- ·最新linux iso光盘下载点
- ·Linux发行版图标大全
- ·万能声卡驱动(Alsa)的安装方法
- ·LINUX 常见问题1000个详细解答
- ·Linux/Unix环境下的make命令详解
- ·仅仅查看IP地址
- ·JFFS2 文件系统及新特性介绍
- ·Linux管理工具介绍
特别推荐
- ·Linux企业安全管理中的应用
- ·Linux 线程实现机制分析
- ·Linux内核安全的入侵侦察系统
- ·Linux中QQ的配置
- ·Linux下的后门和常见日志工具
- ·BIOS知识大全
- ·如何编写Linux设备驱动程序
- ·Linux管理工具介绍
- ·Linux操作系统源代码详细分析
- ·Linux下用pptp连接VPN服务器
- ·在linux7.1上安装jdk+tomcat+oracle9i笔记
- ·Linux学习手册
- ·学习Linux的八点忠告
- ·深入分析Linux防火墙
- ·UNIX系统后门的安放和日志的擦除
- ·揭开Expect的神秘面纱
- ·万能声卡驱动(Alsa)的安装方法
- ·长篇连载--arm linux演艺---序
- ·为CanonPIXMAiP1000喷墨打印机安装驱动程序
- ·详细讲解Linux系统下ADSL拨号上网方法
