版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/winter_wu_1998/article/details/84001446
调度
-
何时需要调度
- 创建新的进程时
- 运行父进程还是子进程
- 进程退出时
- 进程阻塞时
- I/O中断结束后
- 创建新的进程时
-
调度算法目标
- 给所有进程公平的CPU份额
- 能够保证按照规定的策略执行
- 比如某些安全控制进程必须能够得到执行
- 保持系统的每个部分都忙碌
-
两种调度方式
- 抢占式
- 一个进程最多运行n ms, 如果还没运行结束,就会被始终中断,调用别的程序
- 非抢占式
- 一个进程可以运行任意时间知道他阻塞或者自愿放弃CPU
- 抢占式
-
常见调度算法
- 先进先服务
- 最短任务优先
- 轮转调度
- 一个任务最多只能运行规定时间
- 很难设置规定时间应该多长
- 优先级调度
- 低优先级进程可能会饥饿
- 彩票调度
- 无法防止低优先级用户运行大量小进程来获得更多的CPU资源的作弊手段
- 最短剩余时间优先
-
哲学家就餐问题
- 第一种解决方法是等待左右叉子空余,若有空余则立即拿起
- 如果所有人同时拿起左叉子就会死锁
- 第二种解决方法是拿起左叉子,如果有右叉子,就吃;如果没有,就放下左叉子,等待
- 如果所有人同时开始执行,则没人开始吃,死锁
- 这种可能性很小,但是对于核电站等要求十分可靠的应用则不行
- 第三种方法就时对第一种方法加个锁
- 但是这时只能允许一个哲学家进餐,效率太低
- 最后一种方法如下
- 第一种解决方法是等待左右叉子空余,若有空余则立即拿起
死锁
- 资源类型
- 可抢占资源
- 可以从拥有它的进程中抢占而不会产生副作用
- 储存器, 打印机
- 不可抢占资源
- 从占有她的进程抢占会产生副作用
- 正在刻录的光盘
- 可抢占资源
- 多个进程获取资源的顺序应该一致,否则可能会死锁
- 可能进程A获得资源1,而B获得资源2,然后每个进程都想请求另一个资源
- 死锁发生的必要条件
- 互斥条件
- 一个资源要么被分配给一个资源,要么可用
- 占有和等待条件
- 一个已经得到某个资源的进程可以继续请求别的资源
- 不可抢占条件
- 已经被分配给一个基础的资源不可被其他进程抢占,只能被该进程自己释放
- 环路等待条件
- 死锁发生时,会有一个环路产生,环路中的每个进程都要获取后一个进程的资源
- 互斥条件
- 死锁恢复方法
- 利用抢占恢复
- 利用回滚恢复
- 通过杀死进程直接恢复