当前位置:  开发笔记 > 运维 > 正文

为什么我们需要linux中的交换器任务?

如何解决《为什么我们需要linux中的交换器任务?》经验,为你挑选了3个好方法。

选择空闲任务(也称为交换器任务),以便在任务调度点处的运行队列中不再有可运行的任务时运行.但这项特殊任务的用途是什么?另一个问题是为什么我无法在用户区的"ps aux"输出(PID = 0)中找到此线程/进程?



1> bl4ckb0l7..:

原因是历史和程序.如果没有其他任务可以运行,那么空闲任务就是任务正在运行,就像你说的那样.它具有最低可能的优先级,因此它运行没有其他任务的原因是可运行的.

编程原因:这大大简化了流程调度,因为您不必关心特殊情况:"如果没有任务可运行会发生什么?",因为始终至少有一个任务可运行,即空闲任务.您还可以计算每个任务使用的CPU时间量.没有空闲任务,哪个任务获得cpu-time占用没有人需要?

历史原因:在我们拥有能够降压或进入省电模式的cpu之前,它必须随时全速运行.如果没有可运行的任务,它会运行一系列NOP指令.今天,空闲任务的调度通常通过使用HLT指令(停止)来降低CPU,因此节省了电力.所以在我们这个时代的闲置任务中有某种功能.

在Windows中,您可以在进程列表中看到空闲任务,这是空闲进程.


HLT指令早于linux调度程序,不是吗?

2> Spence..:

Linux内核维护一个在IO /互斥锁等上"阻塞"的进程的等待列表.如果没有可运行的进程,则将空闲进程置于运行队列中,直到它被等待队列中的任务抢占为止.

它有一个任务的原因是你可以(大约)测量内核由于IO /锁上的块等而浪费了多少时间.此外,它使代码更容易为内核,因为空闲任务是相同的它需要上下文切换的每个任务,而不是"特殊情况"空闲任务,这可能会使更改内核行为更加困难.



3> MarkR..:

每个cpu实际上有一个空闲任务,但它不在主任务列表中,而是在cpu的"struct rq"runqueue结构中,作为struct task_struct*.

只要没有更好的事情(在该CPU上),调度程序就会激活它,并执行一些特定于体系结构的代码,以便在低功耗状态下使cpu空闲.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有