计算机操作系统 第二章下、调度算法

第一章 ​​操作系统的概念-CSDN博客

第二章上、进程-CSDN博客

第二章下、调度算法-CSDN博客

第三章、内存-CSDN博客

第三章下:分页、分段存储,虚拟内存-CSDN博客

第四章、文件管理软件实现-CSDN博客

第五章、文件管理硬件实现-CSDN博客

第六章、IO管理-CSDN博客

操作系统补充 上-CSDN博客

操作系统补充 下-CSDN博客


调度算法  用于进程调度

1、先来先服务算法FCFS:

非抢占式。公平,实现简单。对长时间作业有利,短时间作业体验差

对CPU繁忙型系统有利,对IO繁忙型系统不利

2、短作业优先算法:分为非抢占式的SJF和抢占式的SRTN。可能有进程饥饿

(1)短进程优先调度算法SJF(非抢占式)

(2)最短剩余时间优先算法SRTN(抢占式)

 

以上三个效率一个比一个高

3、高响应比优先算法HRRN(非抢占式):兼顾作业时间和等待时间

当正在运行的进程主动放弃CPU时,计算响应比

4、时间片轮转算法RR(注重响应时间)

每个进程实行一个时间片(时间片的长短可能不一样)。若一个进程在一个时间片内没有执行完,则剥夺CPU使用权(所以RR是抢占式),回到对位重新排队。

 

时间片大小选择很重要:如果时间片很大,进程的响应时间无法保证;如果时间片很小,则进程需要经过多次上下文切换和进程调度,增加了CPU在进程切换和进程调度上的开销,影响系统的吞吐量和CPU利用率等方面的性能

5、优先级调度算法

优先级有静态优先级和动态优先级     动态优先级:低优先级随等待时间增加,优先级增加

(1)抢占式

(2)非抢占式

6、多级反馈队列调度算法(抢占式)

缺点:可能饿死

综合上述所有算法的优点

具体流程P17

进程同步与互斥

进程有异步性的特征,也就是说并发执行的进程的进度不可预知(两个并发的进程有争夺的资源,谁饥饿不可预知)

同步也叫直接制约关系,指对为完成某一任务建立的多个进程的工作次序进行制约

互斥:我们把一个时间段内只允许一个进程使用的资源称为临界资源(如内存缓冲区,摄像头、打印机)。对临界资源的访问,必须互斥地进行。互斥,亦称间接制约关系。指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。

同步与互斥的区别:同步的进程占用统一资源是为了协调完成同一任务(如进程1写,进程2读);互斥仅仅是占用了统一资源,没有特定需要的先后顺序,两个进程完成的也不是同一个任务

互斥访问流程:

进入区:检查是否能进入临界区,能则上锁;临界区:访问临界资源;

退出区:解锁;

剩余区:其他处理

互斥访问遵循原则:空闲则进,忙则等待,有限等待(保证进程在有限的时间内能进入临界区),让权等待(等待时释放CPU)

进程互斥的软件实现方法

1、单标志法:

一个进程在访问完临界区后会把权限给另一个临界区(每个进程进入临界区的权限有其他进程赋予)

缺点:必须顺序访问,若当前turn=0,只有P0能访问,但P0不需要访问,那么即使P1需要访问,也只能等待。违背空闲则进原则

2、双标志先检查法:

缺点:进程是并行执行的,如果1526顺序,则两个进程同时访问临界区。违反忙则等待原则。          如果12步骤、56步骤是不可分割的原子操作,那就没问题了

3、双标志后检查法:

4、Peterson算法:

进程主动谦让。进程在判断能否进入临界区之前做了两件事:表明自己的进入意愿,表明自己的谦让意愿。像是孔融让梨,谁最后一次让,谁就后进入。

缺点:比前面三种好,但也没有遵循让权等待原则,即进程无法访问是在一直占用CPU执行while

