Processors

Homogeneity

Homogeneity means that no processor or set of processors is special with respect to its instruction set. Windows NT requires that all of the central processors in the system execute the same instruction set with the same semantics. This means not only that all processors must be of the same architecture, but that they must all appear to the software to be of the same revision level. Windows NT will not run on machines in which difference in the revisions or errata among processors are visible to software. In practice, the most effective approach is to ensure that all processors are of the same revision level.

Homogeneity extends to co-processors and floating-point units. In particular, either all processors should have, or no processors should have, floating-point support.

Even though the 386 and i486 are of the same architecture, mixing them will not be supported because of differences in memory access control features and incompatibilities between typical 386 FP behavior and i486 FP behavior.

Systems that are to support special co-processors, or general processors that do not execute the same instruction stream as the central processors, must set them up as I/O devices (e.g. an i860 floating point accelerator in an i486 system would appear as an I/O device). As stated below, all I/O devices must be sharable.

Symmetry

Symmetry means that no processor is special with respect to its access to memory, interrupts, or I/O. Windows NT requires that all central processors have a common view of all of main memory, at the physical level.

For interrupts, symmetry means that any interrupt from any source may be routed to any processor and handled there. (Coprocessor interrupts should only go to their attached processor). For I/O, it means that all I/O control registers, be they in memory space, I/O space, or some other special address space, are accessible to all processors.

Per-processor control hardware such as interrupt controllers or processor identification registers must be at the same physical address for all processors.

Processor Local Storage

Windows NT requires a small area of per-processor storage, located at the same virtual address for each processor. For machines on which suitable memory mapping is available in the processor, such mappings are used (e.g. the x86 uses segment mappings, "wired" TLB entries are used in MIPS processors).

If the processor does not have any such mapping available, then the machine must provide this resource in one of two ways. The first way is to provide at least 4 per-processor registers in each central processor or in some I/O device at the constant physical location. The second way is to provide memory which is physically unique to each processor, but at the same physical address for all of them.

Note that this requirement arises from the need to execute multiple threads from the same page map simultaneously, a key feature for allowing applications to make effective use of MP power.