04 线程、线程的实现及多线程模型

2021-02-12 01:16

阅读:361

标签:aik   成本   计算机   完成   com   http   资源   处理机   level   

线程

60年代,在操作系统中能拥有资源和独立运行的基本单位是进程,然而随着计算机技术的发展,进程出现了很多弊端,一是由于进程是资源拥有者,创建、撤消与切换存在较大的时空开销;二是由于对称多处理机(SMP)出现,可以满足多个运行单位,而多个进程并行开销过大。因此在80年代,出现了线程(Threads)。

线程的特点

在支持多线程的操作系统中,通常是在一个进程中包括多个线程。进程依然是资源分配的基本单位,也是抢占CPU的调度单位,它拥有一个完整的虚拟地址空间。当进程发生调度时,不同的进程拥有不同的虚拟地址空间。线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源、同一地址空间。线程具有以下属性:

轻型实体

线程中的实体基本上不拥有系统资源,只是有一点必不可少的、能保证独立运行的资源。

线程的实体包括程序、数据和TCB。线程是动态概念,它的动态特性由线程控制块TCB(Thread Control Block)描述。

TCB包括以下信息

1 线程状态。

2 当线程不运行时,被保存的现场资源。

3 一组执行堆栈。

4 存放每个线程的局部变量主存区。

5 访问同一个进程中的主存和其它资源。

独立调度和分派的基本单位。

在多线程操作系统中,线程是能独立运行的基本单位,因而也是独立调度和分派的基本单位。由于线程很“轻”,故线程的切换非常迅速且开销小(在同一进程中的)。

可并发执行。

在一个进程中的多个线程之间,可以并发执行,甚至允许在一个进程中所有线程都能并发执行;同样,不同进程中的线程也能并发执行,充分利用和发挥了CPU与外围设备并行工作的能力。

共享进程资源。

在同一进程中的各个线程,都可以共享该进程所拥有的资源,这首先表现在:所有线程都具有相同的地址空间(进程的地址空间),这意味着,线程可以访问该地址空间的每一个虚地址,所以线程之间互相通信不必调用内核。

线程的实现

线程可以细分为两类:用户级线程(User-Level Thread,UTL)和内核级线程(Kernel-Level Thread, KTL),内核级线程又称内核支持的线程。

用户级线程

用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。不需要用户态与核心态间切换,速度快,操作系统内核不知道多线程的存在。由于这里的处理器时间片分配是以进程为基本单位,所以每个线程执行的时间相对减少。

内核级线程

内核级线程指由线程的创建、撤销等操作由操作系统内核完成,所以内核级线程的切换需要在内核态下完成。

多线程模型

在同时支持用户级线程和内核级线程的操作系统中,可以采取二者混组合的方式(操作系统看不到用户级线程,内核级线程才是CUP分配的单位)。

多对一模型

多对一模型将多个用户级线程映射到一个内核级线程,线程管理在用户空间完成。用户级线程对操作系统不可见。

优点:用户级线程的切换在用户空间即可完成,不涉及到用户态与内核态的切换,所以线程管理系统的开销小,效率高。

缺点:当一个用户线程被阻塞后,整个进程都会被阻塞,并发度不高,多个用户线程也并不能将多核CPU上并发执行。

一对一模型

一个用户级线程映射到一个内核级线程。每个用户进程有与用户级线程同数量的内核级线程。

优点:当一个线程被阻塞时,允许另一个线程继续运行,并发能力强。

缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到内核态,因此线程管理的成本高,开销大。

多对多模型

将n个用户级线程映射到m个内核级线程(n>=m)。每个用户级进程对应m个内核级线程。

特点:前两者的折中。克服了多对一模型并发不高的缺点,也克服了一对一模型中一个用户进程占用太多内核级线程、开销大的缺点。

04 线程、线程的实现及多线程模型

标签:aik   成本   计算机   完成   com   http   资源   处理机   level   

原文地址:https://www.cnblogs.com/shudazhaofeng/p/14394171.html


评论


亲,登录后才可以留言!