一、优先级分别以及任务抢占
Neutrino 提供了一个基于优先级驱动的抢占式的设计理念。优先级驱动意味着,我们可以为每个线程分配一个优先级,它将可以根据优先级调度策略获取CPU资源。如果一个低优先级线程和一个高优先级线程同时像获取CPU使用权,那么高优先级线程将会运行。抢占式意思是说,如果一个低优先级线程在运行,这个时候一个高优先级运行条件得到满足,将要运行,那么它将获取CPU使用权。
线程的优先级从1-255(最高)。普通线程的优先级范围从1-63(默认)。root用户线程优先级允许设置在63之( procmgr_ability())接口。系统有一个空闲线程(位于进程管理器)有最低的优先级(0),这个空闲任务总是处于就绪状态。
默认情况下子线程从父线程继承优先级。一个线程有两个优先级,一个称为真实优先级,一个成为有效优先级。系统通过有效优先级完成调度。一个线程自己本身可以修改两个优先级,但是有效优先级可能会因为系统调度策略或者优先级继承发生改变。正常情况下,有效优先级与真实优先级相等。
中断处理器的优先级比任何线程优先级都要搞,但是它不像线程一样被调度。如果一个中断发生了,那么:
1.当前正在运行的线程失去CPU占用权,开始中断异常处理(SMP issues)
2.硬件运行内核
3.内核调用中断处理程序
1.1任务状态分析
如果想要完全了解调度器的工作,首先必须了解任务在程序运行过程中的几种状态以及知道就绪队列的原理。
当一个任务从运行态转变为阻塞状态可能的原因有:
1.线程主动休眠