Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

Does the CPU is run at 100% or near full capacity when the computer is booted into MS-DOS? Will the CPU temperature become higher even though we are not running any program in DOS mode?

In Windows, we can see the CPU usage in % of utilization in Task Manager. From what I heard, CPU is running at near 100% capacity in DOS OS or in the BIOS MAIN screen.

Is this caused by lack of CPU optimization in DOS OS?

share|improve this question

migrated from Dec 19 '11 at 5:21

This question came from our site for system and network administrators.

All I can contribute is that when I run a DOS based game, invoked from Win XP, my CPU core temps go up by about 12 to 14 C. So the cores are obviously under a much heavier load. – user221396 May 1 '13 at 20:27

DOS (at least any MS-DOS) doesn't idle the CPU with the x86 HLT instruction like most modern operating systems when it is not doing anything.

Not sure of the specific MS-DOS function that waits for a keypress, but that would probably be where the the CPU is effectively "spinlocking" in a loop when it is doing nothing, under MS-DOS. It is still fetching instructions and running, just not being productive.

Looks like newer versions of FreeDOS will do this, though.

You may find this helpful.

share|improve this answer
Actually, it's using all that extra processor power to figure out ways to take over the world from what I understand. – Jeff F. May 29 '12 at 19:03

CPU is always running at 100% capacity if it's running at all. In some cases it may be shut down to save power.

Modern operating systems have things like task schedulers which rotate programs which are executing on the CPU so some percent of the time CPU may not be doing any productive work (for example executing NOPs, jumping in place or whatever the system idle process does). So what task manager shows when showing you the CPU load is actually the percentage of time during which the system idle process is not executing. That is completely normal because some processes simply have no need for extra CPU time as they could be waiting for something else.

On older operating systems, like various versions of DOS, there is only one process running at a time and we don't have "task manager" because there's no need for it since you can run only one program at a time*. Even when you think that you're not running any program, you're running OS shell which is actually taking up all CPU resources available. In practice this does not lead to higher CPU temperatures. To put it simply different instructions use different parts of the CPU and instructions used for waiting for input don't heat up the CPU much.

