进程管理
进程:运行着的程序
进程的组成:进程控制块PCB + 程序段 + 数据集合
PCB属于系统空间,程序段和数据集合属于用户空间
-
进程组成图
-
PCB
进程控制块PCB
-
PCB是操作系统用于控制和管理进程的一种数据结构,它包含了系统所需要的关于进程的所有信息,是操作系统中最重要的数据结构
-
PCB是进程存在的唯一标志,操作系统靠PCB感知进程的存在
-
用户无法感知,也无法访问
进程的特征:动态性,并发性,独立性,异步性,结构性,共享性,制约性
进程三种基本状态:就绪,运行,阻塞(有的系统会有五种基本状态,增加了新建和完成/终止状态)
- 关于完成状态
- 处于该状态的进程还未从系统中消失,可能还有一些善后工作没完成,但是也不会再被调用了。
- 一个进程可以在任何状态下终止而进入完成状态
这三种状态依然不够充分:(进程挂起的原因)
- 一方面,处理机内存等系统硬件资源的利用率不高
- 另一方面,处在活动的进程可能由于某种原因暂时静止不活动了,也不退出系统,造成CPU空闲,其他进程也无法使用CPU。
因此这就引入了挂起状态
-
挂起的目的:是把进程占用的系统资源让出部分或全部,以供其他进程利用让出的姿态,提高系统的效率。
-
处于静止的就绪或阻塞进程称为挂起状态,将被从内存对换到外存中。
多进程图像
- 如何组织多进程:PCB+状态+队列
- 进程状态图:
- 队列
- 多进程如何进行交替/切换:队列操作+调度+切换
通过一个重要的函数--schedule()
进入磁盘等待队列
schedule{
p2=getNext(ReadyQueue);//getNext()即为调度策略
switch_to(p1,p2); //p1 p2为两个PCB,也即两个进程
}
- 多进程之间相互影响
-
多个进程处于用户态,存在于内存中,如何防止进程之间内存使用不越界呢。
- 进程使用的内存地址都是逻辑地址,并不是真正的物理地址,每一个逻辑地址通过映射表对应一个物理地址,因此虽然两个进程可能使用了同一个逻辑地址,但这两个逻辑地址映射的物理地址是不同的,这样一来,通过映射表将各个进程的内存分离了,这也是后面内存管理的内容,内存管理也是为了进程管理服务的。
进程控制
-
进程切换与处理机执行模式切换的注意事项:
-
进程切换是通过调度实现的,时机通常在事件中断时
-
进程切换必然导致模式切换,模式切换不一定会发生进程切换(例如进程仅仅是进行一个系统调用,处理机由用户态切换到内核态,系统调用完后继续返回该进程执行,并没有切换到其他进程)
-
无论是何种事件的中断,都会进行模式切换,进入内核执行中断处理程序
-
操作系统内核
- 内核的组成:
-
进程管理
-
内存管理
-
IO管理
-
与硬件有关的部分(中断处理、IO驱动程序、进程调度与控制用原语等)
-
内核常驻内存中
原语操作(也称为原子操作):指不可分割的操作,要么不做,要么全做
-
原语操作分类:
- 机器指令级原语:执行期间不允许中断
- 功能级原语:作为原语的程序段不允许并发执行(禁止被中断)
-
关于原语的注意点:
- 两类原语都在核心态执行
- 通常利用原语的特性,把进程控制用程序段做成原语(创建原语、撤销原语、阻塞原语、唤醒原语、进程同步原语等)
进程的创建与终止
1.进程图:为了提高系统的并发性和系统整体效率,进程运行过程中可以根据需要动态的创建子进程。类似于继承关系。
- 进程图的要点:
- 进程图是有向树,A为父进程,B、C为子进程;D、E又是B的子进程,A作为树的根,是这个进程家族的祖先
- 子进程可以继承父进程所拥有的资源
- 父进程可以动态的撤销(终止)子进程,子进程终止时,归还从父进程得到的资源
- 父进程终止时,将同时撤销所有的子孙进程
- 进程创建
- 进程创建过程(由系统调用,或创建原语创建进程)
- 给新进程分配一个唯一的进程标识号PID,从系统空闲的PCB结构中摘出一个PCB表
- 为新进程分配所需资源;主要是分配内存空间
- 初始化PCB;包括进程名、用户名、父进程标识、优先级、处理机状态(就绪)、进程地址、栈指针等
- 将新进程插入就绪队列
- 进程终止
- 系统通过终止进程的系统调用或执行终止原语终止进程:
- 根据标识号得到PCB,立即终止进程的运行
- 回收全部资源(包括程序空间,外部设备等)
- 若有子孙进程,则同时终止子孙进程,收回所有资源
- 将PCB移除(暂存在系统其他空间),由其他进程搜集信息和进行善后工作,进入完成状态。待系统将该进程所有工作完成后,收回PCB,插入到空闲队列中,以供其他新的进程使用
并不是所有的OS都有进程树结构,UNIX是典型的带有进程树层次结构的系统,而Windows中不存在任何进程树结构的概念,所有进程都是地位相同的
进程阻塞与唤醒
- 进程阻塞
-
引起进程阻塞的原因:
- 启动IO操作
- 请求系统资源
- 同步约束
- 服务进程无服务:当服务进程完成的自己的服务后,就会将自己阻塞起来
-
进程阻塞过程:
- 立即停止当前进程的执行,保护CPU现场保存到PCB中
- 将进程状态修改为阻塞,插到阻塞队列中
- 转进程调度程序重新选择一个就绪状态的进程投入运行
2.进程唤醒
-
进程唤醒的方式
- 系统进程唤醒
- 事件发生进程唤醒
-
进程唤醒过程:
- 将相关的阻塞进程从阻塞进程中摘出
- 修改阻塞进程状态为就绪,插入到就绪队列中
- 调度程序进行新的调度,或继续回复原当前进程
进程的挂起与激活
- 进程挂起
- 进程挂起的过程(通过挂起原语)
- 找到需要挂起进程的PCB,将其从相应队列中摘出
- 将其空间归还系统
- 判断被挂起的状态,如阻塞状态,则将其修改为静止阻塞状态,就绪-->静止就绪
- 申请交换区空间,将部分或者全部进程映像写到交换区,并将交换区地址记入PCB中
- 若被挂起的进程为当前进程,则转向进程调度
2.进程激活
进程激活与挂起是对应相反的过程
进程间的相互关系
-
结构相关进程(物理上)
-
相关进程————进程动态创建产生多个子进程,构成进程树
具有两个方面的相关特性:- 资源的继承性;
- “消失”的同时性
-
无关进程
-
-
逻辑相关进程
制约关系:进程间由于并发而产生首系统资源、信息交换、通信等因素干扰而等待。- 直接制约关系
- 间接制约关系