2进程
2.1进程基本概念
2.1.1重点问题
①为什么要引入进程
为了更好的描述和控制程序的并发执行,以实现操作系统的并发性和共享性
②PCB的引入,操作过程不易分辨各个进程,故为其命名pcb(过程控制块)
pcb的引入为了描述进程和管理进程
③进程实体:pcb、程序段、相关数据段
其中PCB给操作系统用,程序段和相关数据段给进程自己用
④对进程下定义
进程实体实际运行的运行过程
类比于电池和电流
电池不动,电池运行时,产生电流、是资源的分配和调度基本单位
2.1.2进程的特征
- 动态性(进程是程序的一次执行)
- 独立性(未建立pcb的程序,不可作为独立单位)
- 并发性(引入进程是为了与其他进程并发执行)
- 异步性(进程之间的相互制约,按各自独立的进行)
2.2进程的组成
2.2.1PCB的生命周期
- 进程创建时新建一个pcb,
- 进程结束时,系统收回其pcb,该进程死亡
PCB是进程存在的唯一标识
2.2.2PCB包含的内容
进程描述信息 | 进程控制和管理信息 | 资源分配清单 | 处理机相关信息 |
---|---|---|---|
进程标识符(PID) | 调度和状态信息 | 代码段指针 | 通用寄存器值 |
用户标识符(UID) | 进程之间的通信信息 | 数据段指针 | 地址寄存器的值 |
存储管理信息 | 堆栈段指针 | 控制寄存器的值 | |
进程所用资源 | 键盘 | 状态i寄存器的值 | |
有关数据结构连接问题 | 鼠标 | 状态字 | |
文件描述符 |
- 进程标识符(内部,外部)
- 处理机的信息(通用寄存器,指令计数器,PSW,用户的栈指针)。
- 进程调度信息(进程状态,进程的优先级,进程调度所需的其它信息,事件)
- 进程控制信息(程序的数据的地址,资源清单,进程同步和通信机制,链接指针)
2.3进程的状态与转换
- 就绪状态(Ready)
进程已分配到除CPU之外的所有必要资源,只要再获 得CPU,便可立即执行。
-
执行状态 (Running)
进程已获得CPU,正在执行。(多处理机系统中,则有多个进程处于执行状态) -
阻塞状态(Block / Waiting)
正在执行的进程由于发生某时间(如I/O请求、申请缓冲区失败等)暂时无法继续执行的状态,即进程的执行受到阻塞。
2.3.1引起进程阻塞的事件:
① 向系统请求共享资源失败
② 等待某种操作的完成
③ 新数据尚未到达
④ 等待新任务的到达
发生阻塞事件的时候,会导致阻塞使用阻塞原语block,阻塞是一种主动行为
2.3.2三种基本状态的转换
2.4进程之间的相互转换
-
创建->就绪:进程初始资源分配完毕后就进入就绪态。
-
就绪->运行:就绪进程分配到 CPU 资源即可进入运行态。
-
运行->就绪:运行中的进程被调度系统或者更高优先级的进程抢占 CPU
-
等待->就绪:等待进程等待的事件被满足后就进入就绪态等待 CPU 资源的分配
-
运行态-> 阻塞态 请求除了cpu外的其他资源如(i/o)或者等待某一个事件的发生。
且进程通过使用系统调用的方式请求操作系统提供服务
-
阻塞态- >就绪态 进程等待事件到来时,(I/O操作完成或中断结束时候)
2.5进程控制
2.5.1父子进程的区别
父子进程之间的区别是:
-
fork的返回值
-
进程ID不同
-
两个进程具有不同的父进程ID:子进程的父进程ID是创建它的进程的ID,而父进程的ID则不变
-
子进程的tms_utime, tms_stime, tms_cutime, tms_ustime均被设置为0
-
父进程设置的文件锁不会被子进程继承
-
子进程的未处理的闹钟被清除
-
子进程的未处理信号集设置为空集
2.5.2进程的创建
- 用户登录 :在分时系统中,用户登录成功后,系统将为该用户建立一个进程。
- 作业调度 :在多道批处理系统中,从后备队列中选择进程调度时,便为它(们)创建进程,并插入就绪队列中。
- 提供服务 :比如用户程序要求文件进行打印,操作系统将为它创建一个打印进程。
- 用户程序的应用请求
创建的步骤(创建原语)
- 申请空白的PCB
- 为新进程分配其运行所需要的资源
- 初始化进程控制块PCB
- 将新进程插入到就绪队列之中
2.5.3进程的终止
- 正常结束
表示进程的任务已经完成,准备 退出运行。
- 异常结束
指进程在运行时发生了某种异常事件,使程序无法继续运行。比如越界错、保护错、非法指令、运行超时等等。
-
外界干预
进程应外界的请求而终止运行。比如操作员或操作系统干预、父进程请求、父进程终止时随着父进程而终止。