操作系统开销

3

我正在研究一种耗时的计算算法,希望尽可能快地运行它。

操作系统(Windows或Linux)的存在会使得算法运行变慢吗?

是否有特别实现为运行预定义程序的“操作系统”示例?


“尽可能快”不是一个要求;设定一个可衡量的目标(例如每日运行,必须在24小时内完成)。消除操作系统开销的好处有限。尝试将进程分布到多个核心,甚至多台(托管)机器上;特别是在处理时间与不断增长的数据集大小成比例时非常重要。任何其他优化(减少操作系统开销,汇编代码)可能会被更快的硬件(摩尔定律)超越,而这需要你付出努力的时间。 - Ruud Helderman
这是一个非常好的观点。扩展硬件;优化代码;做其他现实生活中的事情(我认真地说,作为一个男人也是一个目标)- 按重要性递减的顺序。一些资源将开销测量为3-30%,例如:https://upcommons.upc.edu/e-prints/bitstream/2117/6579/1/Radojkovic.pdf - 不幸的是它是处理器特定的,但主题太狭窄了,至少找到关于它的任何东西。 - Slaus
3
如果您真的想消除任何可能的开销,可以尝试使用BaremetalOS http://www.returninfinity.com/baremetal.html - Nazar554
@Nazar554 这只是一个靶心!我想找到的最好的样本是一个仅在裸机上运行但IT基础设施仍然以其高开发阶段令人印象深刻的程序。非常感谢! - Slaus
即使它的名字很酷:BareMetal : )。我试图将任务暴露为“裸硬件”,但这样更好。 - Slaus
显示剩余2条评论
3个回答

4

首先,我想介绍一下我也正在处理一个非常类似的主题费时的计算算法!这里有很多共同点,或者只是巧合...

现在,让我们来看看答案的部分:

操作系统中的进程(正在运行的算法)的存在受到守护程序和其他可用用户程序的影响,这取决于操作系统所应用的调度算法。通常,守护程序始终在运行,并且一些与系统应用程序相关的进程会抢占其他低优先级进程(如果您的进程具有较低的优先级,则一般系统进程和守护程序会抢占所有其他进程)。操作系统(Windows或Linux)的存在本身并不会受到影响,因为内核是操作系统和所有进程和任务的管理器。因此,它们不会降低进程速度,但守护程序和系统进程比较繁重,确实会对您的程序产生重大影响。我也希望我们可以禁用所有守护程序,但它们只是为了操作系统的高效工作(如鼠标控制、电源效率等),总之...

举个例子,在Linux和Unix系统上,top命令提供了实时处理器活动的持续查看。它显示了系统上最消耗CPU的任务的列表。
因此,如果您在Linux系统上执行此代码,您将得到所有强烈消耗内存的重型进程的结果!在这里,除了您的进程强烈利用内存之外,还有几个守护程序,如powerdmoused等,以及其他系统进程,如Xorgkdeinit4等...这些都会影响用户进程!
但是,有一件事很清楚,每个进程或守护程序通常不会占用比您的强烈计算算法进程更多的内存!比例会更小,可能是八分之一,四分之一!! 根据评论更新:

如果您特别想在本地硬件上运行进程而无需操作系统的便利/安装——您有两个选择。

要么使用机器级语言、汇编语言或其他低级语言开发代码,这将直接在硬件上运行您的进程,无需操作系统管理内存部分和其他系统进程和守护程序!
第二种解决方案是开发/利用一个非常简单的操作系统,其中仅包括算法程序/进程所需的设置!然后,这个最小的操作系统不会是完整的操作系统——因此缺少守护程序、多个系统调用,如Windows、Linux、Unix等主要操作系统。
在评论部分中,Nazar554提供了一个有用的链接。我只是引用他的话:
如果你真的想消除任何可能的开销,可以尝试: BareMetal OS 在您的情况下,似乎您更喜欢第一种选项而不是另一种。但是,您可以以任何一种方式完成您的任务!
这只是我方的反馈,因为我没有听清楚你的问题!如果您在操作系统Beta上提出同样的问题,那么会有几位专家坐在那里回答有关操作系统开发/功能等方面的所有疑问!在那里,您将收到有关与您的主题相关的每个微小细节更强和积极的回应,这可能是我忽略的。祝一切顺利...

