Solaris线程模型详解

来源: 云裂变 2022-12-18 11:02:50 显示全部楼层 |阅读模式
计较机中正在履行的法式称为进程,进程中单一顺序的控制流叫做线程,进程是资本治理的最小单元,线程是法式履行的最小单元。在操纵系统设想上,从进程演变出线程,最首要的目标就是操纵线程同享同一地址空间的特点,更好的支持对称多处置(SMP)以及减小(进程/线程)高低文切换开销。
Solaris是Sun公司开辟和公布的一种现代操纵系统,是UNIX系统的一个重要分支,下面就其内部的线程模子做一些先容和会商。
Solaris线程模子的设想方针:
首要有四个方面:
①.可以描写各类情况下的线程间工作机制
②.支持价格尽能够小的线程
③.既支持单CPU实现,又支持多CPU实现
④.连结对现有UNIX版本的兼容性
Solaris线程模子的实现方式:
线程库的高级内核具有多处置及多线程特征,是以Solaris供给了大量的用户级线程库,其利用了一种两层的线程库模子:在高层是用户线程,而底层则是轻量级进程(LWP)。
LWP实在就是内核线程,是Solaris中实在的可调剂实体。内核只关心LWP,而不关心用户线程。
用户线程由线程库治理,线程库支持用户线程及LWP之间的一到一、多到多、多到一映照,而且用线程库治理用户线程与LWP池之间的映照关系及用户线程的调剂。
Solaris有两种用户线程: 绑定线程(bound threads)和未绑定线程(unbound threads)。一个绑定线程就是用户线程与LWP之间的逐一映照,一个未绑定线程则没有一个牢固对应的LWP。在一个进程中,线程库在LWP池上对用户线程停止调剂。其结构图以下:
对以上两者停止比力,未绑定进程由线程库来实现用户线程获得LWP的调剂,而不需要内核的介入,这类方式的线程高低文切换比力快,而且更节省内核资本,solaris按照一定的战略供给一个LWP池,供上面更多的线程分享。
绑定线程和LWP是一对一关系,是以实时调剂性要好,可是由于内核的加入,比力浪费资本。绑定线程比起非绑定线程的开销要大。由于绑定线程可以改变它地点的LWP的属性,LWP在绑定线程退出后不会被缓存,在新的绑定线程天生时,操纵系统将供给一个新的LWP。仅仅在线程需要只要在地点的LWP内可用的资本时(例如虚拟的按时器大概一个指定的仓库),大概为了实现实时调剂而必须使线程对于内核可见的场所下,才需要利用绑定线程。
Solaris对线程的控制与同步:
内核按照LWP的调剂范例和优先级对它们停止调剂。进程建立时有一个初始LWP被建立,而且继续父进程的调剂范例和优先级。一般来说,绑定的用户线程继续底层的LWP调剂范例和优先级,而未绑定的则继续父进程的调剂范例和优先级。
Solaris内核利用一种争先的基于优先级的调剂机制,高优先级的LWP比低优先级的LWP先履行。Solaris线程库利用优先级对用户线程在LWP池上停止调剂,每次挑选一个LWP履行已经停当的用户线程。假如某LWP因无穷期待而阻塞,线程库则将其对应的用户线程的高低文保存起来,并分拨另一个用户线程到该LWP上履行。线程库凡是建安身够多的LWP,以保证进程不发生”饥饿”。
线程的同步用于同享数据,转换和控制线程履行,保证法式平安。Solaris支持4种线程的同步原语,别离是互斥锁,信号量,多读进程单写进程锁,条件变量。
内核级线程和用户级线程都具有这些原语操纵。一条原语履行时建立一个包括线程信息的数据结构,对每个同步工具只能履行加锁息争锁两项操纵,但内核和线程库没有供给防死锁机制。
总结:
Solaris作为多线程,多进程型的操纵系统,其关于线程实现机制方面一向是业界领先的,领会solaris的多线程实现机制不单可以帮助我们充实了解操纵系统对多线程的控制道理,而且对多线程法式的编写技能的进步也有很大启发。
回复

使用道具 举报

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

云裂变

2
粉丝数
3835
帖子数
商业洽谈 文章投递 寻求报道
电话咨询: 15924191378
关注微信