进程的定义

进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位。

进程控制块PCB

PCB:Process Control Block,又称进程描述符、进程属性,是操作系统用于管理控制进程的一个专门数据结构,是系统感知进程存在的唯一标志。

PCB的内容包括:

  • 进程描述信息
  • 进程控制信息
  • 所拥有的资源和使用情况
  • CPU现场信息

进程状态及状态转换

进程的三种基本状态

  • 运行态(Running):占有CPU,并在CPU上运行
  • 就绪态(Ready):已经具备运行条件,但由于没有空闲CPU,而暂时不能运行
  • 等待态(Waiting/Blocked):因等待某一事件而暂时不能运行(如等待读盘结果,又称为阻塞态、睡眠态)

三状态模型及状态转换

三状态模型

其中,只有就绪态和运行态可以相互转换,其它的都是单向转换。

进程的其它状态

  • 创建:已完成创建一进程所必要的工作,但因为资源有限尚未同意执行该进程
  • 终止:终止执行后,进程进入该状态,回收资源
  • 挂起:用于调节负载,进程不占用内存空间,其进程映像交换到磁盘上

进程的五状态模型

五状态模型

进程队列

操作系统为每一类进程建立一个或多个队列,队列元素为PCB,伴随进程状态的改变,其PCB从一个队列进入另一个队列。以下为五状态进程模型的队列模型:

进程队列

进程控制

进程控制操作完成进程各状态之间的转换,由具有特定功能的原语完成:

  • 进程创建原语
  • 进程撤消原语
  • 阻塞原语
  • 唤醒原语
  • 挂起原语

原语:完成某种特定功能的一段程序,具有不可分割性或不可中断性,即原语的执行必须是连续的,在执行过程中不允许被中断

进程的创建

  • 给新进程分配一个唯一标识以及进程控制块
  • 为进程分配地址空间
  • 初始化进程控制块
  • 设置相应的队列指针(如: 把新进程加到就绪队列链表中)

进程的撤销

  • 收回进程所占有的资源(如:关闭打开的文件、断开网络连接、回收分配的内存)
  • 撤消该进程的PCB

进程阻塞

处于运行状态的进程,在其运行过程中期待某一事件发生,如等待键盘输入、等待磁盘数据传输完成、等待其它进程发送消息,当被等待的事件未发生时,由进程自己执行阻塞原语,使自己由运行态变为阻塞态。

上下文切换

将CPU硬件状态从一个进程换到另一个进程的过程称为上下文切换。

进程运行时,其硬件状态保存在CPU上的寄存器中;进程不运行时,这些寄存器的值保存在进程控制块PCB中;当操作系统要运行一个新的进程时,将PCB中的相关值送到对应的寄存器中。

线程的定义

进程中的一个运行实体,是CPU的调度单位,有时将线程称为轻量级进程。

线程共享所在进程的地址空间和其他资源。

线程机制的实现

用户级线程

在用户空间建立线程库:提供一组管理线程的过程。运行时系统完成线程的管理工作,内核管理的还是进程,不知道线程的存在,线程切换不需要内核态特权。

用户级线程

优点:

  • 线程切换快
  • 调度算法是应用程序特定的
  • 用户级线程可运行在任何操作系统上(只需要实现线程库)

缺点:

  • 大多数系统调用是阻塞的,因此,由于内核阻塞进程,故进程中所有线程也被阻塞

核心级线程

内核管理所有线程管理,并向应用程序提供API接口。内核维护进程和线程的上下文,且线程的切换需要内核支持。

核心级线程

混合模型

线程创建在用户空间完成,线程调度等在核心态完成。

线程与进程的区别

  • 拥有资源:进程是资源分配的最小单位,但是线程不拥有资源,线程可以访问隶属进程的资源。
  • 调度:线程是CPU调度的最小单位,在同一进程中,线程的切换不会引起进程切换,从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。
  • 系统开销:由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O 设备等,所付出的开销远大于创建或撤销线程时的开销。类似地,在进行进程切换时,涉及当前执行进程 CPU 环境的保存及新调度进程 CPU 环境的设置,而线程切换时只需保存和设置少量寄存器内容,开销很小。
  • 通信方面:线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助 IPC。

参考资料