Hyper-threading works by duplicating those sections of processor that kept the architectural state-but not duplicates the main implementation resources. This allows a Hyper-threading equipped processor to pretend to be two "logical" processors to the host operating system, allowing the operating system to schedule two threads or processes concurrently. Where implementation resources in a non-Hyper-threading capable processor are not used by the present task, and mainly when the processor is stalled, a Hyper- threading equipped processor might use those implementation resources to implement the other scheduled task.
Except for its performance implications, this innovation is transparent to programs and operating systems. All that is needed to take advantage of Hyper-Threading is symmetric multiprocessing (SMP) support in the operating system, as the logical processors shows as standard separate processors.
Though, it is possible to optimize operating system behaviour on Hyper-threading capable systems, such as the Linux methods discussed in Kernel Traffic. For example, take an SMP system with two physical processors that are both Hyper-Threaded (for a total of four logical processors). If the operating system's process scheduler is unaware of Hyper-threading, it would treat all four processors likewise.
As a result, if only two processes are eligible to run, it may choose to schedule those processes on the two logical processors that occur to belong to one of the physical processors. Therefore, one CPU would be extremely busy while the other CPU would be completely idle, leading to bad overall performance. This problem can be keep away by improving the scheduler to treat logical processors differently from physical processors; in a sense, this is a limited form of the scheduler changes that are needed for NUMA systems.