As for lack of optimization, well that's a really big topic which mainly depends of what you consider as optimal. As I said, the CPU is always under load and it can't work on say 50% power (if you for example lower the frequency, it's still running at 100% but now each instruction takes longer). In some cases it is a requirement for computer to focus only on one single program and in that case if your CPU is executing something else, it's wasting time. If you want illusion of having 50 different programs running at the same time, then you cold say that the CPU usage is suboptimal. Do keep in mind that the task switching itself which happens in modern operating systems is taking some CPU resources and back when DOS was new, you simply didn't have enough resources for multiple programs (and the task scheduler) to be running on a home computer at the same time.

*Yes, there were things like terminate and stay resident programs, but they weren't real multi-program experience. Of course there are thing like interrupt handlers which change what is executing on the CPU, but since they don't have their own stack, I wouldn't call them real processes.

share|improve this answer
I also very vaguely recall dos lacks idle state support, but can't seem to find any information on it to post another answer – Journeyman Geek Dec 19 '11 at 9:42
Multi-tasking (what modern single-user desktop OSes do) and multi-programming, aka timesharing - running multiple interactive users' programs on one computer - preceded the IBM-PC and DOS by about 20 years, and on computers with considerably fewer resources. In 1980, the 5 MHz Intel 8088 had more than enough memory and speed to multi-task. 1970s-era mini-computers commonly ran laboratory experiments and were embedded in industrial equipment as controllers, and MIT's CTSS time-sharing system in the early 60s ran on an IBM 7094 clocked at 5KHz with 2 banks of 32K 36-bit words. – JRobert May 29 '12 at 20:14
> CPU is always running at 100% capacity if it's running at all… I think you know exactly what he meant. -1 – Synetech Sep 1 '12 at 21:31
@Synetech I have no idea what you're talking about. – AndrejaKo Sep 1 '12 at 21:50
He is clearly talking about the CPU load: In Windows, we can see the CPU usage in % of utilization in Task Manager. So when you nag about what it means for a CPU to run at 100%, you are nitpicking and your whole answer is of little use for the question asked (it’s not asking about multi-tasking). – Synetech Sep 1 '12 at 21:58

You are correct; in DOS (and in fact during the POST/BIOS), the CPU load is 100%.

This is because back when DOS was first written (as well as the old BIOS code on which later versions were based on) CPUs were not nearly as vulnerable to overheating as they are today. In the “old days”, a 100MHz CPU would produce very little heat and often did not need more than a simple fan to keep it cool. (Older ones like 66MHz CPUs often did fine with just a heat-sink, and even older ones like 20MHz had nothing at all!)

Because of this, much old software did not bother idling the CPU with the HLT instruction during loops (which are the heart of any sort of useful program). DOS itself is no different. When you see the DOS prompt, it is sitting there in what basically amounts to a while loop like this:

while (!done) {

This is not much different than an infinite loop like while(1); which instantly drives the CPU load to 100% and heats it up.

(This is why I try to spend as little time in the POST/BIOS/DOS as possible on my “modern” system, or at least I make sure that the fan is spinning at 100% before I do.)

Fortunately, there are some options, including one from Microsoft themselves. With the advent of virtual-machines, there was a renewed interest in DOS and this issue was noticed. One solution was provided by Microsoft in the form of which they packaged with Virtual PC. Another solution, dosidle.exe, comes from a VMWare-oriented page.

Basically what these programs do is to load a TSR that injects HLT instructions, thus causing the CPU to do nothing and cool down. Some are simple while others have extra options.

If you connect your system to a power-meter like the Kill-a-Watt, you can observe this numerically as the system will draw significantly more power while in the BIOS editor or DOS, paused POST, or even the OS boot-menu. However, when a power-aware OS loads, the power usage drops (in fact, even running in DOS will drop it to the same amount). The specific difference will vary, but 30-50W is not uncommon.

Another way you can see this in action is with a virtual machine. If you pause the VM at the POST or enter the BIOS configuration tool, you will see the CPU load on the host being high (100% on a single-core processor, 50% on a dual-core/threaded, etc.) If you boot into DOS in the VM, the host’s CPU load remains high until you execute, at which point, it drops to ~0%. It also drops when you boot the guest into Windows or other modern OS.

share|improve this answer
Please provide a source for the claim that sitting in BIOS or in plain old DOS will produce increase of temperature on modern systems. My experience running DOS and assembly programs on modern x86 systems with no OS shows otherwise. – AndrejaKo Sep 1 '12 at 21:55
Also a CPU executing HLTs 100% of the time is still running at 100%. – AndrejaKo Sep 1 '12 at 21:56
Install Windows in a virtual machine and open the BIOS editor (or just pause at the POST screen). Look at Task Manager icon in the host system. It will indicate a 100% CPU load (for any cores/threads/etc. that are being used by the VM software). Now let the VM continue loading Windows. The CPU load in the host will drop to a few percent. You can install DOS in a VM and view the same effect. You can also view it running live if you use some software to monitor temperatures and CPU load in DOS. – Synetech Sep 1 '12 at 22:47
As I wrote, I observed different behavior on systems actually running DOS and am not convinced by your argument. In my opinion, what is shown here is more related to a side effect of running the virtual machine. – AndrejaKo Sep 1 '12 at 23:17
@AndrejaKo, no it’s not; not at all. If it were, then why would it drop from 100% to ~0% as soon as Windows has loaded? Because Windows idles the CPU while DOS/BIOS/POST do not. I told you that you can observe it with CPU/temperature monitoring software in DOS itself (e.g., HWiNFO), but you are obviously too obstinate to bother. – Synetech Sep 1 '12 at 23:59

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .