Perhaps the most fundamental decision in designing a multiprocessor system is whether the system will be symmetrical or asymmetrical. In an asymmetrical multiprocessor system, the processors are assigned different roles. Some parts of the software may be able to operate as though they were running in a uniprocessor. The existence of a single processor handling specific work creates a unique point of failure for the system as a whole. Any processor is capable of running any thread in the system.
Any processor can handle any external interrupt.
This interchangeability means that all of the processors are potentially available to handle whatever needs to be done next. The cost of this flexibility is primarily borne by the hardware and software designers, although symmetry also makes the limits on the multiprocessability of the workload more noticeable, as we shall see. Different systems may have different cache configurations. A single processor is initially in control during the boot process. To ensure that user-written software continues to run correctly during the transition from uniprocessor to multiprocessor environments, device drivers and kernel extensions that do not explicitly describe themselves as able to run safely on multiple processors are forced to run only on the master processor.