【问题标题】:Force operating system to run a program with no other programs in the background强制操作系统在后台运行没有其他程序的程序
【发布时间】:2014-04-20 21:20:38
【问题描述】:

我编写了一个程序来计算 c 中闪存驱动器的读写速度。我有一个写入闪存驱动器的大文本文件。它输出写入文件所花费的时间,然后读取新写入的文件,并输出读取它所花费的时间。

我知道我运行程序的计算机会在我运行 c 程序时在后台运行其他东西,这会使时间不准确。

为了使时间更准确,我想让计算机在运行时将所有资源用于我的 c 程序。有没有办法让c程序这样实时运行?

我将在 linux、mac 和 windows 上测试这个程序。

【问题讨论】:

  • 一般来说不可能。使用 Linux,google 进行实时进程调度。
  • 不可能。一种可行的替代方法是多次运行程序并对结果进行统计分析。

标签: c linux windows macos real-time


【解决方案1】:

你问的是不可能的。想一想:如果计算机除了执行你的程序之外什么都不做:当你的程序运行时谁来做内存管理? 你必须是你自己的操作系统!

您的测试中还有另一个缺陷:文件很可能无论如何都不会从闪存驱动器中读取。它来自磁盘缓存,即任何现代操作系统上的 RAM。要放弃这一点,您必须清除该缓存,例如通过弹出并重新插入驱动器。

【讨论】:

  • 您可以手动禁用磁盘缓存,但不能以跨平台的方式。当然,那你衡量的不是实际性能。
  • @Sneftel 当然。我的意思是,他所要求的可能不是他想要的。
【解决方案2】:

没有。 (普通的、消费者使用的)Linux、MacOS 和 Windows 都不支持实时处理。 (请注意,现有的基准测试套件会很好地要求您不要在其他程序正在执行它们的操作时运行它们。)

话虽如此,所有这些操作系统都优先考虑正在运行的前台进程,因此除非您同时运行许多其他东西,否则您获得的结果不太可能相差太远。您应该使用多次试验来获得最精确的结果。

在这些操作系统之一中,您可以做的绝对最好的事情就是将您的基准测试作为内核进程运行。然而,这是一件非常困难的事情,并且绝对不可能获得任何形式的跨平台兼容性。

或者,您可以在实际的实时操作系统上运行基准测试。

【讨论】:

  • 感谢您的回答,正如我所怀疑的那样。我的备份计划是按照你说的做,多次运行程序并平均结果,并在我运行我的程序时关闭其他程序。
【解决方案3】:

为了实现您的目标,您很可能必须直接与硬件交互,而无需操作系统的帮助。如果您愿意编写一个也用作闪存驱动器驱动程序的内核模块,则可以这样做。作为一个内核模块,有一些方法可以强制你的代码在让处理器之前运行完成。

【讨论】:

  • 这并不能解决实时处理问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 2011-06-02
  • 1970-01-01
  • 2011-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多