我在嵌入式系统上运行了一个低级C程序,该程序执行关键的系统检查并运行硬件(风扇,温度检查等)。
它还通过每隔几秒钟执行一次简单的fopen操作来对/ dev / watchdog进行ping操作,以此作为防御措施,以在此进程停止运行时完全关闭系统。
watchdog = fopen("/dev/watchdog","w");
fprintf(watchdog,"1");
fclose(watchdog);
问题是此系统在RAM上非常受限制,因此很多其他进程被交换到SD卡中,这非常慢...有时这些进程会接管工作,并且可能需要10秒钟的时间才能完全进入看门狗再次对其执行ping操作(硬件将其超时固定为16秒)。
我需要确保该看门狗进程始终在RAM中(因此fopen永远不会将页面分页到SD卡),并且其调度优先级是CPU的最高优先级。
我猜我可以跑步
mlockall(MCL_CURRENT|MCL_FUTURE);
要解决内存问题,进程中的所有内存都应保留在RAM中。至于调度,我尝试将进程优先级提高到-19,但这仍然不能阻止它确保每5秒执行一次,就像它应该在循环中一样。
还有其他建议吗?