location :: Computer:: the Brain the Computer the Question the Forum

Workings of a Computer

Many people think that computers are too complicated and complex for them to understand. If they had taken a closer look, they would have realised that all digital computers actually work on the same basic concept. The basic working concept of a computer is actually very simple.

Computers are basically machines built to store and manipulate information. Computers always consist of many components linked to a main system board or built in the system board itself. In these components, information is stored manipulated and put through reqiured procedures to produce the required result.

The question here is, how is the information stored and manipulated. You see, in digital computers, data is represented using the binary system. Data is stored on main memory using eletrical pulses, a strong eletrical pulse through a wire/circuit will mean a "1" state and a weaker or no eletriacal pulse would mean a "0" state.On diskdrives and magnetic tape, data is stored on metal coated surfaces with a magnetised spot meaning a "1" state and a non-magnetised spot meaning a "0" state.

Just having 2 states of representation cannot store much information right ?
Hence, many of such 2 state representations which we call "bits" are put together to create more combinations.

For example,
if 2 bits were put together, we would have the following possible 4 states

1st state: 0 0
2nd state: 0 1
3rd state: 1 0
4th state: 1 1

if there were instead 3 bits out together, then we would have the following 8 states

1st state: 0 0 0
2nd state: 0 0 1
3rd state: 0 1 0
. .
. .
. .

8th state: 1 1 1

Judging from this pattern, the number of states increase as more bits are put together. Infact, the formula for the number of states is 2 to the power of the number of bits put together. Having 8 wires/magnetisable spots together will therefore give us 256 number of states, plenty and enough to let each state represent a letter in the aphlabet, a puncuation and any special characters. Such 8 bits put together is called a byte.

Representing symbols and numbers is good, but to be really useful, a machine needs to be able to manipulate these things. It turns out that is pretty simple too. All the complex things a computer can compute are simply combinations of two basic operations. The first is called NOT. NOT takes one state as input and outputs the opposite state. Thus 1 becomes 0, and 0 becomes 1; true becomes false, and false becomes true. Simple! The next is a little more complex, it is called AND, and it requires two bits of input and gives a single output. Given a 0 and a 0, the answer is (as you might guess) 0. Given 1 and 0, the answer is still 0. The other combination 0 and 1 yields 0 again. But 1 and 1 give 1. We can summarize this in a neat notation known as a Truth Table:

```      NOT  1 | 0     AND  0 0 | 0
0 | 1          1 0 | 0
0 1 | 0
1 1 | 1
```
What happens if you hook a NOT circuit's input to the output of an AND circuit? Why you get a NAND circuit, and here's its truth table:
```     NAND  0 0 | 1
1 0 | 1
0 1 | 1
1 1 | 0
```
Which is opposite of the AND function.

There are more operations than this, such as OR, NOR and XOR, but you can easily make those out of the basic AND and NOT circuits as we did with NAND. Electrical engineers call these circuits "gates," hinting at their electronic-decision-making purpose.

If you cross-connect the inputs and outputs of a pair of NAND circuits you get a new circuit which "remembers" what its inputs were set to. This is called a "flip-flop" and it is a one bit memory. Cascade these flip-flops side by side and you get a memory which can store larger numbers (or a single symbol from a larger set of symbols). Such a circuit is called a "register." Put these gates together in a slightly different combination, and you get a circuit with adds binary numbers, a single bit at a time; this is called (surprise) an "adder." Cascade multiple adders side by side as we did with flip-flops, and you get adders which can add bigger numbers. Well, subtraction is just a special kind of adding, and multiplication and division are simply repeated addition and subtraction respectively. By now, I think you get an appreciation of the possibilities.

So, complex computers are made up of lots of gates, adders, registers and wires to connect them together in different ways. Were it not for one special thing I've not yet mentioned, combinations of these parts often "flail" around, switching "aimlessly," almost always getting stuck in some inconvenient configuration (a.k.a. "state"). (By the way this is what computer people mean when they say a computer has "gone crazy and hung itself up.") Taming these gates can be very tricky, and while some simple computers are built this way, beyond a certain point, it's too hard to build a reliable system this way. (This style of digital circuitry is called Asynchronous or Combinatorial Logic, and has its uses). Better for our purposes, is the idea of getting all the different parts to march together in step like a battalion of solders. That is, when the drumbeat sounds, the different components determine their new outputs from the inputs present at the beat -- they change state in sync with each other. (This is called Synchronous Logic.) The drumbeat in a computer is called its "clock." OK, let's do something with this: hook an adder and register together end to end (hooking the outputs of the adder to the inputs of the register and vice-versa), then feed a clock signal into it. This gives you a "counter," which is a circuit that counts in binary: 0, 1, 10, 11 and so on up to the number of bits in the register/adder combination.

