「这是我参与2022首次更文挑战的第39天,活动详情查看:2022首次更文挑战」。
处理机调度
按某种算法选择一个进程将处理机分配给它就叫处理机调度。
有高、中、低三个层次:
高级调度(作业调度):按照某种规则,从后备队列中选择合适的作业将其调入内存,并为其创建进程。
外存 → 内存(面向作业),低频率。
中级调度(内存调度):按照某种规则,从挂起队列中选择合适的进程将其数据调回内存。
外存 → 内存(面向进程),中等频率。
低级调度(进程调度):按照某种规则,从就绪队列中选择一个进程为其分配处理机。
内存 → CPU,高频率。
七状态模型:
进程调度的时机
主动放弃:1. 进程正常终止 2. 运行过程中发生异常而终止 3. 主动阻塞(如等待I/O)。
被动放弃:1. 分给进程的时间片用完 2. 有更紧急的事情需要处理(如I/O中断) 3. 有更高优先级的进程进入就绪队列
何时不能进行进程调度?
在处理中断的过程中,进程在操作系统内核程序临界区,原子操作过程中。
调度算法(重点)
- 先来先服务(FCFS)
- 短作业优先(SJF)
- 高响应比优先(HRRN)
- 时间片轮转调度算法(RR)
- 优先级调度算法
- 多级反馈队列调度算法 这些算法是操作系统中的重要内容。
死锁
在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是“死锁”。 发生死锁后若无外力干涉,这些进程都将无法向前推进。就相当于两个人同时拿的各自的锁和对方的钥匙,只有先解开锁的人才能获胜,所以两个人都不愿意将钥匙还给对方,钥匙就是这里的资源。
死锁产生的必要条件:互斥、不被剥夺、请求和保持、循环等待。 死锁的处理策略:预防为主,预防、避免、死锁的检测和拆除。
预防死锁
静态策略:预防死锁(不允许死锁发生)。
破坏互斥条件:将临界资源改造为可共享使用的资源,缺点是可行性不高,很多时候无法破坏互斥条件
破坏不可剥夺条件:申请的资源得不到满足时,立即释放拥有的所有资源,申请的资源被其他进程占用时,由操作系统协助剥夺。实现复杂,剥夺资源可能导致部分工作失效,反复申请和释放导致系统开销大,可能导致饥饿。
破坏请求和保持条件:运行前分配好所有需要的资源,之后一直保持,缺点是资源利用率低,可能导致饥饿。
破坏循环等待条件:给资源编号,必须按编号从小到大的顺序申请资源,缺点是不方便增加新设备,会导致资源浪费,用户编程麻烦。
动态策略:避免死锁(不允许死锁发生)。
最经典的就是银行家算法。
检测和解除(是允许死锁的发生)。