计算机操作系统--内核级线程和用户级线程

在不同的操作系统,线程的实现方式是不一样的

OS/2,Windows实现的内核级线程;而很多数据库管理系统实现的是用户级线程;还有Solaris实现两种类型的线程

用户级线程:

计算机操作系统--内核级线程和用户级线程_第1张图片

内核级线程:

 计算机操作系统--内核级线程和用户级线程_第2张图片

内核:其实就是最靠近硬件一层的代码

用户级线程特点:线程库适用于管理用户级线程的软件包,是供所有应用程序共享的应用既实用程序,里面包含线程各种操作的代码,不同的应用程序利用线程库设计多线程程序

1.用户级线程的创建,撤销,以及切换都不利用系统调用,这种线程与内核无关,内核不知道这种线程的存在

2.用户级线程的调度由其所属的进程进行调度,内核只负责对进程的调度

3.线程切换不需要系统状态的转换,也就不需要系统调用,会减少用户态<-->和心态转换的时空开销

4.每个进程可以使用本进程专用的线程调度算法来调度线程

5.用户级线程可以在任何操作系统中运行

6.当用户级线程调用一个系统调用时,系统会认为是线程所在进程的行为,因此进程会被阻塞,进程内所有线程都不能执行

7.不能利用多处理机技术,因为内核一次只把一个进程分配给一个处理机,也就是说无法做到真正的并行(可以用多进程技术)

 

内核级线程特点:

1.应用程序要使用内核线程,需要通过内核提供的API,也就是说需要进行系统调用(速度慢)

2.系统调度的单位不再是进程,而是线程

3.系统内核知道线程属于哪个进程,但是不需要考虑线程属于哪个进程,进程只作为系统资源的拥有者

4.可以并行运行同一个进程的不同线程,也可以运行不同进程的不同线程,但是前者开销更小(可以利用多处理机技术)

5.线程切换需要更大的开销(但不代表综合所用时间会更长,需要具体情况分析,比如一个应用程序大多都是系统调用)

6.内核级线程阻塞不会影响到其所属的进程

 

同时实现两种线程:Solaris系统

1.需要引入一个新的概念:轻型进程(LWP)

2.轻型进程拥有自己的PCB

3.用户级线程可能会有很多,但是LWP却不多,用户线程要进行系统调用需要通过LWP这个中介与内核线程连接

4.用户级线程:LWP=n:1                  LWP:内核级线程=1:1

5.当一个用户级线程阻塞时,则与之相连的LWP也阻塞,随后与这个LWP的所有用户级线程(用户线程只连接了这个LWP的话) 都将无法访问内核,但是依旧可以运行

计算机操作系统--内核级线程和用户级线程_第3张图片

你可能感兴趣的:(计算机操作系统,计算机操作系统,线程)