跳至主要內容

1.进程与线程


进程的概念和特征

进程的概念

在多道程序环境下,允许多个程序并发执行,此时它们将失去封闭性,并具有间断性及不可再现性的特征。为此引入了进程(Process)的概念,以便更好地描述和控制程序的并发执行,实现操作系统的并发性和共享性(最基本的两个特性)

为了使参与并发执行的每个程序(含数据)都能独立地运行,必须为之配置一个专门的数据结构,称为进程控制块(Process Control Block,PCB)。由程序段、相关数据段、PCB三部分构成进程实体(又称进程映像),PCB是进程存在的唯一标志

提示

进程是系统进行资源分配和调度的一个独立单位。

进程的特征

进程的状态与转换

image.png
image.png

注意

一个进程从运行态变成阻塞态是主动的行为,而从阻塞态变成就绪态是被动的行为,需要其他相关进程的协助。

进程的组成

进程控制块

进程创建时,操作系统为它新建一个PCB,该结构之后常驻内存,任意时刻都可以存取,并在进程结束时删除。


PCB通常包含的内容

进程描述信息进程控制和管理信息资源分配清单处理机相关信息
进程标识符 (PID)进程当前状态代码段指针通用寄存器值
用户标识符 (UID)进程优先级数据段指针地址寄存器值
代码运行入口地址堆栈段指针
程序的外存地址文件描述符
进入内存时间键盘
处理机占用时间鼠标
信号量使用

程序段

程序段就是能被进程调度程序调度到CPU执行的程序代码段。注意,程序可被多个进程共享,即多个进程可以运行同一个程序。

数据段

一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果。

进程的控制

  1. 进程的创建
  2. 进程的终止
  3. 进程的阻塞和唤醒

进程的通信

PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方法主要有以下三类。

共享存储

在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现
进程之间的信息交换。在对共享空间进行写/读操作时,需要使用同步互斥工具(如P操作、V操作),对共享空间的写/读进行控制。共享存储又分为两种:低级方式的共享是基于数据结构的共享:高级方式的共享则是基于存储区的共享。

消息传递

进程通过系统提供的发送消息和接收消息两个原语进行数据交换。

  1. 直接通信方式。发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息
  2. 间接通信方式。发送进程把消息发送到某个中间实体,接收进程从中间实体取得消息。这种中间实体一般称为信箱。该通信方式广泛应用于计算机网络中。

管道通信

管道通信允许两个进程按生产者-消费者方式进行通信,生产者向管道的一端写,消费者从管道的另一端读。数据在管道中是先进先出的。管道机制必须提供三方面的协调能力:互斥、同步和确定对方的存在。

image.png
image.png

注意

  1. 从管道读数据是一次性操作,数据一旦被读取,就释放空间以便写更多数据。普通管道只允许单向通信,若要实现父子进程双向通信,则需要定义两个管道。
  2. 管道的数据一旦读出即消失,因此只能有一个读进程。但是写进程可有多个。

线程与多线程模型

线程的基本概念

传统的进程只能串行执行一系列程序,而有的进程需要同时处理很多事,所以进入线程,增加并发度。

提示

线程是进程中的一个实体,是被系统独立调度和分派的基本单位线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。

线程的属性

  1. 线程是处理机调度的单位
  2. 多CPU计算机中,各个线程可以占用不用的CPU
  3. 每个线程都有一个线程ID、线程控制块(TCB)
  4. 线程也有就绪、阻塞、运行三种基本状态
  5. 线程几乎不拥有系统资源
  6. 同一进程的不同线程间共享进程的资源
  7. 由于共享内存地址空间同一进程中的线程间通信甚至无需系统干预
  8. 同一进程中的线程切换,不会引起进程切换,不同进程中的线程切换,会引起进程切换
  9. 切换同进程内的线程,系统开销很小,切换进程系统开销大

线程的实现方式

用户级线程

早期的操作系统(如:早期Unix)只支持进程,不支持线程。当时的“线程”是由线程库实现的

image.png
image.png

用户级线程的优缺点

  1. 优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高
  2. 缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行。

内核级线程

image.png
image.png

内核级线程的优缺点

  1. 优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。
  2. 缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。

组合方式

多线程模型

  1. 多对一模型,多个用户级线程映射到一个内核级线程[1]
  2. 一对一模型,每个用户级线程映射到一个内核级线程[2]
  3. 多对多模型

  1. 类似于用户级线程,优缺点也和用户级线程类似 ↩︎

  2. 类似于内核级线程,优缺点也和内核级线程类似 ↩︎