Computers are a huge part of our lives.
However, there was a time when a machine capable of making calculations was barely a dream.
The invention of computers isn't credited to anyone in particular, it was more of an incremental process, with several people contributing to it over the decades.
Let's take a look at some of these contributions.
A relay is basically an electrically operated switch.
When current passed through the coil, a magnetic field was created.
Mark I used roughly 3500 relays to do its job.
Both relays and punched tapes were moving parts, subject to wear and tear, causing computer errors, or bugs. Literally.
1947 - The transistor was invented at Bell Labs, which led to the creation of increasingly smaller computers.
1957 - IBM came up with the IBM 608, the first fully transistor-powered, commercially available computer.
Soon after, IBM transitioned all its computing products to transistors, bringing computers into offices and, eventually, homes.
Today, computers use transistors that are smaller than 50 nanometers, and capable of switching states millions of times per second.
A lot of the transistor development happened in California, in a place we know today as Silicon Valley.
But how is the modern computer architectured?
John von Neumann was a mathematician, physicist and computer scientist, born in Hungary in the early 1900's.
His contributions were immense, and include what we know today as the von Neumann Architecture.
John von Neumann's model was based on the idea of every computer device being designed with the same fundamental structure:
This architectural model is still used today. Every device we own is designed in a similar fashion.
But before we take a look at how the computer components work together to execute a program, let's take a quick look at the individual components.
Before we start dissecting the insides of a computer, it is important to define what a computer really is.
Simply put, a computer is an electronic device that can be instructed to execute sequences of instructions (programs). These instructions include saving data, retrieving data, arithmetic and logical operations.
This is a computer.
Any device used to store information for immediate use in a computer.
There are mainly two types: volatile and persistent.
We can use logic gates to create circuits that can be used to save bits.
Random Access Memory
Fast, short-term memory.
Used to store the information that the computer will need to access at that moment, including program instructions and data.
If the power runs out, the data will be lost.
Each memory cell has a fixed size and an address. It takes the same amount of time to access data, independently of its location.
Unlike RAM, this type of memory is persistent.
ROM chips are programmed by the manufacturer, generally containing information that is crucial for the computer's boot process.
There are several types of ROM: PROM, EPROM, EEPROM.
Generally much slower that both RAM and ROM.
It can be removable, or persistent.
Several types, including:
Electro-mechanical data storage device that stores information persistently, using magnetism.
The platter is divided into billions of tiny areas, each with the capacity of being independently magnetized/demagnetized to store a 1 or a 0.
The mechanical arm moves across the platter to read/write information.
Typically, HDDs are divided into sectors. Each sector has a defined size.
HDDs can also be partitioned. A partition represents a logical division of the disk into a smaller part.
The Operating System takes advantage of both the hard drive sectors and partitions. But more on that later.
SSDs are non-volatile storage that uses flash-based memory.
They are faster than traditional HDDs, mostly because there are no moving parts in a SSD.
The brain of every computer, the CPU is responsible for performing all types of data processing operations.
These operations include arithmetics, logic, input/output.
Now that we've taken a look at some of the major computer components, it's time to take another look at the von Neumann architecture, and really understand how all the components connect to each other to execute a program.