While the technologies used in computers have changed dramatically since the first electronic, general-purpose computers of the 1940s, most still use the stored-program architecture (sometimes
called the von Neumann architecture). The design made the universal computer a practical reality. The architecture describes a computer with four main sections: the arithmetic and logic unit (ALU), the control circuitry, the memory, and the input and output devices (collectively termed I/O). These parts are interconnected by bundles of wires (called "buses" when the same bundle supports more than one data path) and are usually driven by a timer or clock (although other events could drive the control circuitry).
Conceptually, a computer's memory can be viewed as a list of Ot cells. Each cell has a numbered
"address" and can store a small, fixed amount of information. This information can either be an instruction, telling the computer what to do or data, the information which the computer is to process using the instructions that have been placed in the memory. In principle, any cell can be used to store either instructions or data. The ALU is in many senses the heart of the computer. It is capable of performing two classes of basic operations. The first is arithmetic operations; for instance, adding or subtracting two numbers together. The set of arithmetic operations may be very limited; indeed, some designs do not directly support multiplication and division operations (instead, users support multiplication and division through programs that perform multiple additions, subtractions, and other digit manipulations). The second class of ALU operations involves comparison operations given two numbers, determining it they are equal, or if not equal which is larger.
The I/O Systems are the means by which the computer receives information from the outside world, reports 1tS results back to that world. On a typical personal computer, input devices include objects
like the keyboard and mouse, and output devices include computer monitors, printers and the like, but as will be discussed later a huge variety of devices can be connected to a computer and serve as I/O devices. The control system ties this all together. Its job is to read instructions and data from memory or the I/O devices, decode the instructions, providing the ALU with the correct inputs according to the instructions, tell the ALU what operation to perform on those inputs and send the results back to the memory or to the I/O devices. One key component of the control system is a counter that keeps track of what the address of the current instruction is; typically, this is incremented each time an instruction is executed, unless the instruction itself indicates that the next instruction should be at some other location (allowing the computer to repeatedly execute the same instructions).
The ALU and control unit (collectively called a central processing unit or CPU) have typically been
located on a single integrated circuit called a microprocessor. Since 1980, the functioning of such a
computer is in principle quite straightforward. Typically, on each clock cycle, the computer fetches
Instructions and data from its memory. The instructions are executed, the results are stored, and the next instruction is fetched. This procedure repeats until a halt instruction is encountered. Instructions, like data, are represented within the computer as binary code-a base two systems of
counting. The particular instruction set that a specific computer supports is known as that computer s machine language. Using an already-popular machine language makes it much easier to run existing software on a new machine:; consequently, in markets where commercial software availability is important suppliers have converged on one or a very small number of distinct machine languages.
Larger computers, such as some minicomputers, mainframe computers, servers, differ from the model
above in one significant aspect; rather than one CPU they often have a number of them. Supercomputers often have highly unusual architectures significantly different from the basic stored-program architecture sometimes featuring thousands of CPUs, but such designs tend to be useful only for specialized tasks




