内核支持线程和用户级线程

来源:互联网 发布:网络技术培训机构 编辑:程序博客网 时间:2024/06/08 16:05

1、内核支持性线程

  对于通常的进程,无论是系统进程还是用户进程,进程的创建、撤销,以及要求由系统设备完成的i/o操作,都是利用系统调用而进入内核,再由内核中的相应处理程予以完成的。进程的切换同样是在内核的支持下实现的。因此我们说,不论什么进程,它们都是在操作系统内核的支持下运次的,是与内核紧密相关的。

  这种线程实现方式主要有四个优点:

1)、在多处理器系统中,内核能够同时调度同一进程中多个线程并行执行;

2)、如果进程中的一个线程被阻塞了,内核可以调度该进程中的其他线程占用处理器运行,也可以运行其他进程中的线程;

3)、内核支持线程具有很小的数据结构和堆栈,线程的切换比较快,切换开销小;

4)、内核本身也可以采用多线程技术,可以提高系统的执行速度和效率。

缺点:

内核支持线程的主要缺点是:对于用户的线程切换而言,其模式切换开销大,在同一个进程中,从一个线程切换到另一个线程时,需要从用户态转到内核态进行,这是因为用户进程在用户态运行,而线程调度和管理是在内核实现的,系统开销大。


2、用户级线程

用户级线程仅存于用户空间中。对于这种线程的创建、撤销、线程之间的同步与通信等功能,都无须利用系统调用来实现。对于用户级线程的切换,通常发生在一个应用程序的诸多线程之间。由于切换的规则远比进程的调度和切换的规则简单,因此使线程线程的切换速度特备快。可见,这种线程是与内核无关的。

 使用用户级线程方式的优点:

1)、线程的切换不需要装换到内核空间;

2)、调度算法可以是进程专用的;

缺点:

1)、当执行一个系统调用时,不仅该线程被阻塞,而且进程内的所有线程都会被阻塞;

2)、在该线程放弃CPU之前,其他线程只能等待。


3、组合方式

不论是进程还是线程,都必须直接或间接取得内核的支持。由于内核支持线程可以直接利用的系统调用为它服务,故线程的控制相当简单;而用户线程必须借助于某种形式的中间系统的帮助才能取得内核的服务,故在对线程的控制上稍微复杂一些。

实际上,在不同的操作系统中,实现用户级线程于内核控制线程的连接有三种不同的模型:一对一模型、多对一模型、多对多模型。

1)、一对一模型

为每一个用户线程都设置一个内核控制线程与之连接,当一个线程阻塞时,允许调度另一个线程运行。在多处理系统中,则有多个线程并行执行。

2)、多对一模型

该模型是将多个用户线程映射带一个内核控制进程,为了管理方便,这些用户进程一般属于一个进程,运行在该进程的用户空间,才对这些线程的调度和管理也是在该进程的用户空间中完成。当用户线程需要访问内核时,才将其映射到一个内核控制线程上,但每次只允许一个线程进行映射。

3)、多对多模型

将多个用户线程映射到多个内核控制线程,内核控制线程的数目可以根据应用进程和系统的不同而变化,可以比用户线程少,也可以与之相同。