Talking about the architecture of computers, we refer to the set of all the blocks (one or several components) and the communications between them, which make the computer work in a coordinated way, serving a common purpose. Each block fulfills one or more tasks, which orderly and coordinated contribution makes the computer fulfills the function for which it was designed.
In general, we can use the term architecture for all types of machines, referring to the blocks that make it and how they work in a coordinated way between them. For example, talking about a printer, in a very simple way, we can identify the following blocks:
- A tray to place the paper.
- Few registers or memory to save the data to be printed.
- A printing system to transfer the data to the paper.
- Buses that connect all the components and enable communication between them.
- And a controller that manages the whole process.
It is therefore worth asking why we define and work with architectures, it should have some advantages. Well, yes, it certainly has many advantages among which I would highlight:
- Working with blocks with perfectly defined functions helps simplify problems and improve the performance of each block. It helps to cut the system into smaller and easier to use parts, which we can treat independently, abstracting ourselves from the operation of the rest of the blocks.
- We can change parts of the system without influencing or affecting the rest.
- It is much easier to isolate problems and act on them.
- Greater specialization in the blocks is developed and it is faster and easier to develop improvements in these to improve the complete performance of the system.
The architecture of a computer
Okay, but how do we apply what we have seen so far to the architecture of a computer?
If we remember the first post of this series, in which we said that the computer is a machine of general purpose, so it serves for many things, it seems logical to think that the architecture of a computer should be something changing and adaptive.
Well, for a computer, this adaptable architecture could be translated as programmable. Blocks do not change, after all they are physical components, but the way they communicate and organize if they do. And all this is defined by the program we are running.
Von Neumann architecture
However, computers have not always been programmable. At first, the different blocks had to be wired to configure the computer in order to perform a specific task. And when we wanted to move on to another task, we had to change all the wires and connect the blocks in the right way to perform the new task. A very big mess.
It was not until 1945 when John Von Neuman, a genius of the time, proposed a new architecture that avoided having to go around rewiring everything every time we wanted to change tasks on the computer. This architecture has been named with his name and is the basis of all modern computers.
Neumann introduced the concept of a stored program, which was saved in memory along with the data, and which basically contained instructions on what to do, what blocks come into play and how to handle the results of these to fulfill the desired task.
The contribution of Neumann was capital and its implications reach our days. Just think for a while about what it would be like if every time we went to do something on our computer we had to change a whole set of connections… It was a turning point from which computers would become more versatile and easier to use, and would begin to become popular.
In this architecture, program and data were saved together in memory, and when the computer read the contents of the memory, it discriminated whether it was data or a program, and acted accordingly.. It was a breaking point from which computers would become more versatile and easier to use, and they would begin to become popular.
Von Neuman’s architecture distinguishes four fundamental components: the processor (CPU), memory, Input and Output interfaces, and buses.
- Processor (CPU: Central Process Unit): It is the brain of the computer, the block that actually executes all the instructions and controls the operation of the rest of the components.
- Memory: Stores the data used by the computer, whether programs or data.
- Input and Output Interfaces: Devices that allow information to be exchanged with the outside.
- Buses: the connections that interconnect the different blocks of architecture.
This post is part of the collection “Computer Architecture” that reproduces the class notes that I use to teach the subject at ESIC. You can see the index of this collection here.