一、进程管理
1.1、引入进程的目的
为了更好地描述和控制程序并发执行,实现操作系统的并发性和共享性;进程是动态的,程序是静态的
1.2、定义
是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位(前提是只有进程,没有线程)
1.3、组成
- PCB:保存进程运行期间相关的数据,是进程存在的唯一标志(常驻内存)
- 程序段:能被进程调度到CPU的代码
- 数据段
1.4、★进程的状态
- 状态种类
①创建状态:进程正在被创建
②就绪态:进程处于准备运行的状态,进程获得了除了CPU之外的一切所需资源,一旦得到CPU即可运行
③运行态:进程正在占用CPU
④阻塞态:进程因为某种原因放弃CPU使用权,暂时停止运行。直到进程进入就绪态才有机会转到运行态
⑤结束状态:进程正在从系统消失,调出内存 - 状态变化
①就绪态—>运行态:进程调度
②运行态—>就绪态:超时,分时操作系统分配时间片,时间片用完
③运行态—>阻塞态:进程需要的某一资源还没有准备好
④阻塞态—>就绪态:进程等待的时间到来时
⑤进程状态转换图
1.5、线程(多个线程组成了进程)
- 引入目的:为了更好的使用多道程序并发执行,提高资源利用率和系统吞吐量
- 特点:是程序执行的最小单位,基本不拥有任何系统资源(调度的基本单位)
- 线程不拥有任何资源,所以资源分配的基本单位是进程
二、★处理机调度
2.1、概念
对处理机进行分配。即从就绪队列中按照一定的算法(公平、高效)选择一个进程并将处理机分配给它运行,以实现进程并发执行。
2.2、分类
- 高级调度(作业调度):次数少(从辅存将作业调入内存,作业只有一次调入内存和一次调出内存)
- 中极调度(内存对换):次数中等(暂时不能用到的进程调到外存等待,具备条件的证据状态调入内存)
- 低级调度(进程调度):次数多(按照某种算法把就绪队列中的进程调入内存)
2.3、调度方式
- 剥夺式:剥夺获得处理机的权利
- 非剥夺式:进程一处理完才能使用
2.4、★调度准则
- CPU利用率:高好
- 系统吞吐量:单位时间内CPU完成作业的数目
- 周转时间:作业完成时间-作业提交时间
- 等待时间:进程处于等待处理机状态的时间之和
- 响应时间:从提交到第一次开始运行的时间
2.5、★算法
- 先来先服务算法:按照到达时间的先后顺序调度
- 短作业优先算法:哪个作业短,哪个先优先调度
- 优先级调度算法:优先级从高到低调度
- 高响应比优先调度算法:响应比=(运行时间+等待时间)/等待时间
- 时间片轮转算法:分配一个时间片,进程按时间片轮转,剥夺的
- 多级反馈队列调度算法:多个队列,每个队列的优先级都不一样
三、★进程同步
3.1、引入原因
协调进程之间的相互制约关系
3.2、制约关系
- 同步:直接制约关系。是指为完成某种任务而简历的两个或多个进程,这些进程因为需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。
- 互斥:间接制约关系。当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一个进程才允许去访问此临界资源。{a想要用资源1,b想要用资源1,a已经用了资源1,b必须等到a用完了退出之后才可以}
3.3、临界资源
一次只允许一个进程使用的资源(打印机、共享缓冲区、共享变量、共用队列)
3.4、临界区
在每个进程中访问临界资源的那段程序
3.5、临界区互斥
- ★原则
①空闲让进:如果有若干进程要求进入空闲的临界区,一次只允许一个进程进入
②忙则等待:任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其他所有试图进入临界区的进程必须等待
③有限等待:进入临界区的进程要在有限时间内退出,以便其它进程能及时进入自己的临界区
④让权等待:如果进程不能进入自己的临界区,则应让出CPU,避免进程出现“忙等”现象 - 基本方法:信号量——PV操作
3.6、信号量
- 定义:信号量机制是一种有效实现进程同步和互斥的工具)
- 物理意义:
①信号量的值大于0:表示当前资源可用数量
小于0:其绝对值表示等待使用该资源的进程个数
②信号量的初值为非负的整数变量,代表资源数
③信号量值可变,但仅能由PV操作来改变
3.7、★PV操作原语
- P操作原语P(S)
①P操作一次,S值减1,即S=S-1(消耗一个资源);
②如果S≥0,则该进程继续执行;如果S<0,表示无资源,则该进程进入阻塞态,把相应的PCB连入该信号量队列的末尾,并放弃处理机,进行等待(直至另一个进程执行V(S)操作) - V操作原语V(S)
①V操作一次,S值加1,即S=S+1(释放一个资源)
②如果S>0,表示有资源,则该进程继续执行;如果S≤0,则事放信号量队列上的第一个PCB对应的进程(阻塞态改为就绪态),执行V操作的进程继续执行
四、死锁
4.1、产生的原因
1. 系统资源的竞争
通常系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的需要,使得进程在运行过程中,会因争夺资源而陷入僵局,如磁带机、打印机等。只有对不可剥夺资源的竞争才可能产生死锁,对可剥夺资源的竞争是不会引起死锁的。
2. 进程推进顺序非法
进程在运行过程中,请求和释放资源的顺序不当,也同样会导致死锁。例如,并发进程P1、P2分别保持了资源R1、R2,而进程P1申请资源R2,进程P2申请资源R1时,两者都会因为所需资源被占用而阻塞。
4.2、定义
多个进程因竞争资源而造成的一种僵局,如果没有外力,这些进程将无法推进
4.3、死锁产生的必要条件
- 互斥条件:进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。
- 不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放(只能是主动释放)。
- 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求。而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
- 循环等待条件:存在一 种进程资源的循环等待链,链中每一个进程已获得的资源同时被链中下一个进程所请求。
当死锁产生的时候一定会有这四个条件, 有一个条件不成立都不会造成死锁。其中互斥使用资源时无法破坏的。(4个条件发生,不一定死锁)
4.4、解决方法
-
预防死锁
①破坏互斥条件
如果允许系统资源都能共享使用,则系统不会进入死锁状态。但有些资源根本不能同时访问,如打印机等临界资源只能互斥使用。所以,破坏互斥条件而预防死锁的方法不太可行,而且在有的场合应该保护这种互斥性。
②破坏不剥夺条件
当一个已保持了某些不可剥夺资源的进程,请求新的资源而得不到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请。这意味着,一个进程已占有的资源会被暂时释放,或者说是被剥夺了,或从而破坏了不可剥夺条件。
③破坏请求和保持条件
—采用预先静态分配方法,即进程在运行前一次申请完它所需要的全部资源,在它的资源未满足前,不把它投入运行。一旦投入运行后,这些资源就一直归它所有,也不再提出其他资源请求,这样就可以保证系统不会发生死锁。
—缺点:系统资源被严重浪费,其中有些资源可能仅在运行初期或运行快结束时才使用,甚至根本不使用。而且还会导致“饥饿"现象,当由于个别资源长期被其他进程占用时,将致使等待该资源的进程迟迟不能开始运行。
④破坏循环等待条件
为了破坏循环等待条件,可采用顺序资源分配法。首先给系统中的资源编号规定每个进程,必须按编号递增的顺序请求资源,同类资源一次申请完。也就是说,只要进程提出申请分配资源Ri,则该进程在以后的资源申请中,只能申请编号大于Ri的资源。 -
避免死锁
在资源的动态分配过程中,用某种方法防止系统进入不安全状态,从而避免死锁。
①安全状态
②银行家算法
思想:把操作系统看做是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量(max>avaiable),如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。
若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。数据结构描述
可利用资源矢量Available:含有m个元素的欺组,其中的每一个元素代表一类可用的资源数目。Available[j]=K, 则表示系统中现有Rj类资源K个。
最大需求矩阵Max:为nm矩阵,定义了系统中n个进程中的每一个进程对m类资源的最大需求。Max[i, j]=K,则表示进程i需要Rj类资源的最大数目为K。
分配矩阵Allocation:为nm矩阵,定义了系统中每一类资源当前已分配给每一进程的资源数。Allocation[i, j]= K,则表示进程i当前已分得Rj类资源的数目为K。
需求矩阵Need:为n*m矩阵,表示每个进程尚需的各类资源数。Need[i, j]=K,则表示进程i还需要Rj类资源的数目为K。
上述三个矩阵之间的关系:Need[i,j]=Max[i,j]-Allocation[i,j] -
检测死锁:死锁定理
-
解除死锁
①资源剥夺法
②撤销进程法
③进程回退法:回到原先没发生死锁的状态