当计算机启动到 MS-DOS 时,CPU 是否以 100% 或接近满负荷运行?即使在 DOS 模式下我们没有运行任何程序,CPU 温度是否会变高?
在 Windows 中,我们可以在任务管理器中看到 CPU 使用率(使用率百分比)。据我所知,在 DOS 操作系统或 BIOS 主屏幕中,CPU 的运行容量接近 100%。
这是由于 DOS 操作系统缺乏 CPU 优化造成的吗?
答案1
HLT
与大多数现代操作系统不同,DOS(至少是任何 MS-DOS)在不执行任何操作时不会使用 x86 指令使 CPU 空闲。
不确定等待按键的特定 MS-DOS 函数,但这可能是 CPU 在 MS-DOS 下无所事事时在循环中有效“自旋锁定”的地方。它仍在获取指令并运行,只是没有效率。
看起来像是较新版本的 FreeDOS将会这样做。
你可能会发现这有帮助的。
答案2
CPU 运行时总是以 100% 的容量运行。在某些情况下,可能会关闭以节省电量。
现代操作系统具有任务调度程序之类的功能,这些程序会轮换在 CPU 上执行的程序,因此 CPU 可能在一定时间内不执行任何有成效的工作(例如执行 NOP、原地跳转或系统空闲进程执行的任何操作)。因此,任务管理器显示 CPU 负载时显示的实际上是系统空闲进程未执行的时间百分比。这是完全正常的,因为有些进程根本不需要额外的 CPU 时间,因为它们可能在等待其他任务。
在较旧的操作系统(如各种版本的 DOS)上,一次只有一个进程在运行,我们没有“任务管理器”,因为没有必要,因为您一次只能运行一个程序*。即使您认为自己没有运行任何程序,您也在运行 OS shell,它实际上占用了所有可用的 CPU 资源。实际上,这不会导致 CPU 温度升高。简单地说,不同的指令使用 CPU 的不同部分,用于等待输入的指令不会使 CPU 过热。
至于缺乏优化,那是一个非常大的话题,主要取决于你认为什么是最佳的。正如我所说,CPU 始终处于负载状态,它无法在 50% 的功率下工作(例如,如果你降低频率,它仍然以 100% 的功率运行,但现在每条指令都需要更长的时间)。在某些情况下,计算机需要只关注一个程序,在这种情况下,如果你的 CPU 正在执行其他程序,那就浪费时间了。如果你想要同时运行 50 个不同程序的幻觉,那么你可以说 CPU 使用率不是最理想的。请记住,现代操作系统中发生的任务切换本身会占用一些 CPU 资源,而在 DOS 刚出现的时候,你根本没有足够的资源让多个程序(和任务调度程序)同时在家用计算机上运行。
*是的,确实存在诸如终止和驻留程序之类的东西,但它们并不是真正的多程序体验。当然,也存在诸如中断处理程序之类的东西,它们会改变 CPU 上正在执行的内容,但由于它们没有自己的堆栈,因此我不会将它们称为真正的进程。
答案3
你是对的;在 DOS 中(实际上是在 POST/BIOS 期间),CPU 负载是 100%。
这是因为,在 DOS 首次编写时(以及后续版本所基于的旧 BIOS 代码),CPU 不像现在这样容易过热。在“过去”,100MHz CPU 产生的热量很少,通常只需要一个简单的风扇就可以保持冷却。(较旧的 CPU(如 66MHz CPU)通常只需一个散热器就可以正常工作,甚至较旧的 CPU(如 20MHz CPU)根本没有散热器!)
因此,许多旧软件不会HLT
在循环期间用指令让 CPU 空闲(循环是任何有用程序的核心)。DOS 本身也不例外。当您看到 DOS 提示符时,它就位于基本上相当于 while 循环的位置,如下所示:
while (!done) {
getkey();
process();
}
这与无限循环没有太大区别,无限循环while(1);
会瞬间使 CPU 负载达到 100%,并使其发热。
(这就是为什么我尝试在我的“现代”系统上尽可能少地花时间在 POST/BIOS/DOS 上,或者至少在我这样做之前确保风扇以 100% 旋转。)
幸运的是,有一些选择,包括微软自己提供的。随着虚拟机的出现,人们对 DOS 重新产生了兴趣,并注意到了这个问题。微软提供了一种解决方案,idle.com
他们包含 Virtual PC。另一个解决方案dosidle.exe
是,来自面向 VMWare 的页面。
这些程序基本上做的是加载一个股东总回报注入HLT
指令,从而使 CPU 不执行任何操作并冷却下来。有些很简单,而有些则有额外的选项。
如果您将系统连接到功率计(例如 Kill-a-Watt),则可以从数字上观察到这一点,因为系统在 BIOS 编辑器或 DOS、暂停 POST 甚至 OS 启动菜单中时会消耗更多电量。但是,当加载具有电源意识的操作系统时,功耗会下降(事实上,即使idle.com
在 DOS 中运行也会将其降至相同数量)。具体差异会有所不同,但 30-50W 并不罕见。
另一种观察此现象的方法是使用虚拟机。如果您在 POST 时暂停虚拟机或进入 BIOS 配置工具,您将看到主机上的 CPU 负载很高(单核处理器上为 100%,双核/线程上为 50%,等等)。如果您在虚拟机中启动到 DOS,主机的 CPU 负载将保持很高,直到您执行idle.com
,此时负载会降至 ~0%。当您将客户机启动到 Windows 或其他现代操作系统时,负载也会下降。