考试可能会考别的算法,搞清算法在进入区做了哪些事(上面绿色的就是进入区内容)。考虑进入区做的事是否会产生问题(尤其是在进程并行运行的时候)。

进程互斥的硬件实现方法

1、中断屏蔽方法

不适用多处理机,因为关中断只对一个CPU核有效

2、TSL指令

类似于软件的双标志检查法,但因为是硬件实现的,所以检查和上锁两步像是原子操作,一气呵成。

优点:实现简单,适用于多核,不像软件那样有并行逻辑漏洞(硬件实现像是原子操作,但这不叫原子操作)  缺点:不满足让权等待,持续执行while

3、Swap/XCHG指令

与TSL指令的硬件实现不同,但逻辑效果一样

信号量机制

记住一对原语wait(s)和signal(s)简写为P(S)、V(S)。用于实现进入和退出操作

整型信号量(跟上面的TSL有啥区别??)

记录型信号量:将待进入进程放入“等待队列”,不用一直while,符合了让权等待原则

s.value--意为给进程预支分配一个资源,--后小于0说明已经没有空余资源,进程进入等待队列;有进程退出时s.value++,意为空余资源+1,++后s.value<=0说明等待队列里有进程(不为空),这个队列里的进程已经拿走了刚刚余出的资源,所以wakeup一个进程。

信号量实现进程互斥:

临界资源是一种特殊的资源,同一时刻只能有一个进程访问,所以将其信号量设为1,称为互斥信号量

注意对于多个不同的临界资源,要设置多个不同的互斥信号量

信号量实现进程同步:

同步含义复习: 即必须保证两个进程中的代码的执行顺序

实现方式:

对于代码4,2执行完前s=0所以无法执行。只有2执行完,V使得s++,P才能执行,进而4执行

信号量实现进程的前驱关系: 其实前驱关系就是复杂点的嵌套进程同步

     

经典进程同步互斥问题

生产者消费者问题:

分析题目,共需要三个信号量:一个互斥信号量表示临界资源,实现,两个同步信号量分别表示缓冲区空余量和缓冲区填装量(产品量)实现

实现:从实现代码中也可以看出:实现互斥是在一个进程中进行一对PV;实现同步是在两个进程中一个P操作一个V操作

程序中先进行同步PV在进行互斥PV。能不能改变顺序,先锁死,在对同步信号量进行加减?   不能,如图

假设运行生产者程序,锁死后发现空余量为零,不能P操作,则等待消费者执行空余量的V操作。但消费者执行时发现临界资源被锁死,只能等待生产者释放。形成死锁

因此互斥的P操作必须在同步P之后。V操作不会导致进程阻塞,两个V的顺序可以交换

能否消费者的使用产品放到互斥PV之间?  可以但这会增加临界资源占用时间,降低效率

多生产者多消费者问题:

分析:分析同步问题时,不能从单个进程的角度分析,而是从事件的角度分析:

 

所以对于本题目:

 

 

但这道题中如果去掉互斥PV

 

仍然能正常运行

如果盘子能发那个两个水果,那去掉PV肯定不行。也就是说若缓冲区大小为1,不需要互斥信号量。   考试保险起见,最好设置

读者写者问题:

多个读者可以同时访问文件,多个写者不能同时访问文件,读者写者不能同时访问,写者访问文件时要保证没有其他读者写者正在访问

核心问题:读进程对写进程互斥,对读进程不互斥

 

读进程:读进程运行时,判断自己是不是第一个读进程,如果是则上锁(锁住写进程)。如果不是第一个,则跳过P(rw)绕开P判断,不会被拦住。每个读进程都count++记录正在访问的读者数量。一个读进程结束后count--,并判断自己是不是最后一个读者,如果是则解锁(不是的话,锁一直在),之后写进程就可以访问了。

存在问题:count=0时,两个并行的读进程可能在一个count++前,另一个就完成了if判断导致上了两个锁(后面的if同理)。因此需要保证 连续执行。加互斥锁:

