OK6410A 开发板 (八) 79 linux-5.11 OK6410A schedule总览
2022-08-17 来源:csdn
__schedule 功能描述
__schedule
1.完成一些必要的检查, 并设置进程状态, 处理进程所在的就绪队列
2.调度全局的pick_next_task选择抢占的进程
2.1
如果当前cpu上所有的进程都是cfs调度的普通非实时进程, 则直接用cfs调度找到进程
如果无程序可调度则找到 idle进程
2.2
否则从优先级最高的调度器类sched_class_highest(目前是stop_sched_class)开始依次遍历所有调度器类的pick_next_task函数, 选择最优的那个进程
//本例有 dl -> rt -> fair -> idle
//支持smp 的会有stop_sched_class -> dl_sched_class -> rt_sched_class -> fair_sched_class -> idle_sched_class
3.context_switch 完成进程上下文切换
3.1 调用switch_mm_irqs_off,把虚拟内存从一个进程映射切换到新进程中
3.2 调用switch_to,从上一个进程的处理器状态切换到新进程的处理器状态。
这包括保存、恢复栈信息和寄存器信息
调度器与调度策略
level1 : 6种调度策略
SCHED_NORAML
SCHED_BATCH
SCHED_IDLE
SCHED_RR
SCHED_FIFO
SCHED_DEADLINE
level2 : 调度器类
CFS : 封装了 SCHED_NORAML SCHED_BATCH
RT : 封装了 SCHED_RR SCHED_RR
IDLE : 封装了 SCHED_IDLE
STOP :
DEADLINE:
调度时机
分两种情况
1.一般来说,直接调度就行了
2.但是有的会分为两步,先置位 need_sched , 然后再某个时机判断 need_sched,然后调度
- 〖Linux〗OK6410a蜂鸣器的驱动程序编写全程实录
- 开发环境搭建 (一) OK6410A 开发环境 1官方环境 OK
- 开发环境搭建 (一) OK6410A 开发环境 2 更改环境 OK
- 开发环境搭建 (一) OK6410A 开发环境 3 更改环境 FAIL
- 开发环境搭建 (二) OK6410A 开发环境 其他
- 开发环境搭建 (一) OK6410A 开发环境 4 更改环境 OK
- OK6410A 开发板 (二) 环境熟悉
- OK6410A 开发板 (三) u-boot-1.1.6 boot 解析
- OK6410A 开发板 (四) OK6410A 裸机代码
- OK6410A 开发板 (五) u-boot-2021.01 移植 到 ok6410a