进程调度机制深度解析
1. 实时进程调度规则
实时进程在可运行状态时会抑制所有低优先级进程的执行,与常规进程不同,实时进程始终被视为活跃状态。用户可以通过 sched_setparam() 和 sched_setscheduler() 系统调用更改进程的实时优先级。
当多个实时可运行进程具有相同的最高优先级时,调度器会选择本地 CPU 运行队列对应列表中最先出现的进程。
实时进程仅在以下情况之一发生时才会被其他进程替换:
- 被具有更高实时优先级的进程抢占。
- 执行阻塞操作,进入睡眠状态(TASK_INTERRUPTIBLE 或 TASK_UNINTERRUPTIBLE)。
- 进程停止(TASK_STOPPED 或 TASK_TRACED 状态)或被杀掉(EXIT_ZOMBIE 或 EXIT_DEAD 状态)。
- 主动调用 sched_yield() 系统调用放弃 CPU。
- 进程为轮转实时(SCHED_RR)类型,且时间片已用完。
对于轮转实时进程, nice() 和 setpriority() 系统调用不会改变其实时优先级,而是改变基础时间片的持续时间。实际上,轮转实时进程的基础时间片持续时间不取决于实时优先级,而是根据进程的静态优先级确定。
2. 调度器使用的数据结构
- 进程列表与运行队列 :进程列表链接了所有进程描述符,而运行队列列表则链接了所有可运行进程
超级会员免费看
订阅专栏 解锁全文
3673

被折叠的 条评论
为什么被折叠?