我想最后一个问题也在已删除的评论中得到了回答? ;) - Slaus
很抱歉,如果在一个非常狭窄的主题内没有理解事物如何运作就试图给出建议是不好的情绪 - 它只会导致许多误解。这不是特定的知识 - 它只是IT领域内的共同知识。你的回答显示了对以下任何一个主题的无知:冯·诺伊曼体系结构、算术逻辑单元、内存寻址、"页"、计算机结构分层。我强烈推荐你阅读这本书。 - Slaus
一个占用大量内存的进程不应被视为原子性---原因是由于该进程正在消耗内存,因此它可以分解成几个部分(线程),这些部分将并行运行以完成任务。但是,并不一定会是并行进程,它可能是原子的(尽管机会很小)---没有人知道其他人对AS感兴趣,在我们上次讨论中你把我带到了汇编程序设计,因为我无法超越那个主题! - Am_I_Helpful
1
另外,我的朋友,你有一个单独的网站可以讨论这个问题——www.operatingsystems.stackexchange.com——请去那里试试!我觉得你会得到更深入的细节。我会在那里关注你的问题,因为我已经是其中的一员! - Am_I_Helpful
太棒了!谢谢!我想这是针对stackoverflow的答案。如果有类似的问题,我会接受并转到该网站。任何对我的问题的澄清也将不胜感激 - 因为我自己在表达方面有些困难... - Slaus
显示剩余16条评论

0
在所有主要操作系统中,给任务分配处理器的主要思想是相同的。我提供了一张示意图来说明它。首先让我描述一下这张图,然后我会回答你的问题。

enter image description here

图示说明

当操作系统想要同时执行一些任务时,它不能一次性将处理器分配给所有任务。因为处理器一次只能处理一个操作,无法同时处理多个任务的处理。因此,操作系统以时间片轮换的方式在所有任务之间共享它。换句话说,每个任务只允许在其自己的时间片中使用处理器,并且在时间片结束时应将处理器交还给操作系统。

操作系统使用调度程序组件来选择和分派待处理的任务,以将处理器分配给它。不同操作系统之间的区别在于调度程序是如何工作的。简单地说,典型的调度程序做什么?

回答您的问题

操作系统(Windows或Linux)的存在(在其下运行算法)会使进程变慢多少,这取决于以下因素:
  1. 分发器算法(即使用哪个操作系统)
  2. 当前系统负载(即现在运行了多少应用程序和守护进程)
  3. 您的进程任务有多高的优先级(即实时优先级、UI优先级、常规优先级、低优先级等)
  4. 您的任务将要执行多少I/O操作(因为通常会将请求I/O操作的任务安排在单独的队列中)
由于英语不是我的母语,因此请原谅我可能存在的语言问题。希望这可以帮助您。

1
我知道操作系统是如何工作的,我不需要解释。 “调度算法(即您使用哪个操作系统)” - 我可以使用任何Windows或Linux。 “系统当前负载” - 子进程的存在不会减慢它们中的任何一个,因为它们只是共享处理器,没有计算能力损失。 “您的进程任务有多高的优先级” - 操作系统在没有事情可做时不会空闲,无论进程的优先级如何。 “您的任务将完成多少I/O工作” - 同样,这只是另一个特定的进程 - 操作系统不会挂起它或在有任何东西要做的地方空闲。 - Slaus

0

尝试在单用户模式下启动。

来自debian-administration.orgdebianadmin.com

运行级别1被称为“单用户”模式。更恰当的描述应该是“救援”或“故障排除”模式。在运行级别1中,没有守护程序(服务)被启动。希望单用户模式能让您修复导致转换到救援模式必要的任何问题。

我猜“没有守护程序”并不完全正确,因为wiki.debian.org声称:

例如,可以配置守护程序仅在计算机处于单用户模式(运行级别1)或更常见的多用户模式(运行级别2-5)时运行。

但我想单用户模式肯定会关闭大部分守护程序。

这有点像是一个hack,但它可能对你有用。


1
抱歉,问题是“操作系统的存在会减慢进程速度有多少”,以及“是否有任何现有的程序解决方案可以在裸机上运行”?我没有问如何加快Linux或Windows的速度。 :( - Slaus
你非常清楚地表达了“尽可能快地运行它”的愿望。单用户模式消除了许多可能与您的进程共享CPU的进程。在单用户模式下,进行一些性能分析(例如使用time),以确定剩余多少操作系统开销。如果您的进程仍然被分配到远低于100%的CPU,则确实可能没有操作系统更好。尽管您可能会遇到一些麻烦,无法在没有操作系统的情况下将您的进程输出到外部世界... - Ruud Helderman
基本的输出可以很容易地通过BIOS完成。time()显示已经在操作系统下使用的资源百分比,但它不会显示操作系统本身的开销。即使它会说“100%的处理器被您的进程使用”,这并不意味着完全删除操作系统不会将生产力提高1000%。 - Slaus
“一千”是因为我们不知道操作系统的开销,所以我从我的头脑中取出了一些很大的值。那个问题是:“操作系统会减慢进程多少”,而“1000%”仍然是一个可能的答案。 - Slaus
1
你所寻找的开销是 Real 减去 User+Sys(假设进程在单核上运行);请参考 https://dev59.com/4XRB5IYBdhLWcg3wroyB。但如果你对其他分析工具更有信心,可以随意使用它们。 - Ruud Helderman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接