进程管理2

147 阅读3分钟

「这是我参与2022首次更文挑战的第39天,活动详情查看:2022首次更文挑战」。

处理机调度

按某种算法选择一个进程将处理机分配给它就叫处理机调度。

有高、中、低三个层次:

高级调度(作业调度):按照某种规则,从后备队列中选择合适的作业将其调入内存,并为其创建进程。
                    外存 → 内存(面向作业),低频率。
中级调度(内存调度):按照某种规则,从挂起队列中选择合适的进程将其数据调回内存。
                    外存 → 内存(面向进程),中等频率。
低级调度(进程调度):按照某种规则,从就绪队列中选择一个进程为其分配处理机。
                    内存 → CPU,高频率。

七状态模型:

屏幕截图 2022-02-25 163506.jpg

进程调度的时机

主动放弃:1. 进程正常终止 2. 运行过程中发生异常而终止 3. 主动阻塞(如等待I/O)。
被动放弃:1. 分给进程的时间片用完 2. 有更紧急的事情需要处理(如I/O中断) 3. 有更高优先级的进程进入就绪队列

何时不能进行进程调度?

 在处理中断的过程中,进程在操作系统内核程序临界区,原子操作过程中。

调度算法(重点)

  • 先来先服务(FCFS)
  • 短作业优先(SJF)
  • 高响应比优先(HRRN)
  • 时间片轮转调度算法(RR)
  • 优先级调度算法
  • 多级反馈队列调度算法 这些算法是操作系统中的重要内容。

死锁

在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是“死锁”。 发生死锁后若无外力干涉,这些进程都将无法向前推进。就相当于两个人同时拿的各自的锁和对方的钥匙,只有先解开锁的人才能获胜,所以两个人都不愿意将钥匙还给对方,钥匙就是这里的资源。

image.png

死锁产生的必要条件:互斥、不被剥夺、请求和保持、循环等待。 死锁的处理策略:预防为主,预防、避免、死锁的检测和拆除。

预防死锁

静态策略:预防死锁(不允许死锁发生)。

破坏互斥条件:将临界资源改造为可共享使用的资源,缺点是可行性不高,很多时候无法破坏互斥条件
破坏不可剥夺条件:申请的资源得不到满足时,立即释放拥有的所有资源,申请的资源被其他进程占用时,由操作系统协助剥夺。实现复杂,剥夺资源可能导致部分工作失效,反复申请和释放导致系统开销大,可能导致饥饿。
破坏请求和保持条件:运行前分配好所有需要的资源,之后一直保持,缺点是资源利用率低,可能导致饥饿。
破坏循环等待条件:给资源编号,必须按编号从小到大的顺序申请资源,缺点是不方便增加新设备,会导致资源浪费,用户编程麻烦。

动态策略:避免死锁(不允许死锁发生)。

最经典的就是银行家算法。

检测和解除(是允许死锁的发生)。