Linux 控制程序执行

Linux 控制程序执行,linux,kernel,signals,real-time,Linux,Kernel,Signals,Real Time,我正在为多线程应用程序编写小型调试程序。我的想法是运行正在调试的目标,例如100纳秒,然后暂停并检查其内存。然而,这(只是伪代码) 这是行不通的,因为进程切换可能会在nanosleep之后立即发生,目标会根据需要运行更长的时间。有没有办法给进程一个“定义”的时间片,然后挂起它?我能想象的唯一解决方案是添加系统调用并修复调度程序,以实现我所需的功能,但这需要付出巨大的努力和许多错误。 也许为调试程序进程设置“实时”优先级会有所帮助?这是干净的解决方案吗 假设我可以插入目标应用程序的源代码。有没有可

我正在为多线程应用程序编写小型调试程序。我的想法是运行正在调试的目标,例如100纳秒,然后暂停并检查其内存。然而,这(只是伪代码)

这是行不通的,因为进程切换可能会在nanosleep之后立即发生,目标会根据需要运行更长的时间。有没有办法给进程一个“定义”的时间片,然后挂起它?我能想象的唯一解决方案是添加系统调用并修复调度程序,以实现我所需的功能,但这需要付出巨大的努力和许多错误。 也许为调试程序进程设置“实时”优先级会有所帮助?这是干净的解决方案吗


假设我可以插入目标应用程序的源代码。有没有可能设置一种计时器,在一段(非常小且精确的)时间后让整个过程睡眠?

你真的认为你能
纳秒睡眠
?内核中的
HZ
值是多少?最接近这种睡眠顺序的是
udelay()
,但在内核中,您可以禁用抢占,而不是在用户区。查看linux内核源代码中的
linux/include/delay.h
init/calibrate.c

由于linux充其量只是一个“软实时”操作系统(特别是在用户空间中工作),因此很难获得您所追求的精度类型

如果您使用的是嵌入式处理器,
nanosleep
microsleep
调用通常作为自旋循环实现。在引导过程中,处理器的特点是“校准”该自旋循环。然而,要获得这种精度,还需要非常详细地了解处理器体系结构和执行的内容(在指令级)

较新版本的linux内核确实有一些高速计时器实现,但您仍在寻找微秒分辨率


如果您在桌面系统上运行,我不知道您为什么需要这种精度。

nanosleep(100)就是一个例子。一般来说,我需要时间执行(target-pid,time-to-execute)之类的东西。不过,在这里,时间量是一个非常重要的考虑因素。你能给我们一个实时的价值考虑吗?你的方法的问题是你想要“不再”延迟,而Linux只允许你在X上有一个较低的下限(通常是10微秒)。您可以查看“实时”POSIX信号/计时器-在那里您可以清楚地指示您错过了多少个计时器脉冲。由于我可以对目标源代码或二进制代码进行检测以使其“变慢”,因此实时值可以达到微秒级
nanosleep(100);             //sleep debuger for 100 nanosec and let a program run
kill(target_app_pid, SIGSTOP); //stop target app