【问题标题】:Do Operating Systems slow down program execution?操作系统会减慢程序的执行速度吗?
【发布时间】:2020-10-08 15:16:18
【问题描述】:

这个问题是关于一般操作系统的。操作系统的实现中是否有任何必要的机制影响我的程序发送到 CPU 的指令流?

例如,如果我的程序在 OS 中设置为最高优先级,那么它在没有 OS 的情况下运行时的性能是否完全相同?

【问题讨论】:

  • 是的,也不是。如果我们忽略加载/启动/终止延迟,如果您的一个线程足够小,不会产生页面错误,不执行 I/O,也没有系统调用,(!),您的操作系统可能永远不会进入,并且所以根本没有效果。显然,这是非常罕见的:) 如果没有加载其他内容,我看不出优先级有多重要。

标签: performance operating-system


【解决方案1】:

在操作系统的实现中是否有任何必要的机制影响我的程序发送到 CPU 的指令流?

并非绝对必要的机制(取决于您如何定义“操作系统”);但通常会有 IRQ、异常和任务切换。

设备使用 IRQ 来请求操作系统(它们的设备驱动程序)注意;并中断程序发送到 CPU 的指令流。另一种方法是轮询,这会浪费大量 CPU 时间检查设备是否需要注意,而实际上它可能不需要。因为应用程序需要使用设备(文件 IO、键盘、视频等),浪费 CPU 时间是不好的; IRQ 显着提高了应用程序的性能。

异常(如 IRQ)也会中断正常的指令流。它们发生在正常的指令流无法继续时,要么是因为你的程序崩溃了,要么是因为你的程序需要一些东西。异常的最常见原因是虚拟内存(例如,使用交换空间让应用程序拥有比实际存在更多的内存,以便应用程序实际正常工作;异常告诉操作系统您的程序试图访问必须访问的内存首先从磁盘中获取)。一般来说;这也出于多种原因提高了性能(因为“由于 RAM 不足而无法执行”可以被认为是“零性能”;并且因为各种技巧减少了 RAM 消耗并增加了可用于缓存文件等事情的 RAM 量提高文件 IO 速度)。

任务切换是多任务处理的基础(例如,一次能够运行多个应用程序)。如果需要 CPU 时间的任务多于 CPU,那么操作系统(调度程序)可能(取决于任务优先级和调度程序设计)在它们之间切换,以便所有任务都获得一些 CPU 时间。然而;大多数应用程序大部分时间都在等待某事做(例如等待用户按键),并且在等待时不需要 CPU 时间;如果操作系统只运行一个任务,那么调度程序什么也不做(没有任务切换,因为没有其他任务可以切换)。换句话说,如果操作系统支持多任务,但你只运行一个任务,那没有区别。

请注意,在某些情况下,IRQ 和/或任务也用于“机会性地”在后台工作(当硬件无事可做时)以提高性能(例如预取、预处理和/或在需要之前预先计算数据,以便在需要时立即获得结果数据。

例如,如果我的程序在 OS 中设置为最高优先级,那么它在没有 OS 的情况下运行时的性能是否完全相同?

最好将其视为多层 - 硬件和设备(CPU 等),内核和设备驱动程序位于顶部,应用程序位于其顶部。如果您删除任何层,则没有任何效果(例如,在没有文件系统和磁盘设备驱动程序的情况下,应用程序如何读写文件?)。

如果您将操作系统提供的所有功能转移到应用程序中(例如,可以使应用程序在裸机上启动的静态链接库);那么如果功能相同,则性能将相同。

您只能通过减少功能来提高性能。例如,如果您摆脱安全性,您将提高性能(暂时,直到您的应用程序成为攻击者的僵尸网络的一部分,并且由于它正在进行的所有比特币挖掘,性能变得非常糟糕)。以类似的方式,您可以摆脱灵活性(当您插入不同的 USB 闪存棒时重新启动计算机)或容错(当存储设备开始出现故障时丢弃所有数据而没有任何警告,因为软件假定硬件是永久的完美)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多