当前位置:首页>正文

linux的任务调度机制是什么? (求助)Linux下任务调度

2023-04-17 00:42:11 互联网 未知

linux的任务调度机制是什么?

调度程序运行时,要在所有可运行状态的进程中选择最值得运行的进程投入运行。选择进程的依据是什么呢?在每个进程的task_struct结构中有以下四 项:policy、priority、counter、rt_priority。这四项是选择进程的依据。其中,policy是进程的调度策略,用来区分 实时进程和普通进程,实时进程优先于普通进程运行;priority是进程(包括实时和普通)的静态优先级;counter是进程剩余的时间片,它的起始 值就是priority的值;由于counter在后面计算一个处于可运行状态的进程值得运行的程度goodness时起重要作用,因此,counter 也可以看作是进程的动态优先级。rt_priority是实时进程特有的,用于实时进程间的选择。
Linux用函数goodness()来衡量一个处于可运行状态的进程值得运行的程度。该函数综合了以上提到的四项,还结合了一些其他的因素,给每个处于 可运行状态的进程赋予一个权值(weight),调度程序以这个权值作为选择进程的唯一依据。关于goodness()的情况在后面将会详细分析。

(求助)Linux下任务调度

回复 你这样一种情况就把你单片机的整个任务调度写成一个多线程,一旦写成这个样子(单个程序,其实就是单个程序),LINUX就会对它进行调度。而LINUX中的调度和你改写成单程序后的调度是不同的两个东西,LINUX的调度是在程序与程序之间,而你改写后的是一个多线程的东西,是线程和线程的切换,由LINUX进行管理,不需要你去考虑。而你所说的有足够时间去等待一些数据,这可以通过NEW几个线程,各个线程分配各自的功能模块(相当于是你裸机下的任务),它们之间是通过相关的信号量来进行通讯的。这样完全可以改写。而且改写的时候不需要考虑切换的东西,只需要考虑上层的东西。例如:线程1:等待N个数据,线程2:从硬件接收N个数据。这时,线程1如果没有接收到数据的话,则由LINUX自动管理去休眠线程2从硬件收到N个数据,由LINUX发送给正在等待的线程这就是你裸机下所做的任务了吧?