2.1.1 进程的定义、组织、组织方式、特征
本节主要内容
1.定义,在计算机发展史上,“进程”是为了解决什么问题而被引入的?
2.组成,每个进程有哪些部分组成?
3.组织方式,系统中各个进程之间是如何被组织起来的?
4.特征,相比于程序,进程有那些特征?
1.进程的定义:
程序就是一个指令序列
引入多道程序技术后,为了方便操作系统管理,完成各程序并发执行,引入进程、进程实体的概念。
系统为每个运行的程序配置一个数据结构,称为进程控制块(PCB),用来描述进程的各种信息(如程序代码存放位置)
PCB、程序段、数据段三部分构成了进程实体(进程映像)
一般情况下,我们把进程实体简称为进程。
例如,所谓创建进程,实质上是创建进程实体中的PCB;而撤销进程,实质上是撤销进程实体中的PCB
从不同角度,进程可以有不同的定义,比较传统典型的定义有:
1.进程是程序的一次执行过程
2.进程是一个程序及其数据在处理机上顺序执行时发生的活动
3.进程是具有独立功能的程序在数据集合上运行的过程,
它是系统进行资源分配和调度的一个独立单位
引入进程实体的概念后,可把进程定义为:
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
注:严格来说,进程实体和进程并不一样,进程实体是静态的,进程则是动态的。
不过,除非题目专门考察二者区别,否则认为进程实体就是进程。
因此我们也可以说“进程由程序段、数据段、PCB三部分组成”
2.进程的组成
进程(进程实体)由程序段、数据段、PCB三部分组成
1.操作系统通过PCB来管理进程,因此PCB中应该包含操作系统对其进行管理所需的各种信息。
进程的管理者(操作系统)所需要的数据都在PCB中,而程序本身所需的数据存放在程序段和数据段中
PCB包含四种信息
1.进程描述信息
1.进程标识符PID
当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的ID,
用于区分不同的进程(类似于身份证号)
2.用户标识符UID
2.进程控制和管理信息
1.进程当前状态
2.进程优先级
3.资源分配清单
1.程序段指针
2.数据段指针
3.键盘
4.鼠标
4.处理机相关信息
1.各种寄存器值
当进程切换时,需要把进程当前的运行情况记录下来保存到PCB中,
如:程序计数器的值(PC)表示了当前程序执行到哪一句。
2.程序段存放程序代码
3.数据段存放程序运行时使用、产生的运算数据。
如全局变量、局部变量、宏定义的常量就存放在数据段中
3.进程的组织方式
进程的组成是讨论多个进程之间的组织方式问题
1.连接方式
按照进程状态将PCB分为多个队列
操作系统持有指向各个队列的指针
2.索引方式
根据进程状态的不同,建立几张索引表
操作系统持有指向各个索引表的指针
4.进程的特征
1.动态性:动态性是进程最基本的特征
进程是程序的一次执行过程,是动态地产生、变化和消亡的
2.并发性:内存中有多个进程实体,各个进程可并发执行
3.独立性:进程是资源分配、接受调度的基本单位
进程是能独立运行、独立获得资源、独立接受调度的基本单位
4.异步性:异步性会导致并发程序执行结果的不确定性。详见“进程同步”
各个进程按各自独立的、不可预知的速度向前推进,
操作系统要提供“进程同步机制”来解决异步问题
5.结构性
每个进程会配置一个PCB。结构上看:进程=程序段+数据段+PCB
2.1.2 进程的状态和转换
本节主要内容:
1.进程的状态
1.运行状态
2.就绪状态
3.阻塞状态
4.创建状态
5.终止状态
其中运行状态、就绪状态、阻塞状态是三种基本状态
2.进程状态间的转换
1.就绪态-->运行态
2.运行态-->就绪态
3.运行态-->阻塞态
4.阻塞态-->就绪态
1.进程的状态--三种基本状态
1.运行态(Running)
占有CPU,并行在CPU上运行
注意:单核处理机环境下,每一时刻最多只有一个进程处于运行态。
双核环境下可以同时有两个进程处于运行态。
2.就绪态(Ready)
已经具备运行条件,但由于没有空闲CPU,而暂时不能运行
进程已经拥有除了处理机之外所有需要的资源,一旦获得处理机即可立即进入运行态开始运行。
即:万事俱备,只欠CPU
3.阻塞态(Waiting/Blocked,又称:等待态)
因等待每一事件而暂时不能运行
如:等待操作系统分配打印机、等待读磁盘操作的结果。
CPU是计算机中最昂贵的部件,为了提高CPU的利用率,
需要先将其他进程需要的资源分配到位,才能得到CPU的服务
2.进程的状态--另外两种状态
1.创建态(New,又称:新建态)
进程正在被创建,操作系统位进程分配资源,初始化PCB
2.终止态(Terminated,又称:结束态)
进程正在从系统中撤销,操作系统会回收进程拥有的资源、撤销PCB
3.进程状态的转换
运行态-->阻塞态是一种进程自身做出的主动行为
阻塞态-->就绪态是不受进程自身能控制的,是一种被动行为
注意:不能由阻塞态直接转化为运行态,也不能由就绪态直接转换为阻塞态
因为进入阻塞态是进程主动请求的,必然需要进程在运行时才能发出这种请求
2.1.3 进程控制
本节主要内容
1.基本概念
1.什么是进程控制
2.如何实现进程控制?
用“原语”实现
2.进程控制相关的原语
1.进程的创建
2.进程的终止
3.进程的阻塞
4.进程的唤醒
5.进程的切换
1.进程控制的基本概念
1.什么是进程控制?
进程控制就是要实现进程状态转换
2.如何实现进程控制?
1.进程转化过程
2.使用“原语”
用“原语”实现进程控制
原语的特点是:执行期间不允许中断,只能一气呵成
这种不可被中断的操作即原子操作
原语采用“关中断指令”和“开中断”指令实现
显然,关/开中断的权限非常大,必然是只允许在核心态下执行的特权指令
原语运行在核心态
2.进程控制相关的原语
进程控制会导致进程状态的转换。无论哪个原语,要做到的无非三类事情。
0.找到对应进程的PCB
1.更新PCB中的信息(如修改进程状态标志、将运行环境保存到PCB,从PCB恢复运行环境)
1.所有进程控制原语一定都会修改进程状态标志
2.剥夺当前运行进程的CPU使用权必然需要保存其运行环境
3.某进程开始运行前必然要恢复其运行环境
2.将PCB插入合适的队列
3.分配/回收资源
1.进程的创建
1.创建原语
用来实现:无-->创建态-->就绪态
1.申请空白PCB
2.为新进程分配所需资源
3.初始化PCB
4.将PCB插入就绪队列
2.引起进程创建的时间
1.用户登录
分时系统中,用户登录成功,系统会为其建立一个新的进程
2.作业调度
多道批处理系统中,由新的作业放入内存时,会为其建立一个新的进程
3.提供服务
用户向操作系统提出某些去请求时,会建立一个进程处理该请求
4.应用请求
由用户进程主动请求创建一个子进程
2.进程的终止
1.撤消原语
用来实现:就绪态/阻塞态/运行态-->终止态-->无
1.从PCB集合中找到终止进程的PCB
2.若进程正在运行,立即剥夺CPU,将CPU分配给其他进程
3.终止其所有子进程
4.将该进程的所有资源归还给父进程或操作系统
5.删除PCB
2.引起进程终止的事件
1.正常结束
2.异常结束
3.外界干预
3.进程的阻塞
1.阻塞原语
用来实现:运行态-->阻塞态
1.找到要阻塞的进程对应的PCB
2.保护进程运行现场,将PCB状态信息设置为“阻塞态”,暂时停止进程运行
3.将PCB插入相应事件的等待队列
2.引起进程阻塞的事件
1.需要等待系统分配某种资源
2.需要等待相互合作的其他进程完成工作
4.进程的唤醒
1.唤醒原语
用来实现:阻塞态-->就绪态
1.在事件等待队列中找到PCB
2.将PCB从等待队列移除,设置进程为就绪态
3.将PCB插入就绪队列,等待被调度
2.引起进程唤醒的事件
等待的事件发生
阻塞原语和唤醒原语必须成对使用,因何事阻塞就应由何事唤醒
5.进程的切换
1.切换原语
用于实现:一个进程的运行态-->阻塞态/就绪态,
另一个进程的就绪态-->运行态
1.将运行环境信息存入PCB
2.PCB移入相应的队列
3.选择另一个进程执行,并更新其PCB
4.根据PCB恢复新进程所需的运行环境
2.引起进程切换的事件
1.当前进程时间片到
2.有更高优先级的进程到达
3.当期那进程主动阻塞
4.当前进程终止