接下来我们讨论内核线程
在刚才的讨论里头呢
用户来实现自己的线程
机制会有好处
但是也有它的不足
那把这件事情挪到内核里头来呢
它会更适合一些
好那这就是内核线程
内核线程是由内核通过
系统调用方式来实现的线程机制
那在这里头呢也就相当于我支持
通过一组系统调用来支持线程的
创建中止和切换
那这是呢这个图呢是很好的
说明了内核线程它的基本原理
也就是说原来我们
在用户线程里头呢
你的线程控制块是在用户态的
由用户应用程序自己来维护
现在把这东西都
挪到内核态里头来了
内核呢
进程控制块里头有指针指向它
自己的相应的线程的线程控制块
好那这样它的创建删除和切换呢
都是在这里头来进行
因为你进程的控制和线程的控制
这实际上很多东西是一样的
那好我把它搁到一起之后
进程的切换就没有了
而所有的切换呢都变成是线程的
那这样的话它把
整个这个问题就统一起来
从而使得严格意义上来讲
进程是资源分配的单位
线程是处理机调度的单位
好那这样的话
用内核线程来实现多线程机制
它的有一些什么样的特征呢
第一个由内核来维护PCB和TCB
好那这样的话
调度的方式会更好一些
好那这时候我们看
它执行系统调用的时候
那也不会堵塞其它线程的正常运行
好那这时候呢相对来讲
线程的创建中止和切换
开销会大一些
因为原来通过函数库方式来实行
同一个进程内部的线程切换
它的速度会快于用内核实现的
同一个进程内的线程切换
那当然它也会有自己的好处是说
我调度的单位就可以变成是线程了
好那这时候呢多线程的进程
它可以获得更多的CPU的时间
当然这个呢
是由你调度算法可以来指定了
好有了内核线程之后
那说SOLARIS一种尝试想
实现更好的轻权进程
在内核支持的用户线程
也就相当于我们刚才讲
用户态线程它的线程机制
它可以更好的做针对应用的调度
好那么这样的话
如果把内核和用户态
这两个线程各自优点
结合起来就是这种方式
一个进程里头有多个轻权进程
每一个轻权进程对应一个内核线程
好再往上的轻权进程内部呢
你可以对应多个用户线程
那这个图呢很好说明了
轻权进程的工作机制
说这是我底下的CPU
然后我在这儿呢
这是我的内核线程
我在这里头呢有这种
这种是永久绑定的线程
那相当于我们是在内核支持线程
因为在用户态跟它相对应的
就只有一个线程
好而在这里头呢
未绑定的轻权进程呢
在这儿呢我有两个轻权进程
上面绑定了三个用户态线程
这样的话它们之间切换呢
可以由你用户态来
给出一些相应的策略
来使得我这个更好
能够提高应用的效率
当然这种做法呢
在最后的实际系统里的
情况呢有些不理想
在SOLARIS早的时候
给出了用户线程
后来给出了内核线程
再把这两个结合到一起
到最后发现说这种机制过于复杂
它所说的优点呢
并没有切实的体现出来
最后变成了
单一的内核线程的支持
好这是我们关于线程机制的
实现机制的讨论
好到这个地方呢
我们就说清楚了
进程和线程的概念
和它的基本实现方法
基于我们前面对
用户线程内核线程
和轻权进程的讨论
那用户线程和内核线程之间呢
存在这样几种相互对应的关系
第一种我们完全
用内核线程来实现
那对于用户态来说呢
它看到的就是内核线程
好那这时候呢
我们实际上可以理解为
用户线程和内核线程
是一一对应的关系
好另一种做法呢是说
我们对内核如果说
只是在一个进程里
只有一个线程的话
那就是我们传统意义上多进程系统
那在这儿呢用户态
你可以实现自己的用户态线程
那这种对应关系呢
可以理解为多对一的情况
而对于SOLARIS的实现办法
轻权进程我们可以理解为
这两者之间的对应关系呢
是可以多对多的
并且这种对应关系呢可以
动态在执行过程中来进行变化
好实际上对于这几种关系呢
对于我们在实际操作系统
当中的使用呢都是有过出现的
那目前呢看下来
最后的结论性的做法呢
是这种做法是比较好的
好到这个地方呢
我们就说清楚了
用户线程内核线程轻权进程
它是如何来实现的
它的基本原理是什么样子
也就是说我们在这里头呢
在一个进程内部它的并发性
我如何可以提高
提高的时候这各种各样的实验办法
它有什么样的优点和缺点
好那到现在为止呢
我们今天讲到的进程线程的
概念呢就介绍完了
好今天的课就上到这里 下课