当前位置: 技术问答>linux和unix
linux 进程调度
来源: 互联网 发布时间:2016-05-29
本文导语: 我有一段代码需要定时重复执行. 所以用了个timer. 但是感觉这个timer不准. 比如我设置间隔为50ms. 但基本上每次都超过这个时间(需要执行的代码不超过10ms).即使我设置成5ms也是一样. 以为是进程调度的问题. 怀疑时...
我有一段代码需要定时重复执行. 所以用了个timer.
但是感觉这个timer不准. 比如我设置间隔为50ms. 但基本上每次都超过这个时间(需要执行的代码不超过10ms).即使我设置成5ms也是一样.
以为是进程调度的问题. 怀疑时间花在了进程的进出上. 所以把调度算法设置成FIFO,可还是不行.
我现在想知道, 该如何才能上我的进程独占cpu,即便是空闲,如果我不放,cpu就不能执行其它进程. 或者让timer能够比较精确的工作. 谢谢!
但是感觉这个timer不准. 比如我设置间隔为50ms. 但基本上每次都超过这个时间(需要执行的代码不超过10ms).即使我设置成5ms也是一样.
以为是进程调度的问题. 怀疑时间花在了进程的进出上. 所以把调度算法设置成FIFO,可还是不行.
我现在想知道, 该如何才能上我的进程独占cpu,即便是空闲,如果我不放,cpu就不能执行其它进程. 或者让timer能够比较精确的工作. 谢谢!
|
這根本不是timer的問題,是內核的進程調度算法導致的
如果你想達到你說的效果,可以這樣,在你想獨佔CPU的時候,屏蔽一切中斷就行了,當你用完了的時候,再把
中斷恢復。但是這需要你的程序運行在R0級別,有足夠的權限才行;而且,你的程序必須要設計的一點問題都沒
有,要是有任何的閃失,不能恢復中斷,那內核就被鎖死了
如果你想達到你說的效果,可以這樣,在你想獨佔CPU的時候,屏蔽一切中斷就行了,當你用完了的時候,再把
中斷恢復。但是這需要你的程序運行在R0級別,有足夠的權限才行;而且,你的程序必須要設計的一點問題都沒
有,要是有任何的閃失,不能恢復中斷,那內核就被鎖死了
|
timer是不够精确,但是如果你对时间精度要求低于ms级,那就得找文章看看。
这里用CPU时间戳计时。。
http://www.r-tech.cn/docdetail.asp?id=17
这里用CPU时间戳计时。。
http://www.r-tech.cn/docdetail.asp?id=17
|
Linux和Windows的Timer最小粒度一般都是14ms左右,无法再小。
让你的程序持续占着CPU,和现代操作系统的设计初衷相背。
让你的程序持续占着CPU,和现代操作系统的设计初衷相背。