操作系统:处理器调度

1、CPU资源的时分复用

进程切换: CPU资源的当前占用者切换。

  • 保存当前进程在PCB中的执行上下文(CPU状态);
  • 恢复下一个进程的执行上下文。

处理器调度:

  • 从就绪队列中挑选下一个占用CPU运行的进程
  • 从多个可用CPU中挑选就绪进程可使用的CPU资源

调度程序: 挑选就绪进程的内核函数。

  • 调度策略:依据什么原则挑选进程/线程?
  • 调度时机:什么时候进行调度?

2、调度算法

  • 先来先服务调度算法
    从就绪队列中选择最先进入该队列的进程,分配处理器,然后投入工作。FCFS算法适合CPU繁忙型作业。

  • 短作业(进程)优先算法
    该算法是对短作业或短进程优先调度的算法。该算法降低了平均周转时间和平均带权周转时间。但是该算法对长作业不利。

  • 高优先权优先调度算法
    根据作业或进程的优先权调度作业或者进程。而该算法又能分为非抢占式的和抢占式的。
    而优先权又有静态优先权和动态优先权。
    静态优先权是在创建进程时确定的,在进程运行期间不会变化。
    动态优先权可以随进程的推进而变化。
    在优先调度算法中还有个高响应比优先调度算法:优先权=(等待时间+要求服务时间)/要求服务时间。该算法既照顾了短作业,又考虑作业先后到达时间,不会使长作业等太长时间。

  • 基于时间片的轮转调度算法
    给进程分配一个时间片段,当时间片段一过,把处理器交给别的进程。

  • 多级反馈队列调度算法
    该算法首先会设置多个就绪队列(多种算法集成),每个队列的优先级不同,优先权高的队列中的进程分到时间片就小;根据FCFS对每个队列中的进程进行排队;当第一队列空闲后,调度程序才调度第二队列中的进程。

    • 时间片大小随优先级级别增加而增加;
    • 进程在当前的时间片没有完成,则降到下一个优先级;
    • 特征:CPU密集型进程的优先级下降很快;I/O密集型进程停留在高优先级。

3、死锁

死锁是多个进程在争夺资源的过程中造成的僵局。
例如:A和B进程都需要资源S1和S2,当A获得了S1,B获得了S2,但是两个人都不释放获得的资源,但是也都不能执行,这就造成了死锁。

产生死锁原因:
①资源竞争:竞争非剥夺性资源(获得后不能强行回收的资源)、竞争临时性资源(由一个进程产生,被另一个进程用后便无用的资源)
②进程间推进顺序非法

产生死锁的必要条件:
①互斥条件
②持有并等待条件
③非抢占条件
④循环等待条件

处理死锁的方法:
①预防死锁:
主要是破坏产生死锁条件中的234 三个条件。但是可能会造成资源的浪费,吞吐量的降低。
②避免死锁
避免死锁和预防死锁是不一样的。预防死锁是消除产生死锁的条件,而避免死锁是预测会不会造成死锁,如果预测到会造成死锁,那么不进行接下来的操作。
最常见避免死锁的方式是银行家算法:
银行家算法的基本思想:当一个进程请求资源时,如果资源足够,那么试着把这资源分配给这个进程,预测这个进程结束释放资源,看剩下的资源是否能给多个进程中的其中一个进程用,如此往复循环,看所有进程是否都能获得资源,如果可以,那么就是预测成功,把资源分配给这个进程,如果预测不成功,收回刚才分配的资源。
③检测死锁
检测死锁首先要有资源分配的图,然后再简化资源分配图,如果资源分配图不能简化,那么就是有死锁。
④解除死锁
如果检测到了死锁,那么就要进行死锁的解除。
死锁的解除办法有:剥夺资源、撤销进程

4、进程间通讯:

  • 信号(sign)
  • 管道(pipe:|)
  • 消息队列
  • 共享内存(快,不同步)

猜你喜欢

转载自blog.csdn.net/olizxq/article/details/82961298