Let me digress a little. This talk about clocks is where the "megahertz" stuff you've undoubtedly heard about comes in. A 90 MHz computer has a clock which "ticks" ninety million times a second. A computer's clock synchronizes all the major activities of the computer. As a general rule, making the clock go faster or slower, speeds-up or slows-down the computer. (Of course, this is not without its limits - going faster means more power consumption, heat, and electronic noise, not to mention the fact that a given electronic component, manufactured to given tolerances, can only switch so fast. Finally, there is the speed-of-light, beyond which electricity cannot travel -- one foot per nanosecond as Commodore Grace Hopper , inventor of COBOL, liked to say.)

So, now our pile of electronics can make logical decisions (gates/NOT/AND), do math (adders/counters), remember (flip-flops/registers), and do combinations of these things in sequence (clock). If we connect certain outputs back into certain inputs, once again adding "feedback" to our system, then we will see cyclical patterns emerge in our circuit: we will have built a computer! (In fact, the counter we "built" in the paragraph above, is probably the simplest digital computer.) Such a computer would be called "hard-wired" because the patterns it would follow (and the manipulations that result) would be determined by the parts and the way they were wired together.

Then came John Von Neumann, the famous mathematician. His great contribution to computers was the idea of letting values stored in memory (groups of registers) determine how other values (registers/memory) in the computer would be manipulated. That is, he created the "stored-program" computer. With this great idea came the typical computer cycle of fetching a control value (instruction) from a memory location determined by the value of a certain register (program counter), carrying-out the manipulation specified by the value (executing the instruction), and finally adjusting (incrementing) the program counter to point to the next instruction in memory. This classic fetch-execute-increment cycle is the basis of most digital computers -- sometimes known as "Von Neumann Machines." Since we can manipulate the values of registers, why not the program counter? When this happens, we say that the computer "branches" to the location in memory (that is, our program) indicated by the new value of this register. Now we are not restricted to sequential sets of operations -- we can take alternate sequences, and even repeat sequences (or not, depending on the instructions we execute.)

I've left out an important point: How do you get information into and out of a computer? Well in the simplest case, an on-off switch connected to the input of a computer's gate can serve as a one-bit input device. Likewise, a simple light bulb hanging on the output of a gate could serve as a single bit output device. To get more data in and out, you simply gang more switches and lights side by side much as we did in the case of flip-flops to make registers. For example, it is real simple to make a set of switches or lights electrically appear to the computer as a register or memory location -- we've already seen that it's easy to move bits into and out of registers and memory. (These are called "I/O ports" and "memory-mapped I/O" respectively. There are trade-offs associated with each style.) Do you remember those movies featuring computers chock-full of lights and switches? Well these actually existed. Even today you can find microcomputer training kits which feature lights and switches like this.

So how do you get from lights and switches to things like keyboards, printers, and displays? Remember we cascaded inputs and outputs in the previous paragraph. These more advanced I/O devices usually "talk" to the computer in 8 bit chunks (bytes, remember?). In each of these, a certain pattern of bits is wired to represent a certain action, or vice-versa. For example, when you press the 'A' key on a keyboard, it typically sends the computer the value 65 (or 01000001 in binary). Likewise, most printers will print a capital 'A' in response to the reception of a value of 65 at their input. Similarly, a display would display a capital 'A'. Early I/O devices made this association more-or-less directly (circuits dedicated to each operation). Nowadays, most I/O devices make these associations with the assistance of a small built-in computer! In fact, inputting and outputting the alphabet is pretty basic for I/O devices, which typically go beyond this (to reading and drawing pictures, listening or making sounds, storing/retrieving bytes on a magnetic tape, and on and on.)

OK, how does this all relate to "computer languages?" People, don't program a computer by flipping switches and watching lights do they? Well, they used to; it's even done rarely today. But, no one really wants to program a computer that way because it's so difficult. So, we use the computer's ability to manipulate data to translate strings of letters, words, and numbers into the 1's and 0's that a computer can act directly upon. Specifically we translate abstract operations and information representations into the very specific form needed by the computer itself. Such translators are called "compilers" and "interpreters," and they are very common and useful programs. If fact, they represent a huge step in transforming a computer from a high-tech door-stop to a useful tool. The language of 1's and 0's which a given computer acts upon is called its "machine-language." The more human oriented languages are known as "high-level" or "problem-oriented" languages. Some of these languages include "BASIC," "FORTRAN," "COBOL," and more recently "Pascal," "Smalltalk," and 'C' (among many others!). All of this leads to a very important concept: that data and programs are interchangeable. (For example, a compiler considers your COBOL program to be data, while the same computer can actually execute the compiler's output -- which makes the output a program!). As computers get faster, acquire more memory, and better I/O devices, we can get them to do more sophisticated manipulations (which usually, but not always, make for easier to use computers!).

Well, I hope this gives you a sense for how computers work. What at first seems hopelessly complicated, is really just a series of basic ideas and components that act together in complex ways. There is more to it than this, but just understanding these few concepts takes much of the mystery out of computers, making them plausible, and putting a working understanding within your grasp.

 Back Next :: Development ::

 copyright of Team: C001501 ::: C001501@thinkquest.org a students' production for thinkquest®