进程的定义
进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位。
进程控制块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。
参考资料
- Tanenbaum A S, Bos H. Modern operating systems[M]. Prentice Hall Press, 2014.
- 北京大学操作系统原理(Operating Systems)
- 计算机操作系统