进程和进程模型
程序
进程
定义
- 是程序的一次执行过程,同一个程序的多次执行会对应多个进程
- 其实就是正在进行中的程序,程序和进程的关系等价于类和对象的关系(如果你了解这玩意儿的话
没对象?new一个)
- 其实就是正在进行中的程序,程序和进程的关系等价于类和对象的关系(如果你了解这玩意儿的话
- 是程序的一次执行过程,同一个程序的多次执行会对应多个进程
特征
- 动态性
- 进程有创建、活动、暂停、终止等过程,它是有自己的“生命”的
- 进程是动态地产生、变化和消亡的
- 动态性是进程最基本的特征
- 并发性
- 指多个进程可以在一段时间内同时运行
- 这是引入进程这个概念的目的,因为进程是有“生命”、有状态的,在一段时间内由一个进程切换到另一个进程时,我们可以记录当前进程的状态,当需要切换回到当前进程时,我们将刚刚记录的进程的状态复现,即可继续运行刚刚的进程(只要CPU足够渣,多运行几个进程又有何难?
弱水三千淹不死我,只取一瓢不可能的) - 并发性是进程的重要特征,也是操作系统的重要特征
- 独立性
- 一个进程是一个能独立运行、独立获得资源和独立接受调度的基本单位
- 说白了就是不管是运行还是获取资源,又或者是被调度,都只是一个进程自己的事情,和其他任何进程都无关(独立自主的三好进程)
- 凡未建立PCB的程序,都不能作为一个独立的单位参与运行
- PCB相当于进程的身份证,没有PCB的进程就是一个黑户,这显然是不合法的
- 计算机与现实生活不同,它不存在灰色地带,所以黑户是不可能在计算机中存在的
- 一个进程是一个能独立运行、独立获得资源和独立接受调度的基本单位
- 异步性
- 进程以不可预知的速度向前推进,内存中正在执行的进程随时都可以暂停并切换到另一个进程去执行。这显然会导致执行结果的不可预知性
- 为此在操作系统中必须配置相应的进程同步机制
- 动态性
五状态进程模型
创建态
- 进程正在创建时的状态
- 这时候的进程已经分配好了PCB
- 正在分配进程执行所需要的除CPU外的其他资源
- 只能通往就绪态,不存在任何状态可以转变到创建态(只考虑正常情况下)
- 所有除CPU以外的资源得到满足后,进程转变到就绪态
- 进程正在创建时的状态
就绪态
- 等待获取CPU时的状态
- 进程所有除CPU以外的执行条件均已满足、
- 获取CPU后可以直接运行
- 同一时间可能有多个处于就绪态的进程,它们会被组织成一个就绪队列
- 由创建态或阻塞态转变而来,只能通往运行态
- 得到CPU后转变到运行态(进程调度)
- 引起进程创建的情况
- 系统初始化时
- 用户请求创建新进程
- 正在运行的进程执行了创建新进程的系统调用
- 等待获取CPU时的状态
退出态
- 进程运行终止后,回收资源和PCB时的状态
- 进程退出的情况
- 正常退出(自愿退出,被动)
- 主动退出(自愿退出,被动)
- 致命错误(强制退出,被动)
- 被系统或其他进程杀死(强制退出,被动)
- 只能由运行态转变而来(只考虑正常情况下)
运行态
- 正在执行的进程
- 进程正在占用CPU
- 如果只有一个单核CPU,则操作系统中同一时刻只有一个处于运行态的进程
- 可以通往就绪态、阻塞态、退出态
- CPU被抢占则转变为就绪态(只在抢占式调度下存在)
- 需要除CPU外的其他资源或事件发生则转变为阻塞态
- 出现致命错误、被强杀或主动退出,则转变为退出态
- 正在执行的进程
阻塞态(等待态)
- 已经创建好的进程渴望得到除CPU外的其他资源或事件(
缺的不只是爱,还有钱财)- 等待事件结束
- 等待资源获取
- 不能干占着**不**,于是退还CPU,从运行态转向阻塞态
- 不同的阻塞原因会产生不同的阻塞队列
- 只能通往就绪态(唤醒进程)
- 被阻塞进程需要的资源被满足,转变为就绪态
- 被阻塞进程等待的事件到达,转变为就绪态
- 只有进程自身才知道何时需要等待某种事件的发生,因此只能由运行态转为阻塞态
- 进程只能被别的进程或操作系统唤醒
- 408范围内常见阻塞情况
- 进程发起I/O操作等待I/O设备分配或等待其完成的过程中(I/O阻塞)
- 进程对值小于等于0的信号执行P操作(信号量阻塞)
- 对管程中的条件变量执行wait()操作(条件变量阻塞)
- 试图创建进程却无法申请到足够的资源(其他资源申请阻塞)
- 已经创建好的进程渴望得到除CPU外的其他资源或事件(