进程管理
进程和线程
程序:静态的,是存放在磁盘里的可执行文件,一系列指令集合;
进程:动态的,是程序一次执行过程,同一个程序多次执行会对应多个进程;
在多道程序中,允许多个程序并发执行,此时它们将失去封闭性,并具有间断性及不可再现性的特征.用进程更好地描述和控制进程的基本情况和运行状态,实现操作系统的并发性和共享性。
为了使进程能够独立的运行,必须为之配置一个专门的数据结构,进程控制块PCB,系统利用PCB来描述进程的基本情况和运行状态,进而控制和管理进程。
进程实体(进程映像) 由程序段、数据段、PCB三部分组成。PCB是进程存在的唯一标志,进程映像是静态的,进程是动态的。
PCB:进程描述信息、进程控制和管理信息、资源分配清单、处理机相关信息
进程是一个独立的运行单位,进程是进程实体的运行过程,是系统进行资源分配和调度的独立单位。
进程的特征
1 动态性 是进程最基本的特征
2 并发性 多个进程实体同时存在于内存中,能在一段时间内运行,引入进程的目的就是为了程序能与其他进程的程序并发执行,以提高资源利用率。
3 独立性 指进程实体是一个能独立运行、独立获得资源和接受调度的基本单位。
4 异步性 进程按照各自独立的、不可预知的速度向前推进。
5 结构性 每个进程都配置一个PCB对其进行描述。从结构上来看,进程实体(进程映像)*由程序段、数据段、PCB三部分组成。
进程的状态与转换
五状态:运行态、就绪态、阻塞态、创建态、结束态
进程控制
对系统中所有功能进行有效的管理,具有创建新进程、撤销已有进程、实现进程状态转换等功能;
在操作系统中一般把进程控制用的程序段叫做 原语,原语的特点是执行期间不能被中断,它是一个不可分割的基本单位。
进程的创建-----创建原语
引起:用户登录、作业调度、系统提供服务、用户程序应用请求
1 为新进场分配一个唯一的进程标识号,并申请一个空白的 PCB
若 PCB 申请失败,则创建失败(PCB 有限的)。
2 为进程分配资源,
若资源不足,不是创建失败,而是处于阻塞态,等待内存资源。
3 初始化 PCB
4 若进程就绪队列能够接纳新进程,则将新进程插入就绪队列,等待被调度运行
进程的终止----撤销原语
引起:正常结束(exit系统调用)、异常结束、外界干预
1 根据被终止的进程的标识符,检索 PCB ,从中读出进程的状态;
2 若处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程;
3 若该进程还有子孙进程,则将其所有子孙进程终止;
4 将该进程的全部资源,或归还给其父进程,或归还给操作系统;
5 将该进程的 PCB 从所在队列中删除;
进程的阻塞-----阻塞原语 Block
引起:期待的某些事件没发生,如请求系统资源失败、等待某种操作的完成……
系统自动执行阻塞原语,使自己由运行态进入阻塞态
1 找到将被阻塞进程的标识号对应的 PCB ;
2 若该进程处于运行态,则保护其现场,将其状态转为阻塞态,停止运行;
3 把该 PCB 插入相应事件的等待队列,将处理机资源调度给其他就绪进程;
进程的唤醒-----唤醒原语 Wakeup
引起:当被阻塞的进程出现所期待的事件
1 在该事件的等待队列中找到进程的 PCB;
2 将其从等待队列移出,并置其状态为就绪态;
3 把该PCB 插入就绪队列,等待调度程序调度;
进程切换
1 保存处理机上下文,包括程序计数器和其他寄存器;
2 更新 PCB 信息;
3 把进程的 PCB 移入相应的队列,如就绪、在某事件阻塞等队列;
4 选择另一个进程执行,并更新其 PCB;
5 更新内存管理的数据结构;
6 恢复处理机上下文;
进程上下文、运行环境:进程运行过程
进程的组织
进程由以下三部分组成:
1 进程控制块 PCB
进程创建时,新建的PCB,该结构常驻内存,任意时刻都可以存取,并在结束时删除。PCB是进程实体的一部分,是进程存在的唯一标志。进程通过PCB来管理和控制进程。
PCB主要包括进程描述信息、进程控制和管理信息、资源分配清单、处理机相关信息
进程描述信息:进程标识符、用户标识符;
进程控制和管理信息:进程当前状态,进程优先级;
资源分配清单:有关内存地址空间或虚拟地址空间的状况,所打开文件的列表,输入/输出设备信息;
处理机相关信息:处理器中各寄存器的值;
2 程序段
能被进程调度程序调度到 CPU 执行的程序代码段。
3 数据段
可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果。
进程的通信( IPC )
1 共享存储
通信进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行读/写操作来实现进程之间的信息交换。
在共享空间进行写/读操作时,需要用同步互斥工具(P、V操作)对共享空间进行读/写控制。
共享存储分为:低级方式的共享是基于数据结构的共享、高级方式的共享是基于存储区的共享。
操作系统只负责给进程提供可共享的存储空间和同步互斥工具,而数据的交换则由用户自己安排读写指令完成。
2 消息传递
数据交换以格式化的消息为单位。
进程通过操作系统提供的发送消息和接收消息两个原语进行数据交换。
1) 直接通信方式:发送进程直接把消息发送给接收进程,并将他挂在接收进程的消息缓存队列上,接收进程从消息缓冲队列中获得消息。
2) 间接通信方式:发送进程把消息发送到某个中间实体,接收进程从中间实体得到消息,这种中间实体一般成为信箱,又叫做信箱通信方式。
3 管道通信
所谓“管道”就是用于连接一个读进程和一个写进程以实现它们之间的通信的一个共享文件,又名为 pipe 文件。
管道机制必须提供以下三方面的协调能力:互斥、同步和确定对方的存在。
从管道读数据时一次性操作,数据一旦被读取,它就从管道中被抛弃,释放空间以便写入更多的数据。管道只能采用半双工通信,即某一时刻只能单向传输,要实现父子进程双方互动通信,需要定义两个管道。
线程概念和多线程模型
概念:
引入进程的目的:更好的使多道程序并发执行,提高资源利用率和系统吞吐量
引入线程的目的:减少程序在并发执行时所付出的时空开销,提高操作系统的并发性能
线程的理解:“轻量级进程”,是一个基本的CPU执行单元,也是程序执行流的最小单元
由线程ID、程序计数器、寄存器集合和栈堆组成。
⭐⭐⭐⭐线程是进程中的一个实体,是被系统独立调度和分派的基本单位,引入线程后进程内涵发生了改变,进程只作为除 CPU 之外的系统资源调度的分配单位,而线程则作为处理机的分配单元。
比较:
调度:线程是独立调度的基本单位、进程是拥有资源的基本单位;
拥有资源:进程是拥有资源的基本单位,线程不拥有系统资源,但线程可访问其隶属进程的系统资源;
并发性:引入线程,不仅进程之间可以并发执行,而且多个线程之间也可以并发执行,从而使操作系统具有更好的并发性,提高了系统的吞吐量。
系统开销:进程切换涉及当前执行进程CPU环境的保存及新调度到进程CPU环境的设置,而线程切换只需要保存和设置少量寄存器内容,开销很小;
地址空间和其他资源:进程地址空间之间相互独立,同一进程的线程之间共享进程的资源,某进程里的线程对其他进程不可见;
通信:进程间通信需要进程同步和互斥手段的辅助,以保证数据的一致性,而线程间可以直接读/写进程数据段(如全局变量)来进行通信;
线程的属性:
线程是处理机调度的单位;
多 CPU 计算机中,各个线程可占不同 CPU;
每一个线程都有一个线程 ID,线程控制块TCB;
线程也有就绪、运行、阻塞三种状态;
线程几乎不拥有系统资源;
由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预;
同一进程中线程切换不会引起进程切换;
切换同进程内线程,系统开销很小;
切换进程,系统开销很大。
线程的实现方式:
1)用户级线程:
用户级线程由应用程序通过线程库实现,所有的线程管理工作都由应用程序负责(包括线程切换);
用户级线程中,线程切换可以在用户态下完成,无需操作系统干预;
在用户看来,是有多个线程,但在操作系统看来并意识不到线程的存在;
优:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程的系统开销小,效率高;
缺:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高,多个线程不可在多核处理机上并行运行;
2)内核级线程:
内核级线程的管理工作由操作系统内核完成;
线程调度、切换等工作都由内核负责,因此,内核级线程切换必在核心态下完成;
操作系统会为每个内核级线程建立相应的 TCB,通过 TCB 对线程进行管理;
优:当一个进程被阻塞后,别的进程还可继续执行,并发能力强。多线程可在多核处理机上并行执行;
缺:一个用户进程会占用多个内核级线程,线程切换需要由系统内核完成,需要切换到核心态,因此线程管理成本高,开销大;
3) 组合方式
多线程模型:
1、多对一模型:
将多个用户级线程映射到一个内核级线程。
优:线程管理在用户空间进行,效率比较高;
缺:一个线程在使用内核服务被阻塞,整个进程都会被阻塞,多个线程不能并行地运行在多处理机上;
2、一对一模型:
每个用户级线程映射到一个内核级线程。
优:一个线程被阻塞后,允许另一个进程继续执行,所以并发能力强;
缺:每创建一个用户级线程都需要创建一个内核级线程与其对应,这样创建线程的开销比较大,会影响到应用程序的性能;
3、多对多模型:
n 个用户级线程映射到 m 个内核级线程,要求 m<=n 。
特点:是多对一和一对一的折中,既克服了多对一模型并发度不高的缺点,又克服了一对一模型的一个用户进程占用太多内核级线程而开销太大的缺点。此外还有二者的优点。