一、 处理器调度的相关概念
1、CPU调度
CPU调度其任务是控制 、协调进程对CPU的竞争。
即按一定的调度算法从就绪队列中选择一个进程,把CPU 的使用权交给被选中的进程如果 没有就绪进程,系统会安排一个 系统空闲进程或idle
2、进程切换
进程切换:是指一 个进程让出处理器,由另一个进程占用处理器的 过程
- 进程 切换主要包括两部分工作:
- 切换全局页目录以加载一个新的地址空间
- 切换 内核栈 和硬件上下文,其中硬件上下文包括了内核执行新进程需要的全部信息 , 如CPU 相关 寄存器
切换过程包括了 对原来运行进程各种状态 的保存和对 新的进程各种状态 的恢复
3、进程上下文切换具体步骤
场景:进程A 下CPU ,进程B 上CPU
- 保存进程A 的上下文环境(程序计数器、程序状态字、其他寄存器…… )
- 用新状态和其他相关信息更新进程A 的PCB
- 把进程A 移至合适的队列(就绪、阻塞…… )
- 将进程B 的状态设置为运行态
- 从进程B 的PCB 中恢复 上下文(程序计数器 、 程序状态字、其他寄存器…… )
4、进程上下文切换开销
- 直接开销:内核完成切换所用 的CPU 时间
- 保存和恢复寄存器……
- 切换地址空间 (相关指令比较 昂贵)
- 间接开销
- 高速缓存(Cache) 、缓冲区缓存(Buffer Cache) 和TLB(Translation Look-aside Buffer)
二、设计调度算法要考虑的几个问题
1、调度算法衡量指标
- 吞吐量 Throughput — 每单位时间完成的进程数目
- 周转时间TT(Turnaround Time)
每个进程从提出请求到运行完成的时间 - 响应时间RT(Response Time)
从提出请求到第一次回应的时间 - 其他
- CPU 利用率(CPU Utilization)
CPU 做有效工作的时间比例
- 等待时间(Waiting time)
每个进程在就绪队列(ready queue) 中等待的时间
三、多处理器调度算法设计
- 不仅要决定选择哪一个 进程执行
- 还需要决定在 哪一个CPU 上执行
- 要 考虑进程在多个CPU 之间迁移时的开销
- 高速缓存失效、TLB 失效
- 尽可能使进程总是在同一个CPU 上执行
- 如果每个进程可以调度到所有CPU 上,假如进程上次在CPU1 上执行,本次被调度到CPU2 ,则会 增加高速缓存 失效、TLB 失效; 如果 每个 进程尽量调度到指定的CPU 上,各种失效就会减少
- 考虑 负载 均衡问题
四、批处理系统中采用的调度算法
- 先来先服务(FCFS-First Come First Serve )
- 最短作业优先(SJF-Shortest Job First )
- 最短剩余时间优先(SRTN-Shortest Remaining Time Next )
- 最高相应比优先(HRRN-Highest Response Ratio Next )
五、交互式系统中采用的调度算法
- 轮转调度(RR-Round Robin )
- 最高优先级调度(HPF—Highest Priority First )
- 多级反馈队列(Multiple feedback queue )
- 最短进程优先(Shortest Process Next )
六、WINDOWS 线程调度
四、五、六部分内容可以参考课件:课件下载地址
个人微信公众号:
作者:jiankunking