C程序在Linux上运行时应该在空闲时间做什么?

PIC*_*ain 6 c linux idle-processing

我已经为微控制器编写了许多C程序,但从来没有一个在像linux这样的操作系统上运行的程序.linux如何确定为我的应用程序提供多少处理时间?当我有空闲时间告诉操作系统去做其他事情并稍后再回到我身边以便其他进程也有时间运行时,我需要做些什么吗?或者OS是否只是自动执行此操作?

编辑:添加更多细节我的c程序有一个任务调度程序.有些任务每100毫秒运行一些,有些任务每50毫秒运行一次,依此类推.在我的主程序循环中,我调用ProcessTasks来检查是否有任何任务准备好运行,如果没有准备就绪它会调用空闲函数.空闲功能除了它之外什么都不做,所以我可以用Ocope窥镜切换GPIO引脚并监视空闲时间...或者如果我愿意的话.所以也许我应该在这个空闲函数中调用sched_yield()???

cni*_*tar 6

linux如何确定为我的应用程序提供多少处理时间

每个调度程序都有自己的想法.有些人奖励你没有用完你的份额,有些掷骰子试图预测你会做什么等等.在我看来你可以认为它是魔术.在我们进入循环之后,调度程序神奇地决定我们的时间到了等等.

当我有空闲时间告诉操作系统去做其他事情时,我需要做些什么

你可以打电话sched_yield.我从来没有打电话给它,也不知道为什么会有人想要的原因.该手册确实说它可以改善性能.

或者操作系统是否只是自动执行此操作

它肯定会.这就是为什么他们称之为"先发制人"的多任务处理.


Ker*_* SB 5

这取决于你为什么以及如何拥有"空闲时间".任何对阻塞I/O函数的调用,等待互斥锁或休眠都将自动取消调度你的线程并让操作系统继续使用其他东西.只有繁忙的循环才会出现问题,但在任何情况下都不应该出现在你的设计中.

你的程序应该只有一个中心"无限循环".如果循环体有可能"失去工作",那么最好是让循环执行上述系统函数之一,这将使所有的好处自动出现.例如,如果您的中央循环是一个epoll_wait和所有I/O,定时器和信号由epoll处理,则调用该函数的超时时间,-1以便在没有任何操作的情况下使其休眠.(相比之下,用超时调用它0会使它忙碌循环 - 糟糕!).