一、进程
1、概述
(1)、定义
-
进程是程序的一次执行
-
进程是一个程序及其数据在处理机上顺序执行时所发生的活动
-
进程是具有独立功能的程序在一个2数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位
-
进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位
(2)、组成
进程由程序段、数据段、PCB三部分组成
(3)、进程和程序的区别
1、程序的顺序执行特征:
-
-
顺序性: 前一动作结束,后一动作才能开始
-
封闭性:程序在封闭的环境下运行,其执行结果不受外界因素的影响
-
可再现性:只要程序执行时的环境和初始条件相同,当程序重复执行时,都可获得相同的结果
-
2、并行:多个事件在同一时刻发生
并发:多个事件在同一时期内发生
3、程序并发执行特征
-
-
间断性: 竞争资源失败或时间片结束。
-
失去封闭性:失去封闭性,当程序执行时,必然受到其他程序的影响。程序在并发执行时,由于失去了封闭性,其计算结果必将与并发程序的执行速度有关,从而使程序的执行失去了可再现性
-
不可再现性: 结果多种可能
-
4、进程和程序的区别
-
进程是程序的一次运行,具有动态性和生命周期性;而程序存放在存储器的一个可运行代码段,是静态的、顺序的,可以长期保存。
-
进程是计算机系统进行资源分配和调度的基本单位,具有独立性,进程有自己相应的数据结构(PCB+程序+数据段),而程序是指令的集合,只拥有自己的程序名、后缀等基本属性。
-
进程具有并发性、异步性、独立性等特征,衍生出进程的同步与互斥问题,而程序则只具备长期保存的特点。
-
1个程序可以对应多个进程,但1个进程可以对应1个程序,也可以对应多个程序,是多对多的关系。
(4)、特征
-
结构性: 进程实体=程序段+相关的数据段+进程
-
动态性(程序最基本的特征):动态性表现在两方面:由创建而产生,由调度而执行,由撤销而消亡;进程实体有一定的生命期
-
并发性(也是OS的重要特征):多个进程实体存放在内存中,且能在一段时间内同时运行
-
独立性,凡未建立PCB的程序都不能作为一个独立运行、独立获得资源和独立接收调度的基本单位,
-
异步性,即程序是按各自独立的、不可预知的速度向前推进
其中动态性和并发性是进程的基本单位
二、线程
1、定义
进程是可并发执行的程序在某个数据集合上的一次计算活动,也是操作系统进行资源分配和运行调度的基本单位。
2、状态转换
三种基本状态的转换:
-
就绪状态(ready)——进程在内存中已经具备执行的条件,等待分配CPU
-
运行状态(running)——进程占用CPU并正在执行
-
阻塞状态(blocked)——也称为等待(waiting)状态——运行的进程由于发生某事件而放弃CPU
处于就绪状态的进程,在调度程序为之分配了处理机后便可执行,相应的,其状态就由就绪态转变为执行态;正在执行的进程(当前进程)如果因分配给它的时间片已完全被剥夺处理机暂停时,其状态由执行转为就绪;如果发生了某事件,致使当前进程的执行受阻,使之无法继续执行,则该进程就由执行态转变为阻塞
进程五态模型:
-
-
就绪状态:进程已分配到除CPU以外的所有必要资源后,只要在获得CPU,便可立刻执行
-
执行状态:进程已获得CPU,其程序正在执行的状态
-
阻塞状态:正在进行的进程由于发生某事件(如I/O请求,申请缓冲区失败等)暂时无法继续执行的状态,即进程的执行受到阻塞
-
创建状态:进程申请一个空白PCB,并向PCB中填写用于控制和管理进程的信息,然后为该进程分配运行时所必需的资源,最后,把该进程转入就绪状态并插入就绪队列中。但如0果进程所需要的资源尚不能得到满足,此时创建工作尚未完成,进程不能被调度运行,此时的状态就称为创建状态
-
引起的创建进程的事件:
-
用户登录
-
作业调度
-
提供服务
-
应用请求
终止状态:当一个进程达到了自然结束点,或是出现了无法克服的错误,或是被操作系统所终结,或是被其他有终止权的进程所终结,它将进入终止状态
挂起状态:程序不能继续进行,即挂起后的进程处于激活状态,但不能参与CPU的竞争,所以被挂起的进程处于静止状态,没被挂起的进程处于活动状态。
(1)、为什么要有“挂起”状态?
由于进程的不断创建,系统资源已不能满足进程运行的要求,就必须把某些进程挂起(suspend),对换到磁盘镜像区中,暂时不参与进程调度,起到平滑系统操作负荷的目的。
(2)、引入挂起状态的原因:
- 父进程请求:有时父进程希望挂起自己的某个子进程,以便考查、修改和协调各个子进程间的活动
- 负荷调节的需要:工作负荷影响到实时系统的操作时,系统会将一些不重要的进程挂起,以保证系统正常运行
- 操作系统的需要:OS有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账
- 终端用户的需求:终端用户在程序运行时发现问题,让程序暂停运行,以便用户对程序进行修改
- 操作系统需要挂起某些进程,检查运行中资源使用情况,以改善系统性能;或当系统出现故障或某些功能受到破坏时,需要挂起某些进程以排除故障。
- 父进程要求挂起后代进程,以进行某些检查和改正。
- 用户要求挂起自己的进程,以便进行某些调试、检查和改正。
- 定期执行的进程(如审计、监控、记账程序)对换出去,以减轻系统负荷。
- 进程竞争资源,导致系统资源不足,负荷过重,需要挂起部分进程以调整系统负荷,保证系统的实时性或让系统正常运行。
- 系统中的进程均处于等待状态,需要把一些阻塞进程对换出去,腾出足够内存装入就绪进程运行。
(3)、挂起进程的特征(该进程不能立即被执行)
- 挂起进程可能会等待事件,但所等待事件是独立于挂起条件的,事件结束并不能导致进程具备执行条件。
- 进程进入挂起状态是由于操作系统、父进程或进程本身阻止它的运行。
- 结束进程挂起状态的命令只能通过操作系统或父进程发出。
(4)、有挂起功能的进程状态模型
(5)、引入挂起原语操作后三个进程状态的转换
活动就绪——静止就绪
活动阻塞——静止阻塞
静止就绪——活动就绪
静止阻塞——活动阻塞
(6)、引入挂起操作后五个进程状态的转换
NULL——创建
创建——活动就绪
创建——静止就绪
执行——终止
三、进程控制块
1、定义
为了使参与并发执行的每个程序(含数据)都能独立的运行,在操作系统中为之配置的一个专门的数据结构,用于描述进程的当前情况以及管理进程运行的全部信息,是操作系统中最重要的记录型数据结构,描述进程的基本情况和活动过程,进而控制和管理进程。
2、PCB作用( 就是使程序能成为独立运行的单位,并可和其他进程并发执行)
-
作为独立运行基本单位的标志
-
能实现间断性运行方式
-
提供进程管理所需要的信息
-
提供进程调度所需要的信息
-
实现与其他进程的同步与通信
3、PCB中的信息
-
进程描述信息
-
进程名
-
进程标识符
-
内部标识符
-
外部标识符
-
-
用户名
-
-
处理机状态status
-
通用寄存器
-
指令计数器
-
PSW
-
用户的栈指针
-
-
进程调度信息进程
-
状态
-
进程的优先级
-
进程调度所需的其它信息
-
事件
-
-
进程控制和资源占有量信息
-
程序的数据的地址
-
资源清单
-
进程同步和通信机制
-
链接指针
-
4、PCB的组织方式
-
线性方式(多进程队列):实现简单,开销小,但查找时需要扫描整张表,适合进程数目不多的系统
-
链接方式
-
索引方式
四、进程控制
1、原语
(1)、定义
-
原语由若干条指令构成、用于完成一定功能的过程。
-
原语是“原子操作”。即一个操作中的所有动作,要么全做,要么全不做。换言之,原子操作是一个不可分割的操作。
(2)、进程控制原语
-
创建进程(create)
-
操作系统创建进程主要步骤
-
导致创建进程的事件
-
-
撤消与终止进程
-
撤销原语撤销的是PCB,而非进程的程序段
-
-
阻塞与唤醒进程
-
进程阻塞是进程的自主行为
-
唤醒则是被动的
-
-
挂起与激活进程
-
既可以由该进程自己调用,也可由其它进程或系统调用,但激活原语只能由其它进程或系统调用
-
2、进程创建原因及过程
(1)、原因
-
用户登录:系统建立
-
作业调度:系统建立
-
提供服务:用户程序提出某种请求后,系统提供服务
-
应用请求:基于应用需求,自己创建一个新进程。
(2)、过程
-
先从PCB集合中申请一个空闲的PCB,为新进程申请唯一的数字标识符
-
为新进程分配其运行所需资源
-
初始化PCB
-
初始化标识信息
-
初始化处理机状态信息
-
初始化处理机控制信息
-
-
将新进程插入就绪队列
3、进程终止原因及过程
(1)、原因
-
正常结束
-
异常结束
-
越界错
-
保护错
-
非法指令
-
特权指令错
-
运行超时
-
等待超时
-
算数运行错
-
I/O故障
-
-
外界干预
-
操作员或操作系统干预
-
父进程请求
-
因父进程终止
-
(2)、过程
-
根据标识符,找出该进程的PCB,读出进程的状态
-
若该进程正在执行,则终止他的执行,并置调度标志为真,终止后重新进程调调度。
-
若该进程还有子孙进程,也应该终止,防止成为不可控的进程。
-
将被终止进程拥有的资源归还给其父进程或者系统
-
将被终止进程从所在队列中移出
4、进程的阻塞和唤醒
(1)、引起进程阻塞和唤醒的事件
-
向系统请求共享资源失败
-
等待某种操作的完成
-
新数据尚未到达
-
等待新任务的到达
(2)、进程的阻塞过程
停止进程的执行,将其状态改为阻塞状态,并把它的PCB插入相应的阻塞队列,转调度程序重新调度。当阻塞进程所等待的事情完成时,应调用唤醒原语将该进程的状态从阻塞状态转换为就绪状态
(3)、进程的唤醒过程
在阻塞队列中移出该进程的PCB,将其设置成就绪队列,并把它插入就绪队列
5、进程的挂起与激活
(1)进程的挂起过程(调用原语 suspend())
若进城处于活动阻塞状态,则将它的状态转换为静止阻塞状态;否则,将它转换为静止就绪状态;将PCB复制到指定的内存区域供用户或父进程考查;若挂起前进程正在执行,则转调度程序重新进行进程调度。如果挂起是为了对换,则在挂起进程时还必须将它换出到外存中
挂起原语要做的工作:
-
检查被挂起进程的状态
-
如进程处于就绪状态,将进程从就绪状态变为就绪挂起状态
-
如进程处于阻塞状态,将进程从阻塞状态变为阻塞挂起状态
-
如进程正在运行,将进程变为就绪挂起状态,并重新调度
(2)进程的激活过程(active())
若进程处于静止阻塞状态,则将它转换成活动阻塞状态,否则将它转换成活动就绪状态;若进程转换成活动就绪状态;而系统又采用抢占调度策略,则应检查该进程是否有权抢占CPU,若有则应进行进程调度。同样,若果挂起是为了对换,则在激活的进程时还必须将它调入内存中
激活原语要做的工作:
-
检查被激活进程的状态
-
如进程处于就绪挂起状态,将进程从就绪挂起状态变为就绪状态
-
如进程处于阻塞挂起状态,将进程从阻塞挂起状态变为阻塞状态
-
若系统为抢占式系统,则进行进程调度
五、进程的互斥和同步
1、进程互斥
(1)、定义
互斥:一组并发进程中的一个或多个程序段,因共享某一共有资源而导致它们必须以一个不允许交叉执行的单位执行。也就是说。互斥是要保证临界资源在某一时刻只被一个进程访问。
同步:异步环境下的一组并发进程因直接制约而互相发送消息,进行互相合作、互相等待,使得各自进程按一定得速度执行的过程成为称为进程同步。也就是说,进程之间是异步执行的,同步即是使个进程按一定得制约顺序和速度执行。
(2)、实质
共享资源的互斥使用就是限定并发进程互斥进入相关临界区
(3)、实现临界区管理的方法
-
标志方式
-
上锁方式
-
PV操作
-
管程方式
2、临界资源/临界区
(1)、定义
临界资源:在某段时间内只能允许一个进程使用的共享资源
临界区:把每个程序中访问临界资源的代码称为临界区
(2)、实现互斥的同步机制必须遵守四条原则
-
空闲让进:当进程处于临界区,表明临界资源处于空闲状态,应允许一个请求进入临界区的进程立即进入自己的临界区,以有效的利用临界资源
-
忙则等待:当已有进程进入临界区,表明临界资源正在被访问,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥访问
-
有限等待:对要求的访问临界资源的进程,应保证在有限的时间内进入自己的临界区,以免陷入“死等”状态
-
让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态
(3)、临界区调度原则
-
一次之多一个进程能够进入临界区内执行
-
如已有进程在临界区,其他试图进入的进程应等待
-
进入临界区内的进程应在有限时间内退出,以便让等待进程中的另一个进入
六、信号量机制
1、定义
信号量是最早出现的用来解决进程同步与互斥问题的机制。
信号量(Saphore)由一个值和一个指针组成,指针指向等待该信号量的进程,信号量的值表示相应资源的使用情况。
信号量 S>=0 时,S 表示可用资源的数量,执行一次P操作意味着请求分配一个资源,因此 S 的值减 1 ;
信号量 S<0 时,表示已经没有可用资源,S 的绝对值表示当前等待该资源的进程数,请求者必须等待其他进程释放该类资源才能继续运行,而执行一个V操作意味着释放一个资源,因此 S 的值加 1 ;
若 S<0 ,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。
注意,信号量的值只能通过PV操作来改变进程三个状态之间的转换是通过PV操作和信号量来控制的,其中信号量起到了很重要的作用。
2、信号量分类
(1)、整形信号量(wait&signal操作或P、V操作)
一种实现进程互斥与同步的有效方法,包含P操作与V操作。
P操作:使 S=S-1 ,若 S>=0 ,则该进程继续执行,否则排入等待队列。
V操作:使 S=S+1 ,若 S>0 ,唤醒等待队列中的一个进程。
使用PV操作实现进程同步时应该注意的问题有:
同一信号量的P、V操作要成对出现
信号量的初始值与相应资源的数量有关,也与P、V操作在程序中出现的位置有关
我们要首先分析出进程间的制约关系,在保证进程间有正确同步关系的情况下,确定哪一个进程先执行,哪一个进程后执行,彼此间应该用什么信号量来协调
(2)、记录型信号量
(3)、AND型信号量
AND同步机制基本思想是:将进程在整个运动过程中需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放。
3、信号量的应用
-
-
利用信号量实现进程互斥
-
利用信号量实现前趋关系
-
七、管程
1、管程机制
是由一组局部的共享变量、对局部变量进行操作的一组操作过程以及对局部变量进行初始化的语句序列构成的一个软件模块
2、管程特点
-
模块化:管程内的局部变量只能被局部于管程内的过程所访问,反之,局部于管程内的过程只能访问管程内的变量和和形式参数
-
隐蔽性:任何进程只能通过调用管程提供的过程入口进入管程
-
互斥性:任一时刻,最多只能有一个进程在管程中执行
3、管程与进程的区别
-
-
虽然都定义了数据结构,但进程定义的是私有数据结构PCB,管程定义的是公有数据结构
-
都存在对数据结构上的操作,但进程是由顺序程序执行有关操作,管程主要是进行同步操作和初始化操作
-
设置进程的目的在于实现系统的并发性,而管程的设置则是解决共享资源的互斥使用问题
-
进程通过调用管程中的过程对共享数据结构实行操作,该过程就通常的子程序一样被调用,因为管程被称为被动工作方式,进程则为主动工作方式
-
进程之间能并发执行,而管程不能与其调用者并发
-
进程具有动态性,由“创建”而产生,由“撤销”而消亡,而管程则是操作系统中的一个资源管理模块,供进程调用
-