So, lets say you're running the usual suspects under WinXP - a few
browsers, Agent, an MP3 player, burning a DVD, and video encoding in
the background.
Does the system recognize the relative loads and balance them,
dedicating one core to your encoding while leaving the other to handle
everything else, or do different apps contend for the cores? Does the
user have any control over such things at all?
The user doesn't have too much controller at all over such things, but
WinXP (or Linux, or any other modern OS) is not just randomly sending
processes all over the place. All modern OSes use a certain degree of
"processor affinity" to keep a process (and threads as well) to a
particular logical CPU.
It's important to have some degree of processor affinity in any
multi-CPU setup (including a single P4 chip with Hyperthreading),
otherwise you'll tend to spend a lot of time thrashing data around in
and out of cache. In current CPUs you usually have at least 90%
(often over 95%) of memory access being handled by L1 cache, so if a
task is being tossed in between two processors a lot of time gets
wasted doing cache snoops and such.
Now, of course, just HOW you decide what task gets loaded onto what
CPU is a whole other matter. A lot of time and effort is spent in
optimizing the task scheduler in an OS to tune this sort of thing. Of
course, every different hardware and software setup requires different
tuning here. A system with a single dual-core Core 2 Duo chip, with
it's large shared L2 cache and common path to main memory is going to
be a bit different from a pair of single-core Opterons, each with
separate L2 cache and separate local memory, and both are going to be
VERY different from a P4 with hyperthreading.
Similarly there are a lot of software situations. In your example
above you've got one single background task taking up a LOT of
processing time with a variety of other tasks with low CPU
requirements. This is quite different from something like a webserver
where you'll have MANY tasks all with a similar level of processing
requirements.
FWIW it is possible to set a particular application to "stick" to a
single logical processor in WinXP through Task Manager. Just
right-click on the process in question and select "Set Affinity".
Note that this option is only visible if you've have a multiprocessor
system.