一、进程
1.1.进程的定义
- 程序关于某个数据集合的一次执行过程
1.2.进程的特征(与程序比较)
- 结构特征
- 进程控制块(PCB) + 程序 + 数据 = 进程实体
- 动态性 -- 最基本特征
- 进程:进程实体的一次执行过程,有生命周期
- 程序:程序是一组有序指令的集合,是静态的概念
1.3.进程的三种基本状态
- 就绪状态(Ready)
- 进程已获得除CPU之外的所有必需的资源,一旦得到CPU控制权,立即可以运行
- 运行状态(Running)
- 进程已获得运行所必需的资源,它正在处理机上执行
- 阻塞状态(Blocked)
- 正在执行的进程由于发生某时间而暂时无法执行时,便放弃处理机而处于暂停状态,称该进程处于阻塞状态或等待状态
1.4.进程的五种状态
- 引入挂起状态后,增加了挂起状态(静止状态)到非挂起状态(活动状态)的转换,或者相反
二、进程互斥与同步
2.1.进程间两种形式的制约关系
- 间接相互制约关系 --- 源于资源共享
- 直接相互制约关系 --- 源于进程合作
2.1.临界资源
- 临界资源(Critical Resource):把一段时间内只允许一个进程访问的资源称为临界资源或独占资源
- 临界区(Critical Section):每个进程中访问临界资源的那段代码称为临界区
三、信号量机制
3.1.基本概念
- 信号量时OS提供的管理共有资源的有效手段
- 信号量时一个整数,当信号量大于等于零时,代表可供并发进程使用的资源数量,当信号量小于零时,表示处于阻塞态的进程的个数
3.2.信号量的操作
- Wait操作:
- 申请操作,减量操作,S.value:=S.value-1
- 当S.value<0时,表示资源分配完,进行自我阻塞
- Signal操作:
- 释放资源,增量操作,S.value:=S.value+1
- 当S.value≦0,唤醒S.L链表中的等待进程
四、信号量的应用
4.1.利用信号量实现进程互斥(模式)
- 为使多个进程互斥的访问某临界资源,须为该资源设置一互斥信号量mutex,并设其初始值为1,然后将各进程访问资源的临界区CS置于wait(mutex)和signal(mutex)之间即可
4.2.利用信号量实现前驱关系(模式)
- 设有两个并发执行的进程P1和P2,P1中有语句S1,P2中有语句S2,希望在S1执行后再执行S2
- 使进程P1和P2共享一个公用信号量S,并赋予其初值为0
- 进程P1: S1; Signal(S);
- 进程P2:Wait(S); S2;
4.3.利用记录型信号量实现同步(模式)
- p1,p2两进程因合作完成一项任务而共用一个变量x。进程p2将处理结果送入x;进程p1将x的结果打印
- 即:p2: x=处理结果;
- p1: Print(x);
五、进程调度
5.1.基本概念
- 也称短程调度(Short-Term Scheduling),用来决定就绪队列中的哪个进程应获得处理机,然后再由分派程序把处理机分配给该进程
5.2.非抢占方式(Non-preemptive Mode)
- 一旦把处理机分配给某进程后,便让该进程一直执行,直至该进程完成或发生某事件而被阻塞时,才把处理机分配给其他进程,绝不允许进程抢占已分配出去的处理机
- 评价:实现简单,系统开销小;适用于大多数的批处理OS,但在要求比较严格的实时系统中,不宜采用这种调度方式
5.3.抢占方式(Preemptive Mode)
- 允许调度程序根据某种原则,区暂停某个正在执行的进程,将处理机重新分配给另一进程
- 抢占原则:
- 时间片原则:各进程按时间片运行,一个时间片用完时,停止该进程执行重新进行调度
- 短作业(进程)优先原则:短作业(进程)可以抢占长作业(进程)的处理机
- 优先权原则:优先权高的可以抢占优先权低的进程的处理机
六、调度算法
6.1.分类
- 先来先服务
- 短作业(进程)优先调度算法
- 高优先权优先调度算法
- 时间片轮转调度算法
6.2.先来先服务调度算法(FCFS)
- 是一种最简单的调度算法,既可用于作业调度,也可用于进程调度
- 进程调度采用FCFS算法时,每次调度都从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之运行
- FCFS算法比较有利于长作业(进程),而不利于短作业(进程)
6.3.短作业(进程)优先调度算法(SJ(P)F)
- 对短作业或短进程优先调度的算法,可以分别用于作业调度和进程调度
- 短作业优先(SJF)的调度算法:从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行
- 短进程优先(SPF)调度算法:是从就绪队列中选出一估计运行时间最短的进程,将处理机分配给它,使它立即运行
- SJF调度算法的优缺点:
- 优点:有效降低作业的平均等待时间,提高系统吞吐量
- 缺点:对长作业不利
- 该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)会被及时处理
- 由于作业(进程)的长短只是根据估计执行时间定的,主观因素较大,不一定能真正做到短作业优先
6.4.高优先权优先调度算法
- 为照顾紧迫性作业,使之在进入系统后便获得优先处理,引入了最高优先权优先(FPF)调度算法
- 此算法常用于批处理系统中,作为作业调度算法,也作为多种操作系统中的进程调度算法,还可用于实时系统中
- 优先权的类型:
- 静态优先权:在创建进程时确定的,在进程的整个运行期间保持不变。利用某一范围的整数来表示(0~7),又称为优先数
- 动态优先权:在创建进程时所赋予的优先权可以随进程的推进或随其等待时间的增加而改变
- 高响应比优先调度算法
- 优先权 = (等待时间+要求服务时间)/要求服务时间
- 或Rp = 响应时间/要求服务时间
- 从上式可以看出:
- 如作业等待时间相同,则要求服务的时间愈短优先权愈高,所以该算法利于短作业
- 当要求服务的时间相同,作业优先权的高低决定于其等待时间的长短,所以时先来先服务
- 对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长也可获得处理机
6.5.时间片轮转调度算法
- 每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间
- 如果在时间片结束时进程还没有运行结束,则CPU将被剥夺并分配给另一进程,该进程到就绪队列队尾重新排队
- 如果进程在时间片内阻塞或结束,则CPU当即进行切换
七、死锁
7.1.基本概念
- 是指多个进程在运行过程中因剥夺资源而造成的一种僵局,当进程处于这种状态时,若无外力作用,它们都将无法再向前推进
7.2.产生死锁的原因
- 竞争资源:当系统中供多个进程共享的资源如打印机、公用队列等,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁
- 可剥夺性资源:资源分配给进程后可以被高优先级的进程剥夺,如CPU、主存
- 不可剥夺性资源:分配给进程后只能在进程用完后才释放的资源,如磁带机、打印机等
- 进程间推进顺序非法:进程在运行过程中,请求和释放资源的顺序不当,也同样会导致产生死锁
7.3.产生死锁的必要条件
- 互斥条件:进程访问的时临界资源,即在一段时间内资源只由一个进程占用,如果此时还有其他进程请求该资源,则请求者只能等待,直至占有该资源的进程用完释放
- 请求和保持条件:一进程在请求新的资源的同时,保持对已分配资源的占有
- 不可剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放
- 环路等待条件:指在发生死锁时,必然存在一个进程--资源的环形链
7.4.处理死锁的基本方法
- 预防死锁:设置某些限制条件,去破坏产生死锁的四个必要条件的一个或几个
- 摒弃“请求和保持”条件
- 摒弃”不剥夺“条件
- 摒弃”环路等待“条件
- 避免死锁:防止系统进入不安全状态
- 银行家算法避免死锁
- 检测死锁
- 解除死锁