|
The so-called von Neumann architecture is a model for a computing
machine that uses a single storage structure to hold both the
set of instructions on how to perform the computation and the data required or generated by the computation. Such machines are
also known as stored-program computers. The separation of storage from the processing unit is implicit in this model.
The architecture is named after mathematician John von Neumann
who provided an early written account of a general purpose stored-program computing machine. The term von Neumann
architecture, however, is seen as doing injustice to von Neumann's collaborators, notably John William Mauchly and J. Presper Eckert who conceived of the stored-program concept with their work on ENIAC. The term is now avoided in many circles.
By treating the instructions in the same way as the data, a stored-program machine can easily change the instructions. In
other words the machine is reprogrammable. One important motivation for such a facility was the need for a program to increment
or otherwise modify the address portion of instructions. This became less important when index registers and indirect addressing
became customary features of machine architecture.
Current machine architecture makes small-scale self-modifying code unnecessary, while processor pipelining and caching schemes
makes it inefficient. The practice is now generally deprecated. Of course, on a large scale, the ability to treat instructions as
data is what makes compilers possible. It is also a feature that can be exploited
by computer viruses when they add copies of themselves to existing
program code. The problem of unauthorized code replication can be addressed by the use of memory protection support, and in particular virtual memory architectures.
The separation between the CPU and memory leads to what is known as the von Neumann bottleneck. The
bandwidth, or the data transfer rate, between the CPU and memory is very small in comparison with the amount of memory. In modern
machines it is also very small in comparison with the rate at which the CPU itself can work. Under some circumstances (when the
CPU is required to perform minimal processing on large amounts of data), this gives rise to a bottleneck in overall processing
speed, because the CPU is forced to wait for vital data to be transferred to or from memory.
Compare with:
|