1 / 6
文档名称:

【Linux的高级应用编程】Linux下的线程实现机制分析.pdf

格式:pdf   页数:6
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

【Linux的高级应用编程】Linux下的线程实现机制分析.pdf

上传人:翩仙妙玉 2012/9/15 文件大小:0 KB

下载得到文件列表

【Linux的高级应用编程】Linux下的线程实现机制分析.pdf

文档介绍

文档介绍:踏雪无痕
【Linux的高级应用编程】Linux下的线程实现机制分析
分类: Linux C++ 2011-11-25 16:55 142人阅读评论(0) 收藏举报
Linux线程实现机制分析
/linux/kernel/l-thread/
 
:线程和进程
 
进程是资源分配和管理的最小单位,线程是程序执行的最小单位。在操作系统设计上,从进程演化出线程,最主要
的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开销。
 
无论按照怎样的分法,一个进程至少需要一个线程作为它的指令执行体,进程管理着资源(比如cpu、内存、文件等
等),而将线程分配到某个cpu上执行。一个进程当然可以拥有多个线程,此时,如果进程运行在SMP机器上,它就
可以同时使用多个cpu来执行各个线程,达到最大程度的并行,以提高效率;同时,即使是在单cpu的机器上,采用
多线程模型来设计程序,使设计更简洁、功能更完备,程序的执行效率也更高,例如采用多个线程响应多个输入,
而此时多线程模型所实现的功能实际上也可以用多进程模型来实现,而与后者相比,线程的上下文切换开销就比进
程要小多了,从语义上来说,同时响应多个输入这样的功能,实际上就是共享了除cpu以外的所有资源的。
 
针对线程模型的两大意义,分别开发出了核心级线程和用户级线程两种线程模型,分类的标准主要是线程的调度者
在核内还是在核外。前者更利于并发使用多处理器的资源,而后者则更多考虑的是上下文切换开销。在目前的商用
系统中,通常都将两者结合起来使用,既提供核心线程以满足smp系统的需要,也支持用线程库的方式在用户态实现
另一套线程机制,此时一个核心线程同时成为多个用户态线程的调度者。
 
在线程机制的具体实现上,可以在操作系统内核上实现线程,也可以在核外实现,后者显然要求核内至少实现了进
程,而前者则一般要求在核内同时也支持进程。核心级线程模型显然要求前者的支持,而用户级线程模型则不一定
基于后者实现。这种差异,正如前所述,是两种分类方式的标准不同带来的。
 
当核内既支持进程也支持线程时,就可以实现线程-进程的"多对多"模型,即一个进程的某个线程由核内调度,而同
时它也可以作为用户级线程池的调度者,选择合适的用户级线程在其空间中运行。这就是前面提到的"混合"线程模
型,既可满足多处理机系统的需要,也可以最大限度的减小调度开销。在核外实现的线程又可以分为"一对一"、"多
对一"两种模型,前者用一个核心进程(也许是轻量进程)对应一个线程,将线程调度等同于进程调度,交给核心完
成,而后者则完全在核外实现多线程,调度也在用户态完成。后者就是前面提到的单纯的用户级线程模型的实现方
式,显然,这种核外的线程调度器实际上只需要完成线程运行栈的切换,调度开销非常小,但同时因为核心信号
(无论是同步的还是异步的)都是以进程为单位的,因而无法定位到线程,所以这种实现方式不能用于多处理器系
统,而这个需求正变得越来越大,因此,在现实中,纯用户级线程的实现,除算法研究目的以外,几乎已经消失
了。
 
Linux内核只提供了轻量进程的支持,目前最流行的线程机制LinuxThreads所采用的就是线程-进程"一对一"模型,
调度交给核心,