1、进程
进程是指一个具有一定独立功能
的程序在一个数据集合
上的一次动态执行
过程。
1.1 概念:
进程的组成:
进程包含了正在运行的一个程序的所有状态信息
。
- 代码
- 数据
- 状态寄存器
- CPU状态CR0、指令指针IP
- 通用寄存器
- AX、BX、CX …
- 进程占用系统资源
- 打开文件、已分配内存 …
进程的特点:
- 动态性
- 可以动态地创建、结束进程
- 并发性
- 进程可以被独立调度并占用处理器运行
- 独立性
- 不同进程的工作不相互影响
- 制约性
- 因访问共享数据/资源或进程间同步而产生制约
1.2 进程控制块(PCB):
进程控制块是操作系统管理控制进程运行所用的信息集合
。
作用:
- 操作系统用PCB来描述进程的
基本情况
以及运行变化
的过程; - PCB是进程存在的
唯一标志
;- 每个进程在操作系统中有一个对应的PCB
组成:
- 进程标识信息
- 处理器现场保存
- 进程控制信息
- 调度和状态信息(调度进程和处理器使用情况)
- 进程间通信信息(进程间通信相关的各种标识)
- 存储管理信息(进程映像存储空间数据结构)
- 进程所用资源(进程使用的系统资源,如打开文件等)
- 有关数据结构连接信息(与PCB线管的进程队列)
1.3 进程的生命周期划分
- 进程创建
- 进程执行
- 进程等待
- 进程抢占
- 进程唤醒
- 进程结束
1.4 三状态进程模型:
进程在整个生命周期分为三种基本状态:
- 运行
- 就绪(进程获得除CPU之外的所需资源,得到CPU即可运行)
- 等待(进程正在等待某一事件的出现而暂停运行)
NULL -> 创建 -> 就绪 -> 运行 -> 结束
运行 -> 就绪:处于运行状态的进程在其运行过程中,由于分配给它的处理器时间片用完而让出处理器
运行 -> 等待:当进程请求某资源而必须等待
等待 -> 运行:当进程等待某事件到来时,它从阻塞状态变到就绪状态
1.5 挂起进程模型:
处于挂起状态的进程映像在磁盘
上,目的是减少进程占用内存
。
在此类系统中,进程增加了两个新状态:
- 挂起就绪态(ready,suspend)
挂起就绪态表明了进程具备运行条件
但目前在二级存储器
中,只有当它被对换到主存才能被调度执行 - 挂起等待态(blocked,suspend)挂起等待态则表明了进程正在
等待某一个事件
且在二级存储器
中。
引起进程状态转换的具体原因如下:
- 等待态—→挂起等待态:如果当前不存在就绪进程,那么至少有一个等待态进程将被对换出去成为挂起等待态;操作系统根据当前资源状况和性能要求,可以决定把等待态进程对换出去成为挂起等待态。
- 挂起等待态—→挂起就绪态:引起进程等待的事件发生之后,相应的挂起等待态进程将转换为挂起就绪态。
- 挂起就绪态—→就绪态:当内存中没有就绪态进程,或者挂起就绪态进程具有比就绪态进程更高的优先级,系统将把挂起就绪态进程转换成就绪态。
- 就绪态—→挂起就绪态:操作系统根据当前资源状况和性能要求,也可以决定把就绪态进程对换出去成为挂起就绪态。
- 挂起等待态—→等待态:当一个进程等待一个事件时,原则上不需要把它调入内存。但是在下面一种情况下,这一状态变化是可能的。当一个进程退出后,主存已经有了一大块自由空间,而某个挂起等待态进程具有较高的优先级并且操作系统已经得知导致它阻塞的事件即将结束,此时便发生了这一状态变化。
- 运行态—→挂起就绪态:当一个具有较高优先级的挂起等待态进程的等待事件结束后,它需要抢占 CPU,而此时主存空间不够,从而可能导致正在运行的进程转化为挂起就绪态。另外处于运行态的进程也可以自己挂起自己。
- 新建态—→挂起就绪态:考虑到系统当前资源状况和性能要求,可以决定新建的进程将被对换出去成为挂起就绪态。
可以把一个挂起进程等同于不在主存的进程,因此挂起的进程将不参与进程调度直到它 们被对换进主存。一个挂起进程具有如下特征:
- 该进程不能立即被执行。
- 挂起进程可能会等待一个事件,但所等待的事件是独立于挂起条件的,事件结束并不能导致进程具备执行条件。
- 进程进入挂起状态是由于操作系统、父进程或进程本身阻止它的运行。
- 结束进程挂起状态的命令只能通过操作系统或父进程发出。
2、线程
由于一个进程的不同部分需要并发执行,且能共享资源,因此在进程内部增加一类实体,满足以下特性:
- 实体之间可以
并发
执行 - 实体之间
共享
相同的地址空间
这种实体就是线程。
线程是进程的一部分,描述指令流执行状态,它是进程中的指令执行流
的最小单元,是CPU调度
的基本单元。
进程与线程的关系:
线程 = 进程 - 共享资源
线程的优点:
- 一个进程中可以同时存在
多个线程
; - 各个线程之间可以
并发
地执行; - 各个线程之间可以
共享
地址空间和文件等资源;
线程的缺点:
- 一个线程崩溃,会导致其所属的进程的所有线程崩溃;
线程与进程的比较:
- 进程是
资源分配
单位,线程是CPU调度
单位; - 进程拥有一个
完整的资源平台
,而线程只独享指令流执行的必要资源
,如寄存器和栈; - 线程具有就绪、等待和运行三种基本状态和状态间的转换关系;
- 线程能
减少
并发执行的时间
和空间
开销;- 线程的创建时间比进程短;
- 线程的终止时间比进程短;
- 同一进程内的线程切换时间比进程短;
- 由于同一进程的各线程间共享内存和文件资源,可以不通过内核进行直接通信;