操作系统——线程

一、进程与线程的对比

  • 进程的两个特性:分配资源(内存,分配设备,文件等),被调度执行(CPU时间片)。
  • 进程:分配资源和抢占CPU的单位,不频繁地进行切换。进程的资源及地址空间供其所有线程共享。
  • 线程:被调度运行的单位不拥有资源,可频繁调度切换,轻装运行。也称为轻量级进程LWP。(线程是一个进程内部的基本调度单位。一个进程可派生多个线程,线程间并发运行。)

1.1  线程≠子进程

  • 多个线程共享空间(内存,文件等),通信快
  • 子进程空间各自独立,通行时需借助于IPC机制(进程间通信,如消息,管道,信号,共享内存区等),通信慢

二、线程

2.1 线程的功能——线程的三种状态

  • 线程基本状态:运行态,就绪态,阻塞态。
  • 挂起/终止一个进程会导致其所有线程被同时挂起/终止。
  • 与进程类似,多个线程并发执行可以提高系统效率,但需要线程间的同步互斥。

2.2线程的分类

线程可分为两类:

  • 用户级线程(User-Level Thread,ULT)
  • 内核级线程(Kernel-Level Thread,KLT),也称为内核支持的线程,轻量级进程。
  • Solaris既支持ULT也支持KLT(混合方法)

2.2.1用户级线程(User-Level Thread,ULT)

    用户级线程的创建,撤销和切换与OS内核无关,由用户空间中的线程库完成。OS内核并不知道用户级线程的存在,进程自己管理自己各自的线程

  • 内核为进程分配CPU,进程调度其某个ULT运行。
  • 当一个进程的一个线程提出I/O而阻塞时,该进程会被阻塞,可线程依旧是运行态(为了方便内部调度,阻塞态可用于同步互斥。)

用户级线程的优点:

  • 一个进程中的ULT切换时,不需要切换到系统态。
  • 进程自己决定如何调度线程,更加灵活。
  • 只要有线程库,用户级线程可以在任何OS上运行,而不需要修改底层OS内核代码。

用户级线程的缺点:

  • ULT提出阻塞式系统调用时,将阻塞所属进程。
  • ULT对OS不可见,COU分配以进程为单位,因此不能利用多CPU架构。

2.2.内核级线程

    内核级线程的创建、撤销、切换及同步互斥由OS内核完成,OS通过TCB控制内核级线程。

    对内核级线程的管理类似于进程。

内核级线程的优点:

  • 可以同时把一个进程该多个KLT调度到多个CPU上。发挥多CPU架构的优势。
  • 一个KLT阻塞时,OS可调度该进程的另一个KLT。

内核级线程的缺点:

  • 在调度KLT时,需要CPU切换到系统态,开销大。

用户级进程和内核级进程的比较


猜你喜欢

转载自blog.csdn.net/weixin_39793360/article/details/80640992