Von Neumann architecture - an introduction
Processor architectures
The way that a processor is designed is known as its 'architecture' and this has a significant effect on its performance. There are a number of different designs of CPU. The most common one is the Von Neumann processor, found in nearly all personal computers, laptops, tablets, mobile phones, gaming consoles and other common computer-based devices.
Von Neumann architecture
In the 1940s, a mathematician called John Von Neumann described the basic arrangement (or architecture) of a computer.

A Von Neumann-based processor is defined as one that:
-
- Uses a single processor.
- Uses one memory for both instructions and data. A von Neumann computer cannot tell, for example, if this bit pattern: 0011 0011 1110 1111 in a memory location is a piece of data, an instruction or a combined instruction with a piece of data. It ‘knows’ only because of the location of a particular bit pattern in RAM. The locations of all instructions and data are carefully tracked at all times. Occasionally, your computer can get confused and it stops working as expected or crashes altogether. The only solution is to reboot your computer (restart it). Then, the operating system, programs and data can be reloaded and organised and tracked properly again.
- Executes programs by doing one instruction after the next in a serial manner using a fetch-decode-execute cycle.
Von Neumann bottleneck
Whatever you do to improve performance, you cannot get away from the fact that instructions can only be done one at a time and can only be carried out sequentially. Both of these factors hold back the efficiency of the CPU. This is commonly referred to as the 'Von Neumann bottleneck'. You can provide a Von Neumann processor with more RAM, more cache or faster components but if real gains are to be made in CPU performance then a major review needs to take place of the design of the CPU.
One way to improve the Von Neumann processor - redesign it! The Harvard processor
This type of processor has two separate memories accessed by their own busses; one memory for instructions (programs) and a different memory for data. A Harvard processor can fetch an instruction from the instruction memory using its dedicated instruction bus at the same time as fetching data from the data memory using its dedicated data bus. This potentially can increase the overall speed of the processor compared to a Von Neumann processor, whose busses have to be used for both fetching instructions and fetching data; this conflict for resources slows down the speed of processing instructions.