2. 作业管理
2.1 进程调度
进程调度是计算机通过决策哪个就绪进程可以获得CPU使用权。在新的进程进来前首先要保留旧进程的运行信息,然后选择新进程并配置运行环境。进程的调度上可以分为抢占式调度和非抢占式调度。顾名思义,抢占式就是线程没有完全执行完就进行切换,当然还要保存旧进程的上下文信息,非抢占式直到进程完成工作或者IO阻塞才让出处理器。
抢占式调度 | 非抢占式调度 | |
---|---|---|
系统开销 | 频繁切换、开销大 | 切换次数少、开销小 |
公平性 | 相对公平 | 不公平 |
应用 | 通用系统 | 专用系统 |
2.2 调度算法
批处理系统(没有太多用户操作,调度算法目标是保证吞吐量和周转时间)
- 先来先服务: 按照请求顺序进行调度。
- 短进程优先(非抢占式): 选择就绪队列中估计运行时间最短的进程进行优先调度。(长作业可能饿死)
- 短进程优先(抢占式): 相较于非抢占式,可能出现新的进程打断当前进程的运行状态。
交互式系统(有大量的用户操作,调度算法目标是进行快速响应)
- 时间片轮转: 按先来先服务的原则排队,但要将进程分割,每次执行一个时间片,收到时间中断后,停止进程并送往队尾。
- 时间片过长会影响实时性
- 时间片过短会将大量时间浪费在进程切换上
- 优先级调度: 每个进程都有优先级,按优先级调度。当低优先级的进程长时间得不到运行可以适当提高其优先级。
- 多级反馈队列: 多级队列是为这种需要连续执行多个时间片的进程考虑,它设置了多个队列,每个队列时间片大小都不同。进程在第一个队列没执行完,就会被移到下一个队列。队列的优先级也不同,只有高优先级的队列没有进程在排队才能调度当前队列上的进程。可看成是时间片轮转调度算法和优先级调度算法的结合。
2.3 死锁
2.3.1 死锁条件
- 互斥条件:进程对资源的使用是排他性使用,资源只能被一个进程使用,其他进程必须等待。
- 请求保持条件:进程至少保持一个资源,又提出新的资源要求,但该资源在被阻塞的进程那里。
- 不可抢占条件:资源不能只能由进程自身释放。
- 环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。
2.3.2 预防死锁
上述四个条件破坏其中一个即可。
- 破坏互斥条件
例如假脱机打印机技术允许若干个进程同时输出,唯一真正请求物理打印机的进程是打印机守护进程。 - 破坏占有和等待条件
一种实现方式是规定所有进程在开始执行前请求所需要的全部资源。 - 破坏不可抢占条件
- 破坏环路等待
给资源统一编号,进程只能按编号顺序来请求资源。
2.3.3 银行家算法
核心思想: 进程需要申请的资源是有限的,每次申请需要声明最大的资金量。在给进程资源时,当手中的资源可以满足进程的最大需要时,必须给进程资源。进程使用完资源之后,及时归还资源。
A、B、C
为所需资源种类,Pn
为进程编号。可发现P2
所需的资源是小于可分配资源的,所以系统会先将资源分配给P2
以让该进程尽快完成,尽快放出资源。P2
执行完全后,资源便会重新回到可分配资源上。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.