第2章 进程与线程-爱代码爱编程
第2章 进程与线程
2.2 处理机调度
2.2.1 调度的概念
1、为什么要进行处理机调度?
进程的数量一般大于处理机的数量,想要计算机高效工作,就需要按照策略执行进程。
2、什么是处理机调度?
按照合适的策略有序的执行进程,以达到计算机高效工作的目的。
2.2.2 调度的实现
进程调度过程:
请求调度事件 -> 运行调度程序 -> 进程切换(上下文切换)
进程调度方式:
1、非抢占调度方式(非剥夺方式)
2、抢占调度方式(剥夺方式)
不能进行进程调度的情况:
1、在处理中断的过程中。
2、进程在操作系统内核临界区中。
3、其他想要完全屏蔽中断的原子操作过程中(加锁、解锁)。
上下文切换的流程:
1、挂起一个进程,保存CPU上下文,包括程序计数器和其他寄存器。
2、更新PCB信息。
3、把进程的PCB移入相应的队列,如就绪队列,阻塞队列。
4、选择另一个进程执行,并更新其PCB。
5、跳转到新线程PCB中的程序计数器所指向的位置执行。
6、恢复处理机上下文。
2.2.3 评价调度算法的指标
1、CPU利用率
CPU的利用率 = CPU有效工作时间 /(CPU有效工作时间 + CPU空闲等待时间)
2、系统吞吐率
单位时间内CPU完成作业的数量。
3、周转时间
周转时间:指从作业提交到作业完成所经历的时间
(作业等待时间 + 在就绪队列中排队 + 处理机上运行 + IO操作)
带权周转时间 = 作业周转时间 / 作业实际运行的时间
4、等待时间
5、响应时间
指从用户提交请求到系统首次产生响应所用的时间。
2.2.4 调度算法
1、先来先服务(FCFS)调度算法
- 算法简单、但效率低
- 对长作业有利,但对短作业不利
- 有利于CPU繁忙型作业,不利于I/O繁忙型作业
2、短作业优先算法(SJF)调度算法
- 平均等待时间、平均周转时间最少
- 对长作业不利,会导致长作业长期不被调度(“饥饿”现象)
- 无法及时处理紧迫性作业
3、优先级调度算法
分为静态优先级和动态优先级。
优先级参照:
- 系统进程 > 用户进程
- 交互型进程 > 非交互型进程
- I/O进程 > 计算型进程
4、高响应比优先调度算法
响应比 = (等待时间 + 要求服务时间)/ 要求服务时间
优点:克服了“饥饿”现象
5、时间片轮转算法
注:一般先考虑非抢占式