进程的管理与调度
进程的概念
- 定义:进程是具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配、调度和保护的独立单位。
- 创建方式:系统程序模块统一创建;由父进程创建。
- 进程的特性:动态性、并发性、独立性、制约性、异步性、结构性
进程和程序的区别
- 进程更能真实第描述并非,程序不能;
- 进程是由程序、数据和控制块三部分组成的;
- 程序是静态的,进程是动态的;
- 进程是有生命周期,有诞生有消亡,程序相对长久;
- 一个程序可以对应多个进程,反之亦然;
- 进程具有创建其他进程的功能,程序没有。
进程的状态与转换
运行态:进程占有CPU,并在CPU上运行
就绪态:一个进程已经具备运行条件,由于无CPU暂时不能运行
等待态:因等待某种事件的发生而暂时不能运行的状态
进程控制块PCB
- 进程控制块是操作系统为了管理进程而设置的一个数据结构,用来记录进程的外部特征,描述进程的运动变化过程。
- PCB是系统感知进程存在的唯一标志,进程与PCB是一一对应的。
通常包含如以下的信息:
- 进程标识符(唯一)
- 进程当前状态,通常同一状态的进程会被放到同一个队列;
- 进程的程序和数据地址;
- 进程资源清单。列出所拥有的除CPU以外的资源记录。
- 进程优先级。反应进程的紧迫程度
- CPU现场保护区。记录中断时的CPU状态
- 进程队列的PCB的链接字。
- 进程相关的其他信息。记账用的,如占用CPU多长时间等。
作业的调度和管理
作业的概念
作业是用户一次计算过程中,或者一次事务处理过程中,要求计算机系统所做工作的总称。
作业和进程的区别
- 作业是用户向计算机提交任务的任务实体。进程是完成用户任务的执行实体。
- 一个作业可由多个进程组成,且必须至少由一个进程组成。反之不成立。
- 作业的概念主要用在批处理系统中,进程的概念用在几乎所有的多道程序系统中。
作业调度算法
T周转时间=结束时间-进入时间
W带权周转时间=周转时间/估计运行时间
- FCFS:先来先服务,按照作业提交的先后次序分派CPU;
- SJF:最短作业优先算法,对预计执行时间短的作业优先分派处理机,通常后来的短作业不抢先正在执行的作业(无抢占式);
- SRTF:最短剩余时间优先算法,(抢占式SJF)如果新作业需要的CPU时间比当前正在执行的作业剩余下来还需CPU的时间短,SRTF强行赶走当前正在执行的作业;
- HRN:最高响应比优先算法,R=作业周转时间/作业处理时间=1+作业等待时间/作业处理时间
注意:单道程序环境和多道程序环境下,作业调度算法负责分配哪一个作业优先调入内存,在内存中哪一个作业优先执行需要其他调度算法控制。
并发进程
进程的同步和互斥
- 进程互斥:针对某一共享资源同时只允许一个进程对其进行访问,对资源的使用具有唯一性和排它性,互斥并不考虑和限制对资源的访问顺序
- 进程同步:指系统中多个进程中发生的事件存在某种时序关系,需要相互合作,共同完成一项任务(直接作用)
- 互斥是同步的一种特例,同步已经实现了互斥。
临界区管理
- 系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源。在进程中涉及临界资源的程序段叫做临界区。
- 使用临界区的规则:①有空让进;②无空等待;③多中择一;④有限等待;⑤让权等待
信号量及P、V操作
- 信号量的定义:负责协调各个进程,以保证它们能够正确、合理的使用公共资源。(信号量是一个数据结构)
- 信号量的使用:信号量在使用时必须置一次且只能置一次初值,且初值不能为负数,并且只能执行P、V操作。
- 信号量及P、V操作的物理含义:
- S>0表示有S个资源可用;
- S=0表示无资源可用;
- S<0则|S|表示S等待队列中的进程个数;
- P(S)表示申请一个资源;
- V(S)表示释放一个资源
- P、V操作必须成对出现
- 当为互斥操作时,它们同处一个进程;
- 当为同步操作时,则不在同一进程中出现;
- 如果P(S1)和P(S2)两个操作在一起,一个同步P操作与一个互斥P操作在一起时,同步P在互斥P前,V操作顺序不重要。
- 经典生产者-消费者问题(同步问题)
- 多个生产者-消费者问题(互斥问题)
死锁的基本概念
- 死锁是指多个进程互不相让,都得不到足够的资源;饥饿是指一个进程长时间得不到资源
- 产生死锁的原因:因为资源不足(根本原因);进程运行推进的顺序不合适;资源分配不当等
- 产生死锁的四个必要条件:互斥使用(资源独占);不可强占(不可剥夺);请求和保持(部分分配,占有申请);循环等待
死锁的预防和避免
死锁的预防——解决死锁的静态方法
- 破坏“不可剥夺”条件;
- 破坏“请求和保持”条件;
- 破坏“循环等待”条件
死锁的避免——解决死锁的动态方法
银行家算法:n表示系统进程的个数,m表示资源类型的种类
- 可利用资源向量available[m]——长度为m的向量,代表每种资源的现有实例的数量。
- 最大需求矩阵max[n][m]——n*m矩阵,定义每个进程的最大需求量。
- 分配矩阵allocation[n][m]——n*m矩阵,定义每个进程现在已经分配的各类资源的实例数量。
- 需求矩阵need[n][m]——n*m矩阵,定义每个进程还需要的剩余的资源。
当一个进程申请使用资源的时候,银行家算法通过先“试探”分配给该进程资源,然后通过安全性算法判断分配后的系统是否处于安全状态,若不安全则试探分配作废,让该进程继续等待。
死锁的检测和解除
系统为死锁状态的充分条件:当且仅当“进程-资源分配图”无法化简(资源分配图化简:找一个非孤立点进程结点且只有分配边,去掉分配边,将其变成孤立结点;再把相应的资源分配给一个等待该资源的进程,即将某进程的申请边变成分配边)。
死锁的接触:资源剥夺法;撤销进程法