现有问题:如果一直有读者进入,那么写者就一直等待---饥饿

加一个写优先的锁

(对于被同一个锁挡住的进程,会先来后到)

当写进程执行p(w)后,又会被p(rw)挡住。之后的读进程和写进程会被P(w)挡住直到这个写进程执行完。待所有已经进入的读进程执行完(执行全部V(rw)使rw=1),该写进程开始执行。

哲学家进餐问题:

五个人,五支筷子,吃饭。左手边的筷子、右手边的筷子,两个临界资源。这种情况可能发生死锁(一人拿了一根筷子)。解决方法:加互斥锁:一个人拿左手和右手筷子两个动作连续执行

管程

死锁饥饿死循环的区别

死锁:每个进程都在占有资源的同时等待其他进程手里的资源。导致所有进程阻塞,无法向前推进。对不可剥夺资源的不合理分配可能会导致死锁

死锁产生的必要条件:

互斥条件:争抢的资源是互斥的,不能同时被多进程使用

不剥夺条件:资源只能被进程主动释放,不会被抢夺

请求保持条件:进程在占有至少一个资源的同时又在请求别的资源

循环等待条件:存在循环等待链(A等B,B等C,C等A)

静态策略---预防死锁:破坏产生死锁的四个条件中的一个或几个

破坏互斥条件:spooling技术

   

破坏不剥夺条件:

方案一:“我不干了,资源不要了”    方案二:“我必须干,资源都给我”

缺点:实现复杂,只适用于易保存易恢复的资源,反复申请释放降低效率,需要很多种资源的进程可能导致饥饿

破坏请求保持条件

采用静态分配方法,即进程在运行前一次申请(注意:申请不是占有)完它所需要的全部资源,在它的资源未满足前,不让它投入运行。一旦投入运行后,这些资源就一直归它所有,该进程就不会再请求别的任何资源了。

实现简单。缺点:有些资源可能只需要用很短的时间,因此如果进程的整个运行期间都一直保持着所有资源,就会造成严重的资源浪费。该策略也有可能导致进程饥饿: A需要资源1,B需要资源2。C需要这两种资源。若有多个A和B,一个A结束后,C和新的A都申请到了资源1,C还要申请资源2,而A需要的资源齐了,又开始运行,C又失去的资源1。只有AB同时完成,C才有可能凑齐资源开始运行。

破坏循环等待条件

缺点:1.不方便增加新的资源,因为可能需要重新分配所有的编号;2.进程实际使用资源的顺序可能和编号递增顺序不一致,导致资源浪费(如进程先用资源3再用资源1,但资源1一直被进程占有,处于空闲状态);3.编程麻烦。

动态策略---避免死锁

安全序列:

安全性算法:

用矩阵{a,b,c}表示某三种资源的量

银行家算法:

补充说明:实际进程运行中并非是一次性要求分配最大需求资源的,而是一点点的索要。系统有可能给进程1一点资源,又给了进程2一点资源……。安全型算法是银行家算法的一个步骤(第四步),用于评估第三步如果切实实施是否安全。

死锁的检测与解除

死锁的检测

资源分配图

P1P2是进程,R1R2是两类资源,点的数量是资源的总量,绿色的边是已分配,蓝色的边是进程需求(待分配)。图中P2还需要一个R1,但3个R1都已经分配出去了,所以P2暂时等待执行。P1还需要一个R2,正好剩余一个R2,所以P1可执行。

因此可以撤销P1的所有边。一个进程结束会将资源归还系统,使某些正在等待的进程开始进行,如图中P2就被激活

死锁的解除

资源剥夺:挂起(暂时放到外存)某些进程,抢占其资源

撤销进程:强制撤销部分死锁进程,释放资源

进程回退:将一个或多个死锁进程回退到足以避免死锁的地步

对谁动手?优先级低的,执行时间短的,快完成的,占用资源多的,批处理的

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值