Machine Architecture

Modern computers use what is referred to as a 'Von Neumann architecture' - they are composed of an addressable memory that contains data and instructions, as well as a CPU (Central Processing Unit) - commonly referred to as a 'processeor'. Instructions, which are executed sequentially as they appear in memeory, can either manipulate data or cause execution to jump to another location in memory. Data manipulation instructions perform simple arithmatic operations on data values.

Computers are said to store information in binary format as, typically, data is stored as an electical charge or as a magnetic polarity - for example, a charge above a certain threshold represents 1 and below the threshold represents 0. Traditionally, primary memory uses what is commonly referred to as RAM (Random Access Memory), which stores information using electrical charges that need to be refreshed every so often, i.e. every 64 ms or so [1]. In contrast, secondary memory uses what is commonly referred to as a disk drive, or hard (disk) drive, which stores information either as a magnetic polarity or in a medium that can persistently hold electricity such as a SSD (Solid-state Drive).

Computer memory is said to be addressable, meaning that the contents of memory can be manipulated by using descrete integers - each of which maps to a different location in memory where a single value can be stored. Due to limitations on the number of different integer addresses that may be used, generally, each memory address will refer to some number of binary digits - refered to as 'bits'. Although, 8 bits is usually referred to as a 'byte' and 32 bits is often referred to as a 'word', both words have been, and are, used to refer to different numbers of bits. The term 'word' often refers to the natural unit of data used by a particular processor design. For example, the 486, Pentium, and Core processors from Intel are 32 bit, while the Core 2 Duo and most later processors are 64 bit. For convenience, memory addresses are often represented in a fixed-width hexidecimal notation - each hexidical character is encoded in 4 bits. The range of memory addresses accessible is referred to as an address space, e.g., 0x0000000 through to 0xFFFFFFF.

In modern operating systems, a program accesses memory using a 'virtual address space' that is mapped to the physical address space. This allows each program to execute as if it has the full address space available to it. In most computers, the amount of physical memory is far smaller than the virtual address space, however, the operating system is able to copied unused contiguous ranges of memory - refered to as pages - out to secondary storage, and those ranges can then be remapped to where needed in the virtual address space.

Using a virtual address space for each process also allows that process to management memory independently from the operating system. If the a program tries to access a part of the address space that hasn't been mapped to phsical memory yet, or that has been moved to secondary storage, the operating system kernal is able to intercept the memory access and remap memory as appropriate before handing back control to the program.

Something about chasm between this and common convention.

References