normal prio static_prio 处理关系
信号处理:
1. 为当前进程,中断或系统调用时返回 用户空间
2. 如果进程在没有运行,则需要调用signal_wake_up 函数把目标进程唤醒。 对于smp ,则需要发送一个RESCHEDULE_VECTOR 中断
linux 调度类:
TIF_NEED_RESCHED , 调度器根据此标志来决定是否选择下一个进程运行。
置位地方:
resched_task set_tsk_need_resched wake_up_idle_cpu
调度器类函数: task_tick_rt 调用set_tsk_need_resched 置位
进程重要性的决定:
进程权重、优先级
调度器
周期性调度器: scheduler_tick
1. 进程调度相关统计量 2. task_tick (cifs 检测线程运行时间是否过长,如是设置TIF_NEED_RESCHED)
主调度器: schedule
周期性调度器只会置需要调度标志位
如果内核抢占被关闭,则内核进程在不主动让出cpu的情况下,将不能被打断。如jffs2垃圾扫描进程。
内核空间抢占:
中断返回内核空间前
用户空间抢占:
系统调用返回用户空间前
中断返回用户空间前
TIF_NEED_RESCHED,进程表示要抢占其他进程时会置此标志位。 被置位的地方?
cond_resched () 保证某进程不会占用太多cpu