在C ++程序中使用内核编程功能

时间:2012-12-02 17:51:43

标签: c++ linux-kernel kernel

我是这个领域的新手&我正在编写一个C ++ /汇编代码,用于在时钟周期中对代码的一部分进行基准测试(测量执行时间)。我需要通过我的代码禁用抢占和硬中断。我知道linux内核开发允许使用 preempt_disable(); & raw_local_irq_save(flags)用于执行相同的操作。

我的问题是我不是在编写内核模块,而是在用户空间编写普通的C / C ++程序。我可以通过我的C ++代码使用这些系统调用(即来自用户空间/没有内核模块吗?)我应该包含哪些头文件。如是。有人可以给我阅读参考或例子吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

您无法从用户态应用程序执行此操作,尤其是禁用硬件中断,这为许多基本内核功能(如计时)提供了基础。

你可以做的是使用sched_setscheduler(2)来设置SCHED_FIFO实时优先级,即要求内核在自愿释放CPU(通常是系统)之前不要抢占你的应用程序呼叫)。但请注意 - 您可以通过这种方式轻松锁定系统。

答案 1 :(得分:1)

通常这是不可能的。内核不会让你阻止中断。

但为自己指定一个非常高的prio通常是足够好的。另外,请确保基准测试代码运行时间足够长,例如通过循环运行10000次。这样,一些中断在整个循环计数中无关紧要。根据我的经验,1秒的代码运行时间足够好(假设您的系统没有受到重压),用于家庭酿造基准测试。