【Linux】【进程】进程调度
进程状态改变时会发生cpu调度
调度算法影响的是等待时间(进程在就绪队列中等待调度的时间总和)不能影响进程使用cpu时间和i/o时间
常见进程调度算法
调度算法 | |
---|---|
FCFS(First Come First Severd) | 先来先服务调度算法 |
SJF(Shortest Job First) | 短作业优先调度算法 |
HRRN(Highest Response Ratio Next) | 高响应比优先调度算法 |
RR(Round Robin) | 时间片轮转调度算法 |
HPF(Highest Priority First) | 最高优先级调度算法 |
MFQ(Multilevel Feedback Queue) | 多级反馈队列调度算法 |
Linux进程调度
多cpu调度
通过 负载均衡将每一个Task分配在不同cpu的runqueue队列里面 通过调度器对这些处在就绪态的Task进行调度
每个cpu 均有自己的runqueue队列
单cpu调度
实时线程优先级(0–99) 普通线程优先级(100–139)
实时调度
按照优先级调度 高优先级实时抢占低优先级任务 用于实时任务
RR
同优先级情况下 使用时间片轮转的方式进行调度 按时间片调度
适用于对实时任务有要求但是执行时间较长
FIFO
优先级高的任务先运行
任务一旦占领cpu 一直运行到程序结束或者被更高优先级Task抢占
适用于时间可预测的高优先级任务
CFS(完全公平调度)
并非物理时间上的完全公平调度 而是virtual time上的完全公平调度
进程优先级越高 virtual time走的越慢 (相当于可以理解为一个权 加权数据)
底层根据virtual time 通过红黑树进行控制 优先执行virtual time低的Task