进程概述
-
进程的定义:
- 正在运行的程序
- 一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。
-
为什么要有进程?
- cpu能力越来越强,内存越来越多,此时程序来表示在内存中运行的程序不合适,会出现一个程序有多个执行过程。
-
进程组成:
- 程序代码
- 数据
- 程序计数器,指示下一条将运行的指令
- 一组通用的寄存器的当前值,堆栈
- 一堆系统资源(如打开的文件)
进程包含了正在运行的一个程序的所有状态信息
-
进程与程序的联系:
- 程序是产生进程的基础
- 程序的每次运行构成不同的进程(处理的数据不一样,获得资源不一样,产生结果不一样
- 进程是程序功能的体现
- 通过多次执行,一个程序可对应多个进程,通过调用关系,一个进程可包括多个程序
-
区别:
- 进程是动态,程序是静态。程序是有序代码的集合,进程是程序的执行,进程有核心态、用户态。(进程实现某些功能时,会给操作系统发出请求,操作系统代表进程执行,此时进程是内核态)
- 进程是暂时的,程序是永久的,进程是一个状态变化的程序,程序可长久保存
- 进程与程序的组成不同:进程的组成包括程序,数据和进程控制块(即进程状态信息)
-
进程特点:
- 动态性:可动态的创建,结束进程 并发性 进程可以被独立调度并占有处理机运行
- 独立性:不同进程的工作不受影响(给不同进程分配不同页表)
- 制约性: 因访问共享数据、资源或进程间同步而产生制约
- 并发:一段时间内,多个进程在执行,时间很短,给人感觉像是多个进程同时执行
- 并行:同一时刻 可以多个进程执行
PCB
程序=算法+数据结构
描述进程的数据结构:进程控制块PCB
-
PCB:描述进程的基本信息以及运行变化的过程 是进程存在的唯一标志
-
PCB用来:
- 进程创建:为进程生成一个PCB
- 进程终止:回收PCB
- 进程的组织管理:对PCB的组织管理来实现
-
PCB包含:
- 进程标识信息。代表哪一个进程 属于哪个用户 它的父进程是哪个
- 处理机状态信息保存区
- 保存进程运行现场信息
- 用户可见寄存器(数据)
- 控制和状态寄存器(PC PSW)
- 栈指针(过程调用、系统调用,中断处理和返回时需要用到)
- 进程控制信息。
- 调度和状态信息
- 进程间通信信息
- 存储管理信息
- 进程所用资源(打开的文件)
- 有关数据结构连接信息(进程可以链接到一个进程队列中,或链接到相关的其他进程的PCB)
-
PCB的组织方式
- 链表:不同状态的进程形成链表 就绪链表 阻塞链表
进程的生命期
-
生命期管理:
-
进程创建
- 时间:
- 系统初始化时;
- 用户请求创建一个进程
- 正在运行的进程执行了创建进程的系统调用
- 时间:
-
进程运行
- 内核选择一个就绪的进程,让它占用处理机并执行
为何选择?
如何选择?
- 内核选择一个就绪的进程,让它占用处理机并执行
-
进程等待
- 请求并等待系统服务,无法马上完成
- 启动某种操作,无法马上完成
- 需要的数据没有到达
进程只能自己阻塞自己,OS完成状态转换
-
进程唤醒
- 唤醒的原因
- 被阻塞进程需要的资源可被满足
- 被阻塞进程等待的事件到达
- 将该进程的PCB插入到就绪队列
- 进程只能被别的进程或OS唤醒
- 唤醒的原因
-
进程结束
- 正常退出(自愿)
- 错误退出(自愿)
- 致命错误(强制)
- 被其他进程所杀(强制)
-
进程状态变化模型
三个基本状态:运行 就绪 等待(阻塞)
- 三状态图
创建状态:正在创建 还没有转到就绪状态之前的状态
结束状态:进程正在消失的状态
-
五状态图
-
可能的状态变化:
- null–>new :一个新进程被产生出来执行一个程序
- new–>ready:当进程被创建完成并初始化后,一切就绪准备运行时,变为就绪状态。不会持续很久 完成PCB初始化过程
- ready->running 处理机空闲,并选中该进程
- Running ->exit 进程完成或出错
- running–>ready 处于运行的进程由于分配给他的处理机时间片用完而让出处理机。由操作系统管理。
- running–>blocked 当进程请求某样东西且必须等待时
- blocked–>ready 进程的等待某事件到来时,转为就绪态
进程挂起
- 进程挂起没有占用内存空间。处在挂起状态的进程映像在硬盘上
- 挂起状态
- 阻塞挂起:进程在外存并等待某事件的出现。
- 就绪挂起:进程在外存,但只要进入内存,即可运行。
当内存中的进程各个状态队列满时,则会挂起。