操作系统-线程管理

2021-09-24 11:28:26 浏览数 (1)

Hi~朋友,关注置顶防止错过消息

摘要

  1. 线程的概念
  2. 线程和进程的比较
  3. 线程的上下文切换
  4. 线程的实现方式

线程的概念

线程是计算机操作系统的最小调度资源,同一个进程内多个线程可以共享代码段、数据段、打开的文件等资源,但是每个线程都有一套独立的寄存器和栈,这样可以保证线程的控制流是独立的。

线程和进程的比较

线程的优缺点

优点:

  • 一个进程中可以有多个线程
  • 各个线程之间可以并发运行
  • 各个线程之间可以共享地址空间和文件资源

缺点:

  • 当进程中的一个线程崩溃时,会导致其所属进程的所有线程崩溃

线程和进程的区别

  • 进程时资源(包括内存、打开的文件等)分配的单位,线程时CPU调度的单位
  • 进程拥有一个完整的资源平台,线程只独享必不可少的资源,比如寄存器和栈
  • 线程和进程一样同样具有就绪、阻塞、运行三种基本状态
  • 线程能减少并发执行时间和空间开销

为什么线程可以减少开销?

  • 线程创建时间比进程快,线程在创建的过程中不涉及内存、文件等的申请和打开,因为一个进程的所有线程共享一块内存和文件资源
  • 线程的终止时间比进程快,因为线程释放的资源要比进程少
  • 线程的切换比进程快,因为同一个进程多个线程共享内存,因此不需要进行页表的切换,但是对于进程,需要页表切换,页表的切换开销相对较大
  • 统一进程的所有线程共享内存和文件资源,因此在线程之间传递数据时,不需要经过内核,数据交互效率变高

线程的上下文切换

线程在切换时,只需要切换线程私有数据、寄存器等不共享的数据。

线程的实现方式

线程实现方式

  • 用户线程:在用户空间实现的线程,不是由内核管理的线程,是由用户态的线程库来完成线程的管理
  • 内核线程:在内核中实现的线程,是由内核管理的线程
  • 轻量级进程:在内核中支持用户线程

用户线程和内核线程的对应关系

  • 多对一:多个用户线程对应同一个内核线程
  • 一对一:一个用户线程对应一个内核线程
  • 多对多:多个用线程对应到多个内核线程

用户线程

用户线程基于用户的线程库来管理实现,线程控制块(TCB)也在用户的库中实现,操作系统是无法知道TCB的存在的。

用户线程的调度和管理,操作系统无法直接参与,都是需要用户自己实现。

用户线程的优缺点

优点:

  • 每个进程都需要有私有的TCB列表,用来跟踪记录各个线程的状态信息(PC、栈指针、寄存器),TCB由用户自己实现,可用于不支持线程技术的操作系统
  • 用户线程的切换也是用户自己实现,无需用户态和内核态的切换,所以速度较快

缺点:

  • 由于操作系统不参与线程的调度,如果一个线程因发起系统调用阻塞,那么该进程包含的所有线程都无法执行
  • 线程在开始运行后,除非主动让出CPU,否则其他线程无法执行,因为用户态的线程无法打断当前运行中的线程,这种打断特权只有操作系统具备,但用户线程不受操作系统管理
  • 在多线程执行时,每个线程得到的时间片较少,执行较慢,因为时间片的划分是以进程为单位

内核线程

内核线程是由操作系统管理,线程的TCB也是存放在操作系统中。

内核线程的优缺点

优点:

  • 在一个进程中,如果某个内核线程发起系统调用而被阻塞,并不会影响其他内核线程的运行
  • 分配给线程,多线程的进程获得更多的CPU执行时间

缺点:

  • 在支持内核线程的操作系统中,由内核来维护进程和线程的上下文信息,如PCB和TCB
  • 线程的创建、终止和切换都是通过系统调用的方式进行,系统开销较大

轻量级进程

轻量级进程(LWP)是由内核支持的用户线程,一个进程可以有一个多个LWP,每个LWP跟内核线程一一对应。

在轻量级进程之上也是可以使用用户线程的,LWP与用户线程额对应关系有以下三种:

  • 1:1,一个LWP对应一个用户线程
  • N:1,一个LWP对应多个用户线程
  • M:N,多个LWP对应多个用户线程

1:1模式

优点:实现并行,当一个LWP阻塞时,不会影响其他LWP

缺点:每一个用户线程,就会产生一个内核线程,创建线程的开销过大

N:1模式

优点:用户线程多开影响较小,上下文切换发生在用户空间,切换的效率高

缺点:一个用户线程如果阻塞,整个进程都会阻塞,如果是在多核CPU中,无法充分利用CPU

M:N模式

将1:1和N:1的模式进行混搭,首先用户线程对应到多个LWP,LWP再一一对应到内核线程。

优点:结合了前两种模式的优点,并且大部分的线程上下文切换发生在用户空间,且多个线程又可以充分利用CPU的资源。

0 人点赞