Solaris内核调度与睡眠唤醒机制解析
1. Solaris内核调度器
内核调度器负责为处理器选择合适的线程来执行。其工作流程如下:
- 线程查找 :若线程不在内核抢占队列中,会检查每个处理器的 disp_maxrunpri 队列。若该队列值为 -1,则表示队列为空,此时会调用 disp_getwork() 代码,查找拥有最高优先级线程的处理器,接着使用 disp_getbest() 和 disp_ratify() 函数。
- 线程选择与更新 :若当前处理器的 disp_maxrunpri 表明有可运行线程,会从最高优先级队列中移除第一个线程,并更新队列数据(如 disp_nrunnable 、 dq_nruncnt 、 disp_qactmap 、 disp_max_unbound_pri 和 disp_maxrunpri ),确认选择后, disp() 函数将线程指针返回给 swtch() 。
- 空闲线程选择 :若所有调度队列都没有可执行工作,会将线程指针设置为 cpu_idle_thread (从处理器的 cpu 结构引用),选择处理器的空闲线程,并将空闲
超级会员免费看
订阅专栏 解锁全文
6

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



