以下内容整理自互联网,仅用于个人学习
1. 进程
1.1 进程的定义
- 进程是程序运行的一次执行过程。
- 进程是一个程序及其数据在处理机上顺序执行所发生的活动。
- 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
为了使参与并发执行的程序(含数据)能独立的运行,必须为之配置一个专门的数据结构,称为进程控制块(Process Control Block,PCB)。系统利用PCB来描述进程的基本情况和运行状态,进而控制和管理进程。相应地,由程序段、相关数据段和PCB三部分过程了进程映像(进程实体)。所谓创建进程,实质上是创建进程映像中的PCB;而撤销进程实质上是撤销进程的PCB。值得注意的是,进程映像是静态的,进程则是动态的。
PCB是进程存在的唯一标识!
引入进程实体的概念后,我们可以把传统操作系统中的进程定义为:
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
1.2 进程状态转换
- 运行状态:进程正在处理机上运行。但处理机环境下,每一时刻最多只有一个进程处于运行状态。
- 就绪状态:进程已处于准备运行状态,即进程获得了除了处理机之外的一切所需资源,一旦得到处理机即可运行。
- 阻塞状态:又称为等待状态。进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理器空闲,该进程也不能运行。
- 创建状态:进程正在被创建,尚未转入到就绪状态。进程创建需要多个步骤:首先申请一个空白的PCB,并向PCB中填写一些控制和管理进程的信息;然后由系统为该进程分配运行时所必需的资源;最后把该进程转入就绪状态。
- 结束状态:进程正从系统中消失,这可能是进程正常结束或其他原因中断退出运行。当进程需要结束运行时,系统首先必须置该进程为结束状态,然后进一步处理资源释放和回收等工作。
- 就绪→运行:处于就绪状态的进程被调度后,获得处理机资源(分派处理机时间片),于是进程由就绪状态转运行状态。
- 运行→就绪:处于运行状态的进程在时间片用完后,不得不让出处理机,从而进程由运行状态转换为就绪。此外,在可剥夺的操作系统中,当有更高级的进程就绪时,调度程度将正执行的进程转换为就绪状态,让更高优先级的进程执行。
- 运行→阻塞:当进程请求某一资源(如外设)的使用和分配或等待某一事件的发生(如I/O操作的完成)时,它就从运行状态转换为阻塞状态。进程以系统调用的形式请求操作系统提供服务,这是一种特殊、由用户态程序调用操作系统内核过程的形式。
- 阻塞→就绪:当进程等待的时间到来时,如I/O操作结束或中断结束时,终端处理程序必须把相应的进程状态由阻塞状态转为就绪状态。
2. 线程
引入进程的目的,是为了使多道程序并发执行,以提高资源利用率和系统吞吐量;而引入线程,则是为了减少程序在并发执行时所付出的时空开销,提高操作系统的并发性能。
线程就是"轻量级进程",它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。线程自己不拥有系统资源,只拥有在运行中必不可少的资源,但与其他线程共享进程所拥有的全部资源。
线程也有 就绪、阻塞、运行 三种基本状态。
引入线程后,进程的内涵发送了改变:进程只作为除CPU以外系统资源
的分配单元,线程则作为处理机分配单元。
3. 进程与线程比较
3.1 调度
在传统操作系统中,用于资源和独立调度的基本单位都是进程。在引入线程的操作系统中,线程是独立调度的基本单位,进程是资源拥有的基本单位。统一进程中,线程的切换不会引起进程切换。在不同进程中的线程切换,如从一个进程内的线程切换到另一个进程的线程时,会引起进程切换。
3.2 资源
不论是传统操作系统还是设有线程的操作系统,进程都是拥有资源的基本单位,而线程不拥有系统资源(也有一点必不可少的资源),但线程可以访问其隶属进程的系统资源。
3.3 并发性
在引入线程的操作系统中,不仅进程之间可以并发执行,而且多个线程之间也可以并发执行,从而使操作系统具有更好的并发性,提高系统的吞吐量。
3.4 系统开销
由于创建或撤销进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等,因此操作系统所付出的开销远大于创建或撤销线程时的开销。
类似的,在进行进程切换时,涉及当前执行进程CPU环境的保存以及新调度到进程CPU环境的设置,而线程切换只需保存和设置少量寄存器内容,开销很小。
此外,由于同一个进程内的多个线程共享进程的地址空间,因此,这些线程之间的同步与通信非常容易实现,甚至无需操作系统的干预。
3.5 地址空间和其他资源(如打开文件)
进程的地址空间之间相互独立,同一进程的各线程间共享进程的资源,某进程内的线程对于其他进程不可见。
3.6 通信
进程间通信(IPC)需要进程同步和互斥手段辅助,以保证数据的一致性,而线程间可以直接读写进程数据段(如全局变量)来进行通信。