资源分配与调度
基本概念
资源是指执行一个用户程序所需要的全部硬件、软件和数据。系统的一个重要功能是将它所管理的各种资源,按照用户要求在所有用户之间进行合理的分配。
资源管理的任务:
不论是软件还是硬件资源,对它们的管理都应包含一下四个方面内容:
-
资源数据结构的描述
-
确定资源的分配原则和调度原则
-
执行资源分配
-
存储控制和安全保护
资源分配策略
先请求先服务(FIFO)
死锁
在两个或多个并发进程中,如果每个进程都持有某种资源而又都等待着别的进程释放它或它们现在保持的资源,在未改变这种状态之前都不能向前推进,称这一组进程产生了死锁。
产生死锁的原因和必要条件
-
互斥条件 涉及的资源是非共享的,即一次只有一个进程使用
-
不剥夺条件(非抢占) 进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放
-
占有并等待(部分分配) 进程每次申请它所需要的一部分资源,在等待一新资源的同时,进程继续占用已分配到的资源。
-
环路条件(循环等待) 存在一种进程的循环链,链中的每一个进程已获得的资源同时被链中下一个进程所请求。
死锁的避免
- 有序资源分配法
做法:系统中所有的资源都给定一个唯一的号码(如输入机1 ,图像输入设备2,打印机3,磁带机4,磁盘5等),所有分配请求必须以上升的次序进行。
原理:破坏了环路条件
缺点:进程实际需要资源的顺序不一定与资源的编号相一致,因而仍然会造成资源的浪费。
- 银行家算法
做法:当进程申请一组资源时,该算法需要检查申请者对各类资源的最大需求量,如果系统现存的各类资源的数量可以满足当前它对各类资源的最大需求量时,就满足当前的申请;否则,进程必须
等待,直到其他进程释放足够的资源为止。
参考
https://en.wikipedia.org/wiki/Banker%27s_algorithm