English for the Students of
Islamic Azad University of Hamedan
How computers work
A general purpose computer has four main sections: the arithmetic and logic unit
(ALU), the control unit, the memory, and the input and output devices (collectively
termed I/O). These parts are interconnected by busses, often made of groups of
The control unit, ALU, registers, and basic I/O (and often other hardware closely
linked with these) are collectively known as a central processing unit (CPU). Early
CPUs were composed of many separate components but since the mid-1970s CPUs
have typically been constructed on a single integrated circuit called a
The control unit (often called a control system or central controller) directs the
various components of a computer. It reads and interprets (decodes) instructions in
the program one by one. The control system decodes each instruction and turns it
into a series of control signals that operate the other parts of the computer.. Control
systems in advanced computers may change the order of some instructions so as to
A key component common to all CPUs is the program counter, a special memory cell
(a register) that keeps track of which location in memory the next instruction is to be
Diagram showing how a particular MIPS architecture instruction would be decoded by the control system.
The control system's function is as follows—note that this is a simplified description
and some of these steps may be performed concurrently or in a different order
depending on the type of CPU:
1. Read the code for the next instruction from the cell indicated by the program
2. Decode the numerical code for the instruction into a set of commands or
signals for each of the other systems.
3. Increment the program counter so it points to the next instruction.
4. Read whatever data the instruction requires from cells in memory (or perhaps
from an input device). The location of this required data is typically stored
within the instruction code.
5. Provide the necessary data to an ALU or register.
6. If the instruction requires an ALU or specialized hardware to complete,
instruct the hardware to perform the requested operation.
7. Write the result from the ALU back to a memory location or to a register or
perhaps an output device.
8. Jump back to step (1).
Since the program counter is (conceptually) just another set of memory cells, it can
be changed by calculations done in the ALU. Adding 100 to the program counter
would cause the next instruction to be read from a place 100 locations further down
the program. Instructions that modify the program counter are often known as
"jumps" and allow for loops (instructions that are repeated by the computer) and
often conditional instruction execution (both examples of control flow).
It is noticeable that the sequence of operations that the control unit goes through to
process an instruction is in itself like a short computer program - and indeed, in
some more complex CPU designs, there is another yet smaller computer called a
microsequencer that runs a microcode program that causes all of these events to
Arithmetic/logic unit (ALU)
The ALU is capable of performing two classes of operations: arithmetic and logic.
The set of arithmetic operations that a particular ALU supports may be limited to
adding and subtracting or might include multiplying or dividing, trigonometry
functions (sine, cosine, etc) and square roots. Some can only operate on whole
numbers (integers) whilst others use floating point to represent real numbers—albeit
with limited precision. However, any computer that is capable of performing just the
simplest operations can be programmed to break down the more complex operations
into simple steps that it can perform. Therefore, any computer can be programmed
to perform any arithmetic operation—although it will take more time to do so if its
ALU does not directly support the operation. An ALU may also compare numbers and
return boolean truth values (true or false) depending on whether one is equal to,
greater than or less than the other ("is 64 greater than 65?").
Logic operations involve Boolean logic: AND, OR, XOR and NOT. These can be useful
both for creating complicated conditional statements and processing boolean logic.
Superscalar computers contain multiple ALUs so that they can process several
instructions at the same time. Graphics processors and computers with SIMD and
MIMD features often provide ALUs that can perform arithmetic on vectors and
Magnetic core memory was popular main memory for computers through the 1960s
until it was completely replaced by semiconductor memory.
A computer's memory can be viewed as a list of cells into which numbers can be
placed or read. Each cell has a numbered "address" and can store a single number.
The computer can be instructed to "put the number 123 into the cell numbered
1357" or to "add the number that is in cell 1357 to the number that is in cell 2468
and put the answer into cell 1595". The information stored in memory may represent
practically anything. Letters, numbers, even computer instructions can be placed into
memory with equal ease. Since the CPU does not differentiate between different
types of information, it is up to the software to give significance to what the memory
sees as nothing but a series of numbers.
In almost all modern computers, each memory cell is set up to store binary numbers
in groups of eight bits (called a byte). Each byte is able to represent 256 different
numbers; either from 0 to 255 or -128 to +127. To store larger numbers, several
consecutive bytes may be used (typically, two, four or eight). When negative
numbers are required, they are usually stored in two's complement notation. Other
arrangements are possible, but are usually not seen outside of specialized
applications or historical contexts. A computer can store any kind of information in
memory as long as it can be somehow represented in numerical form. Modern
computers have billions or even trillions of bytes of memory.
The CPU contains a special set of memory cells called registers that can be read and
written to much more rapidly than the main memory area. There are typically
between two and one hundred registers depending on the type of CPU. Registers are
used for the most frequently needed data items to avoid having to access main
memory every time data is needed. Since data is constantly being worked on,
reducing the need to access main memory (which is often slow compared to the ALU
and control units) greatly increases the computer's speed.
Computer main memory comes in two principal varieties: random access memory or
RAM and read-only memory or ROM. RAM can be read and written to anytime the
CPU commands it, but ROM is pre-loaded with data and software that never changes,
so the CPU can only read from it. ROM is typically used to store the computer's initial
start-up instructions. In general, the contents of RAM is erased when the power to
the computer is turned off while ROM retains its data indefinitely. In a PC, the ROM
contains a specialized program called the BIOS that orchestrates loading the
computer's operating system from the hard disk drive into RAM whenever the
computer is turned on or reset. In embedded computers, which frequently do not
have disk drives, all of the software required to perform the task may be stored in
ROM. Software that is stored in ROM is often called firmware because it is notionally
more like hardware than software. Flash memory blurs the distinction between ROM
and RAM by retaining data when turned off but being rewritable like RAM. However,
flash memory is typically much slower than conventional ROM and RAM so its use is
restricted to applications where high speeds are not required..
In more sophisticated computers there may be one or more RAM cache memories
which are slower than registers but faster than main memory. Generally computers
with this sort of cache are designed to move frequently needed data into the cache
automatically, often without the need for any intervention on the programmer's part.
Hard disks are common I/O devices used with computers.
I/O is the means by which a computer receives information from the outside world
and sends results back. Devices that provide input or output to the computer are
called peripherals. On a typical personal computer, peripherals include input devices
like the keyboard and mouse, and output devices such as the display and printer.
Hard disk drives, floppy disk drives and optical disc drives serve as both input and
output devices. Computer networking is another form of I/O.
Often, I/O devices are complex computers in their own right with their own CPU and
memory. A graphics processing unit might contain fifty or more tiny computers that
perform the calculations necessary to display 3D graphics. Modern desktop
computers contain many smaller computers that assist the main CPU in performing
While a computer may be viewed as running one gigantic program stored in its main
memory, in some systems it is necessary to give the appearance of running several
programs simultaneously. This is achieved by having the computer switch rapidly
between running each program in turn. One means by which this is done is with a
special signal called an interrupt which can periodically cause the computer to stop
executing instructions where it was and do something else instead. By remembering
where it was executing prior to the interrupt, the computer can return to that task
later. If several programs are running "at the same time", then the interrupt
generator might be causing several hundred interrupts per second, causing a
program switch each time. Since modern computers typically execute instructions
several orders of magnitude faster than human perception, it may appear that many
programs are running at the same time even though only one is ever executing in
any given instant. This method of multitasking is sometimes termed "time-sharing"
since each program is allocated a "slice" of time in turn.
Before the era of cheap computers, the principle use for multitasking was to allow
many people to share the same computer.
Seemingly, multitasking would cause a computer that is switching between several
programs to run more slowly - in direct proportion to the number of programs it is
running. However, most programs spend much of their time waiting for slow
input/output devices to complete their tasks. If a program is waiting for the user to
click on the mouse or press a key on the keyboard, then it will not take a "time slice"
until the event it is waiting for has occurred. This frees up time for other programs to
execute so that many programs may be run at the same time without unacceptable
Cray designed many supercomputers that used multiprocessing heavily.
Some computers may divide their work between one or more separate CPUs,
creating a multiprocessing configuration. Traditionally, this technique was utilized
only in large and powerful computers such as supercomputers, mainframe computers
and servers. However, multiprocessor and multi-core (multiple CPUs on a single
integrated circuit) personal and laptop computers have become widely available and
are beginning to see increased usage in lower-end markets as a result.
Supercomputers in particular often have highly unique architectures that differ
significantly from the basic stored-program architecture and from general purpose
computers.. They often feature thousands of CPUs, customized high-speed
interconnects, and specialized computing hardware. Such designs tend to be useful
only for specialized tasks due to the large scale of program organization required to
successfully utilize most of the available resources at once. Supercomputers usually
see usage in large-scale simulation, graphics rendering, and cryptography
applications, as well as with other so-called "embarrassingly parallel" tasks.
Networking and the Internet
Visualization of a portion of the routes on the Internet.
Computers have been used to coordinate information in multiple locations since the
1950s, with the U.S. military's SAGE system the first large-scale example of such a
system, which led to a number of special-purpose commercial systems like Sabre.
In the 1970s, computer engineers at research institutions throughout the United
States began to link their computers together using telecommunications technology.
This effort was funded by ARPA (now DARPA), and the computer network that it
produced was called the ARPANET. The technologies that made the Arpanet possible
spread and evolved. In time, the network spread beyond academic and military
institutions and became known as the Internet. The emergence of networking
involved a redefinition of the nature and boundaries of the computer. Computer
operating systems and applications were modified to include the ability to define and
access the resources of other computers on the network, such as peripheral devices,
stored information, and the like, as extensions of the resources of an individual
computer. Initially these facilities were available primarily to people working in high-
tech environments, but in the 1990s the spread of applications like e-mail and the
World Wide Web, combined with the development of cheap, fast networking
technologies like Ethernet and ADSL saw computer networking become almost
ubiquitous. In fact, the number of computers that are networked is growing
phenomenally. A very large proportion of personal computers regularly connect to
the Internet to communicate and receive information. "Wireless" networking, often
utilizing mobile phone networks, has meant networking is becoming increasingly
ubiquitous even in mobile computing environments.
Software refers to parts of the computer which do not have a material form, such
as programs, data, protocols, etc. When software is stored in hardware that cannot
easily be modified (such as BIOS ROM in an IBM PC compatible), it is sometimes
called "firmware" to indicate that it falls into an uncertain area somewhere between
hardware and software.
An operating system (OS) is the software that manages the sharing of the
resources of a computer and provides programmers with an interface used to access
those resources. An operating system processes system data and user input, and
responds by allocating and managing tasks and internal system resources as a
service to users and programs of the system. At the foundation of all system
software, an operating system performs basic tasks such as controlling and
allocating memory, prioritizing system requests, controlling input and output devices,
facilitating networking and managing file systems. Most operating systems come with
an application that provides a user interface for managing the operating system,
such as a command line interpreter or graphical user interface. The operating system
forms a platform for other system software and for application software.
The most commonly-used contemporary desktop and laptop (notebook) OS is
Microsoft Windows. More powerful servers often employ Linux, FreeBSD, and other
Unix-like systems. However, these operating systems, especially Mac OS X, are also
used on personal computers.
Every program running on a computer, be it a service or an application, is a process.
As long as a von Neumann architecture is used to build computers, only one process
per CPU can be run at a time. Older microcomputer OSes such as MS-DOS did not
attempt to bypass this limit, with the exception of interrupt processing, and only one
process could be run under them (although DOS itself featured TSR as a very partial
and not too easy to use solution).
Most operating systems enable concurrent execution of many processes and
programs at once via multitasking, even with one CPU. The mechanism was used in
mainframes since the early 1960s, but in the personal computers it became available
in 1990s. Process management is an operating system's way of dealing with running
those multiple processes. On the most fundamental of computers (those containing
one processor with one core) multitasking is done by simply switching processes
quickly. Depending on the operating system, as more processes run, either each
time slice will become smaller or there will be a longer delay before each process is
given a chance to run. Process management involves computing and distributing CPU
time as well as other resources. Most operating systems allow a process to be
assigned a priority which affects its allocation of CPU time. Interactive operating
systems also employ some level of feedback in which the task with which the user is
working receives higher priority. Interrupt driven processes will normally run at a
very high priority. In many systems there is a background process, such as the
System Idle Process in Windows, which will run when no other process is waiting for
Current computer architectures arrange the computer's memory in a hierarchical
manner, starting from the fastest registers, CPU cache, random access memory and
disk storage. An operating system's memory manager coordinates the use of these
various types of memory by tracking which one is available, which is to be allocated
or deallocated and how to move data between them. This activity, usually referred to
as virtual memory management, increases the amount of memory available for each
process by making the disk storage seem like main memory. There is a speed
penalty associated with using disks or other slower storage as memory – if running
processes require significantly more RAM than is available, the system may start
thrashing. This can happen either because one process requires a large amount of
RAM or because two or more processes compete for a larger amount of memory than
is available. This then leads to constant transfer of each process's data to slower
Another important part of memory management is managing virtual addresses. If
multiple processes are in memory at once, they must be prevented from interfering
with each other's memory (unless there is an explicit request to utilise shared
memory). This is achieved by having separate address spaces. Each process sees the
whole virtual address space, typically from address 0 up to the maximum size of
virtual memory, as uniquely assigned to it. The operating system maintains a page
table that match virtual addresses to physical addresses. These memory allocations
are tracked so that when a process terminates, all memory used by that process can
be made available for other processes.
The operating system can also write inactive memory pages to secondary storage.
This process is called "paging" or "swapping" – the terminology varies between
It is also typical for operating systems to employ otherwise unused physical memory
as a page cache; requests for data from a slower device can be retained in memory
to improve performance. The operating system can also pre-load the in-memory
cache with data that may be requested by the user in the near future; SuperFetch is
an example of this.
Unix-like operating systems
A customized KDE desktop running under Linux.
The Unix-like family is a diverse group of operating systems, with several major sub-
categories including System V, BSD, and Linux. The name "UNIX" is a trademark of
The Open Group which licenses it for use with any operating system that has been
shown to conform to their definitions. "Unix-like" is commonly used to refer to the
large set of operating systems which resemble the original Unix.
Unix systems run on a wide variety of machine architectures. They are used heavily
as server systems in business, as well as workstations in academic and engineering
environments. Free software Unix variants, such as Linux and BSD, are popular in
these areas. The market share for Linux is divided between many different
distributions. Enterprise class distributions by Red Hat or SuSe are used by
corporations, but some home users may use those products. Historically home users
typically installed a distribution themselves, but in 2007 Dell began to offer the
Ubuntu Linux distribution on home PCs. Linux on the desktop is also popular in the
developer and hobbyist operating system development communities. (see below)
Market share statistics for freely available operating systems are usually inaccurate
since most free operating systems are not purchased, making usage under-
represented. On the other hand, market share statistics based on total downloads of
free operating systems are often inflated, as there is no economic disincentive to
acquire multiple operating systems so users can download multiple, test them, and
decide which they like best.
Some Unix variants like HP's HP-UX and IBM's AIX are designed to run only on that
vendor's hardware. Others, such as Solaris, can run on multiple types of hardware,
including x86 servers and PCs. Apple's Mac OS X, a hybrid kernel-based BSD variant
derived from NeXTSTEP, Mach, and FreeBSD, has replaced Apple's earlier (non-Unix)
Unix interoperability was sought by establishing the POSIX standard. The POSIX
standard can be applied to any operating system, although it was originally created
for various unix varients.
Over the past several years, the trend in the Unix and Unix-like space has been to
freely provide the software programming code. This process, is called open source,
although there was initially confusion as "open" previously meant sharing code and
standards only with the representative of select companies.
Ken Thompson, Dennis Ritchie and Douglas McIlroy at Bell Labs designed and
developed the C programming language to build the operating system Unix.
Programmers at Bell Labs went on to develop Plan 9 and Inferno, which were
engineered for modern distributed environments. They had graphics built-in, unlike
Unix counterparts that added it to the design later. Plan 9 did not become popular
because, unlike many Unix distributions, it was not originally free. It has since been
released under Free Software and Open Source Lucent Public License, and has an
expanding community of developers. Inferno was sold to Vita Nuova Holdings and
has been released under a GPL/MIT license.
Mac OS X
Mac OS X is a line of proprietary, graphical operating systems developed, marketed,
and sold by Apple Inc., the latest of which is pre-loaded on all currently shipping
Macintosh computers. Mac OS X is the successor to the original Mac OS, which had
been Apple's primary operating system since 1984. Unlike its predecessor, Mac OS X
is a UNIX operating system built on technology that had been developed at NeXT
through the second half of the 1980s and up until Apple purchased the company in
The operating system was first released in 1999 as Mac OS X Server 1.0, with a
desktop-oriented version (Mac OS X v10.0) following in March 2001. Since then, five
more distinct "end-user" and "server" editions of Mac OS X have been released, the
most recent being Mac OS X v10.5, which was first made available in October 2007.
Releases of Mac OS X are named after big cats; Mac OS X v10.5 is usually referred
to by Apple and users as "Leopard".
The server edition, Mac OS X Server, is architecturally identical to its desktop
counterpart but usually runs on Apple's line of Macintosh server hardware. Mac OS X
Server includes workgroup management and administration software tools that
provide simplified access to key network services, including a mail transfer agent, a
Samba server, an LDAP server, a domain name server, and others.
The Microsoft Windows family of operating systems originated as an add-on to the
older MS-DOS environment for the IBM PC. Modern versions are based on the newer
Windows NT core that was originally intended for OS/2 and borrowed from VMS.
Windows runs on x86, x86-64 and Itanium processors. Earlier versions also ran on
the DEC Alpha, MIPS, Fairchild (later Intergraph) Clipper and PowerPC architectures
(some work was done to port it to the SPARC architecture).
As of September 2007, Microsoft Windows holds a large amount of the worldwide
desktop market share. Windows is also used on servers, supporting applications such
as web servers and database servers. In recent years, Microsoft has spent significant
marketing and research & development money to demonstrate that Windows is
capable of running any enterprise application, which has resulted in consistent
price/performance records (see the TPC) and significant acceptance in the enterprise
The most widely used version of the Microsoft Windows family is Windows XP,
released on October 25, 2001.
In November 2006, after more than five years of development work, Microsoft
released Windows Vista, a major new version of Microsoft Windows which contains a
large number of new features and architectural changes. Chief amongst these are a
new user interface and visual style called Windows Aero, a number of new security
features such as User Account Control, and new multimedia applications such as
Windows DVD Maker.
Computer networking is the engineering discipline concerned with communication
between computer systems or devices. Networking, routers, routing protocols, and
networking over the public Internet have their specifications defined in documents
called RFCs. Computer networking is sometimes considered a sub-discipline of
telecommunications, computer science, information technology and/or computer
engineering. Computer networks rely heavily upon the theoretical and practical
application of these scientific and engineering disciplines.
A computer network is any set of computers or devices connected to each other with
the ability to exchange data. Examples of networks are:
local area network (LAN), which is usually a small network constrained to a
small geographic area.
wide area network (WAN) that is usually a larger network that covers a large
wireless LANs and WANs (WLAN & WWAN) is the wireless equivalent of the
LAN and WAN
All networks are interconnected to allow communication with a varity of different
kinds of media, which including twisted-pair copper wire cable, coaxial cable, optical
fiber, and various wireless technologies. The devices can be separated by a few
meters (e.g. via Bluetooth) or nearly unlimited distances (e.g. via the
interconnections of the Internet).
Views of networks
Users and network administrators often have different views of their networks.
Often, users that share printers and some servers form a workgroup, which usually
means they are in the same geographic location and are on the same LAN. A
community of interest has less of a connotation of being in a local area, and should
be thought of as a set of arbitrarily located users who share a set of servers, and
possibly also communicate via peer-to-peer technologies.
Network administrators see networks from both physical and logical perspectives.
The physical perspective involves geographic locations, physical cabling, and the
network elements (e.g., routers, bridges and application layer gateways that
interconnect the physical media. Logical networks, called, in the TCP/IP architecture,
subnets , map onto one or more physical media. For example, a common practice in
a campus of buildings is to make a set of LAN cables in each building appear to be a
common subnet, using virtual LAN (VLAN) technology.
Both users and administrators will be aware, to varying extents, of the trust and
scope characteristics of a network. Again using TCP/IP architectural terminology, an
intranet is a community of interest under private administration usually by an
enterprise, and is only accessible by authorized users (e.g. employees) (RFC 2547).
Intranets do not have to be connected to the Internet, but generally have a limited
connection. An extranet is an extension of an intranet that allows secure
communications to users outside of the intranet (e.g. business partners,
Informally, the Internet is the set of users, enterprises, and content providers that
are interconnected by Internet Service Providers (ISP). From an engineering
standpoint, the Internet is the set of subnets, and aggregates of subnets, which
share the registered IP address space and exchange information about the
reachability of those IP addresses using the Border Gateway Protocol. Typically, the
human-readable names of servers are translated to IP addresses, transparently to
users, via the directory function of the Domain Name System (DNS).
Over the Internet, there can be business-to-business (B2B), business-to-consumer
(B2C) and consumer-to-consumer (C2C) communications. Especially when money or
sensitive information is exchanged, the communications are apt to be secured by
some form of communications security mechanism. Intranets and extranets can be
securely superimposed onto the Internet, without any access by general Internet
users, using secure Virtual Private Network (VPN) technology.
Networking is a complex part of computing that makes up most of the IT Industry.
Without networks, almost all communication in the world would cease to happen. It
is because of networking that telephones, televisions, the internet, etc. work.
One way to categorize computer networks are by their geographic scope, although
many real-world networks interconnect Local Area Networks (LAN) via Wide Area
Networks (WAN). These two (broad) types are:
Local area network (LAN)
A local area network is a network that spans a relatively small space and provides
services to a small number of people. Depending on the number of people that use a
Local Area Network, a peer-to-peer or client-server method of networking may be
used. A peer-to-peer network is where each client shares their resources with other
workstations in the network. Examples of peer-to-peer networks are: Small office
networks where resource use is minimal and a home network. A client-server
network is where every client is connected to the server and each other. Client-
server networks use servers in different capacities. These can be classified into two
types: Single-service servers, where the server performs one task such as file
server, print server, etc.; while other servers can not only perform in the capacity of
file servers and print servers, but they also conduct calculations and use these to
provide information to clients (Web/Intranet Server). Computers are linked via
Ethernet Cable, can be joined either directly (one computer to another), or via a
network hub that allows multiple connections.
Historically, LANs have featured much higher speeds than WANs. This is not
necessarily the case when the WAN technology appears as Metro Ethernet,
implemented over optical transmission systems.
Wide area network (WAN)
A wide area network is a network where a wide variety of resources are deployed
across a large domestic area or internationally. An example of this is a multinational
business that uses a WAN to interconnect their offices in different countries. The
largest and best example of a WAN is the Internet, which is a network comprised of
many smaller networks. The Internet is considered the largest network in the world.
The PSTN (Public Switched Telephone Network) also is an extremely large network
that is converging to use Internet technologies, although not necessarily through the
A Wide Area Network involves communication through the use of a wide range of
different technologies. These technologies include Point-to-Point WANs such as Point-
to-Point Protocol (PPP) and High-Level Data Link Control (HDLC), Frame Relay, ATM
(Asynchronous Transfer Mode) and Sonet (Synchronous Optical Network). The
difference between the WAN technologies is based on the switching capabilities they
perform and the speed at which sending and receiving bits of information (data)
For more information on WANs, see Frame Relay, ATM and Sonet.
Wireless networks (WLAN, WWAN)
A wireless network is basically the same as a LAN or a WAN but there are no wires
between hosts and servers. The data is transferred over sets of radio transceivers.
These types of networks are beneficial when it is too costly or inconvenient to run
the necessary cables. For more information, see Wireless LAN and Wireless wide area
network. The media access protocols for LANs come from the IEEE.
The most common IEEE 802.11 WLANs cover, depending on antennas, ranges from
hundreds of meters to low kilometers. For larger areas, either communications
satellites of various types, cellular radio, or wireless local loop (IEEE 802.16) all have
advantages and disadvantages. Depending on the type of mobility needed, the
relevant standards may come from the IETF or the ITU.
The network topology defines the way in which computers, printers, and other
devices are connected, physically and logically. A network topology describes the
layout of the wire and devices as well as the paths used by data transmissions.
Commonly used topologies include:
o partially connected
o fully connected (sometimes known as fully redundant)
The network topologies mentioned above are only a general representation of the
kinds of topologies used in computer network and are considered basic topologies.
Visualization of the various routes through a portion of the Internet.
The Internet is a worldwide, publicly accessible series of interconnected computer
networks that transmit data by packet switching using the standard Internet Protocol
(IP). It is a "network of networks" that consists of millions of smaller domestic,
academic, business, and government networks, which together carry various
information and services, such as electronic mail, online chat, file transfer, and the
interlinked web pages and other resources of the World Wide Web (WWW).
The Internet protocol suite is a collection of standards and protocols organized into
layers so that each layer provides the foundation and the services required by the
layer above. In this scheme, the Internet consists of the computers and networks
that handle Internet Protocol (IP) data packets. Transmission Control Protocol (TCP)
depends on IP and solves problems like data packets arriving out of order or not at
all. Next comes Hypertext Transfer Protocol (HTTP), which is an application layer
protocol. It runs on top of TCP/IP and provides user agents, such as web browsers,
with access to the files, documents and other resources of the World Wide Web
(WWW). More generally, the Internet is the world-wide network holding most data
communications together, while the World-Wide Web is just one of many applications
that the Internet can be used for.
Aside from the complex physical connections that make up its infrastructure, the
Internet is facilitated by bi- or multi-lateral commercial contracts (e.g., peering
agreements), and by technical specifications or protocols that describe how to
exchange data over the network. Indeed, the Internet is essentially defined by its
interconnections and routing policies.
As of September 30, 2007, 1.244 billion people use the Internet according to
Internet World Stats. Writing in the Harvard International Review, philosopher
N.J.Slabbert, a writer on policy issues for the Washington DC-based Urban Land
Institute, has asserted that the Internet is fast becoming a basic feature of global
civilization, so that what has traditionally been called "civil society" is now becoming
identical with information technology society as defined by Internet use. Only 2% of
the World's population regularly accesses the internet.
In this context, there are three layers of protocols:
At the lower level (OSI layer 3) is IP (Internet Protocol), which defines the
datagrams or packets that carry blocks of data from one node to another. The
vast majority of today's Internet uses version four of the IP protocol (i.e.
IPv4), and although IPv6 is standardized, it exists only as "islands" of
connectivity, and there are many ISPs without any IPv6 connectivity. ICMP
(Internet Control Message Protocol) also exists at this level. ICMP is
connectionless; it is used for control, signaling, and error reporting purposes.
TCP (Transmission Control Protocol) and UDP (User Datagram Protocol) exist
at the next layer up (OSI layer 4); these are the protocols by which data is
transmitted. TCP makes a virtual 'connection', which gives some level of
guarantee of reliability. UDP is a best-effort, connectionless transport, in
which data packets that are lost in transit will not be re-sent.
The application protocols sit on top of TCP and UDP and occupy layers 5, 6,
and 7 of the OSI model. These define the specific messages and data formats
sent and understood by the applications running at each end of the
communication. Examples of these protocols are HTTP, FTP, and SMTP.
ICANN headquarters in Marina Del Rey, California, United States
The Internet Corporation for Assigned Names and Numbers (ICANN) is the authority
that coordinates the assignment of unique identifiers on the Internet, including
domain names, Internet Protocol (IP) addresses, and protocol port and parameter
numbers. A globally unified namespace (i.e., a system of names in which there is at
most one holder for each possible name) is essential for the Internet to function.
ICANN is headquartered in Marina del Rey, California, but is overseen by an
international board of directors drawn from across the Internet technical, business,
academic, and non-commercial communities. The US government continues to have
the primary role in approving changes to the root zone file that lies at the heart of
the domain name system. Because the Internet is a distributed network comprising
many voluntarily interconnected networks, the Internet, as such, has no governing
body. ICANN's role in coordinating the assignment of unique identifiers distinguishes
it as perhaps the only central coordinating body on the global Internet, but the scope
of its authority extends only to the Internet's systems of domain names, IP
addresses, protocol ports and parameter numbers.
On November 16, 2005, the World Summit on the Information Society, held in Tunis,
established the Internet Governance Forum (IGF) to discuss Internet-related issues.
Common uses of the Internet
The concept of sending electronic text messages between parties in a way analogous
to mailing letters or memos predates the creation of the Internet. Even today it can
be important to distinguish between Internet and internal e-mail systems. Internet
e-mail may travel and be stored unencrypted on many other networks and machines
out of both the sender's and the recipient's control. During this time it is quite
possible for the content to be read and even tampered with by third parties, if
anyone considers it important enough. Purely internal or intranet mail systems,
where the information never leaves the corporate or organization's network, are
much more secure, although in any organization there will be IT and other personnel
whose job may involve monitoring, and occasionally accessing, the email of other
employees not addressed to them.
The World Wide Web
Many people use the terms Internet and World Wide Web (or just the Web)
interchangeably, but, as discussed above, the two terms are not synonymous.
The World Wide Web is a huge set of interlinked documents, images and other
resources, linked by hyperlinks and URLs. These hyperlinks and URLs allow the web-
servers and other machines that store originals, and cached copies, of these
resources to deliver them as required using HTTP (Hypertext Transfer Protocol).
HTTP is only one of the communication protocols used on the Internet.
Web services also use HTTP to allow software systems to communicate in order to
share and exchange business logic and data.
Software products that can access the resources of the Web are correctly termed
user agents. In normal use, web browsers, such as Internet Explorer and Firefox
access web pages and allow users to navigate from one to another via hyperlinks.
Web documents may contain almost any combination of computer data including
photographs, graphics, sounds, text, video, multimedia and interactive content
including games, office applications and scientific demonstrations.
Through keyword-driven Internet research using search engines, like Yahoo!, and
Google, millions of people worldwide have easy, instant access to a vast and diverse
amount of online information. Compared to encyclopedias and traditional libraries,
the World Wide Web has enabled a sudden and extreme decentralization of
information and data.
It is also easier, using the Web, than ever before for individuals and organisations to
publish ideas and information to an extremely large audience. Anyone can find ways
to publish a web page or build a website for very little initial cost. Publishing and
maintaining large, professional websites full of attractive, diverse and up-to-date
information is still a difficult and expensive proposition, however.
Many individuals and some companies and groups use "web logs" or blogs, which are
largely used as easily-updatable online diaries. Some commercial organizations
encourage staff to fill them with advice on their areas of specialization in the hope
that visitors will be impressed by the expert knowledge and free information, and be
attracted to the corporation as a result. One example of this practice is Microsoft,
whose product developers publish their personal blogs in order to pique the public's
interest in their work.
Collections of personal web pages published by large service providers remain
popular, and have become increasingly sophisticated. Whereas operations such as
Angelfire and GeoCities have existed since the early days of the Web, newer
offerings from, for example, Facebook and MySpace currently have large followings.
These operations often brand themselves as social network services rather than
simply as web page hosts.
Advertising on popular web pages can be lucrative, and e-commerce or the sale of
products and services directly via the Web continues to grow.
In the early days, web pages were usually created as sets of complete and isolated
HTML text files stored on a web server. More recently, web sites are more often
created using content management system (CMS) or wiki software with, initially,
very little content. Users of these systems, who may be paid staff, members of a
club or other organisation or members of the public, fill the underlying databases
with content using editing pages designed for that purpose, while casual visitors view
and read this content in its final HTML form. There may or may not be editorial,
approval and security systems built into the process of taking newly entered content
and making it available to the target visitors.
The Internet allows computer users to connect to other computers and information
stores easily, wherever they may be across the world. They may do this with or
without the use of security, authentication and encryption technologies, depending
on the requirements.
This is encouraging new ways of working from home, collaboration and information
sharing in many industries. An accountant sitting at home can audit the books of a
company based in another country, on a server situated in a third country that is
remotely maintained by IT specialists in a fourth. These accounts could have been
created by home-working book-keepers, in other remote locations, based on
information e-mailed to them from offices all over the world. Some of these things
were possible before the widespread use of the Internet, but the cost of private,
leased lines would have made many of them infeasible in practice.
An office worker away from his desk, perhaps the other side of the world on a
business trip or a holiday, can open a remote desktop session into their normal office
PC using a secure Virtual Private Network (VPN) connection via the Internet. This
gives the worker complete access to all of their normal files and data, including e-
mail and other applications, while away from the office.
This concept is also referred to by some network security people as the Virtual
Private Nightmare, because it extends the secure perimeter of a corporate network
into its employees' homes; this has been the source of some notable security
breaches, but also provides security for the workers.
The low cost and nearly instantaneous sharing of ideas, knowledge, and skills has
made collaborative work dramatically easier. Not only can a group cheaply
communicate and test, but the wide reach of the Internet allows such groups to
easily form in the first place, even among niche interests. An example of this is the
free software movement in software development which produced GNU and Linux
from scratch and has taken over development of Mozilla and OpenOffice.org
(formerly known as Netscape Communicator and StarOffice). Films such as Zeitgeist,
Loose Change and Endgame have had extensive coverage on the internet, while
being virtually ignored in the mainstream media.
Internet 'chat', whether in the form of IRC 'chat rooms' or channels, or via instant
messaging systems allow colleagues to stay in touch in a very convenient way when
working at their computers during the day. Messages can be sent and viewed even
more quickly and conveniently than via e-mail. Extension to these systems may
allow files to be exchanged, 'whiteboard' drawings to be shared as well as voice and
video contact between team members.
Version control systems allow collaborating teams to work on shared sets of
documents without either accidentally overwriting each other's work or having
members wait until they get 'sent' documents to be able to add their thoughts and
A computer file can be e-mailed to customers, colleagues and friends as an
attachment. It can be uploaded to a Web site or FTP server for easy download by
others. It can be put into a "shared location" or onto a file server for instant use by
colleagues. The load of bulk downloads to many users can be eased by the use of
"mirror" servers or peer-to-peer networks.
In any of these cases, access to the file may be controlled by user authentication;
the transit of the file over the Internet may be obscured by encryption and money
may change hands before or after access to the file is given. The price can be paid
by the remote charging of funds from, for example a credit card whose details are
also passed—hopefully fully encrypted—across the Internet. The origin and
authenticity of the file received may be checked by digital signatures or by MD5 or
other message digests.
These simple features of the Internet, over a world-wide basis, are changing the
basis for the production, sale, and distribution of anything that can be reduced to a
computer file for transmission. This includes all manner of print publications,
software products, news, music, film, video, photography, graphics and the other
arts. This in turn has caused seismic shifts in each of the existing industries that
previously controlled the production and distribution of these products.
Internet collaboration technology enables business and project teams to share
documents, calendars and other information. Such collaboration occurs in a wide
variety of areas including scientific research, software development, conference
planning, political activism and creative writing.
A programming language is an artificial language that can be used to control the
behavior of a machine, particularly a computer. Programming languages, like natural
languages, are defined by syntactic and semantic rules which describe their structure
and meaning respectively. Many programming languages have some form of written
specification of their syntax and semantics; some are defined only by an official
Programming languages are used to facilitate communication about the task of
organizing and manipulating information, and to express algorithms precisely. Some
authors restrict the term "programming language" to those languages that can
express all possible algorithms; sometimes the term "computer language" is used for
more limited artificial languages.
Thousands of different programming languages have been created, and new
languages are created every year.
Traits often considered important for constituting a programming language:
Function: A programming language is a language used to write computer
programs, which involve a computer performing some kind of computation or
algorithm and possibly control external devices such as printers, robots, and
Target: Programming languages differ from natural languages in that natural
languages are only used for interaction between people, while programming
languages also allow humans to communicate instructions to machines. Some
programming languages are used by one device to control another. For
example PostScript programs are frequently created by another program to
control a computer printer or display.
Constructs: Programming languages may contain constructs for defining and
manipulating data structures or controlling the flow of execution.
Expressive power: The theory of computation classifies languages by the
computations they can express (see Chomsky hierarchy). All Turing complete
languages can implement the same set of algorithms. ANSI/ISO SQL and
Charity are examples of languages that are not Turing complete yet often
called programming languages.
Non-computational languages, such as markup languages like HTML or formal
grammars like BNF, are usually not considered programming languages. Often a
programming language is embedded in the non-computational (host) language.
A prominent purpose of programming languages is to provide instructions to a
computer. As such, programming languages differ from most other forms of human
expression in that they require a greater degree of precision and completeness.
When using a natural language to communicate with other people, human authors
and speakers can be ambiguous and make small errors, and still expect their intent
to be understood. However, computers do exactly what they are told to do, and
cannot understand the code the programmer "intended" to write. The combination of
the language definition, the program, and the program's inputs must fully specify the
external behavior that occurs when the program is executed.
Many languages have been designed from scratch, altered to meet new needs,
combined with other languages, and eventually fallen into disuse. Although there
have been attempts to design one "universal" computer language that serves all
purposes, all of them have failed to be accepted in this role. The need for diverse
computer languages arises from the diversity of contexts in which languages are
Programs range from tiny scripts written by individual hobbyists to huge
systems written by hundreds of programmers.
Programmers range in expertise from novices who need simplicity above all
else, to experts who may be comfortable with considerable complexity.
Programs must balance speed, size, and simplicity on systems ranging from
microcontrollers to supercomputers.
Programs may be written once and not change for generations, or they may
undergo nearly constant modification.
Finally, programmers may simply differ in their tastes: they may be
accustomed to discussing problems and expressing them in a particular
One common trend in the development of programming languages has been to add
more ability to solve problems using a higher level of abstraction. The earliest
programming languages were tied very closely to the underlying hardware of the
computer. As new programming languages have developed, features have been
added that let programmers express ideas that are more removed from simple
translation into underlying hardware instructions. Because programmers are less tied
to the needs of the computer, their programs can do more computing with less effort
from the programmer. This lets them write more programs in the same amount of
Natural language processors have been proposed as a way to eliminate the need for
a specialized language for programming. However, this goal remains distant and its
benefits are open to debate. Edsger Dijkstra took the position that the use of a
formal language is essential to prevent the introduction of meaningless constructs,
and dismissed natural language programming as "foolish." Alan Perlis was similarly
dismissive of the idea.
A diagram of the operation of a typical multi-language, multi-target compiler.
A compiler is a computer program (or set of programs) that translates text written
in a computer language (the source language) into another computer language (the
target language). The original sequence is usually called the source code and the
output called object code. Commonly the output has a form suitable for processing
by other programs (e.g., a linker), but it may be a human-readable text file.
The most common reason for wanting to translate source code is to create an
executable program. The name "compiler" is primarily used for programs that
translate source code from a high-level programming language to a lower level
language (e.g., assembly language or machine language). A program that translates
from a low level language to a higher level one is a decompiler. A program that
translates between high-level languages is usually called a language translator,
source to source translator, or language converter. A language rewriter is usually a
program that translates the form of expressions without a change of language.
A compiler is likely to perform many or all of the following operations: lexical
analysis, preprocessing, parsing, semantic analysis, code generation, and code
Software for early computers was exclusively written in assembly language for many
years. Higher level programming languages were not invented until the benefits of
being able to reuse software on different kinds of CPUs started to become
significantly greater than the cost of writing a compiler. The very limited memory
capacity of early computers also created many technical problems when
implementing a compiler.
Towards the end of the 1950s, machine-independent programming languages were
first proposed. Subsequently, several experimental compilers were developed. The
first compiler was written by Grace Hopper, in 1952, for the A-0 programming
language. The FORTRAN team led by John Backus at IBM is generally credited as
having introduced the first complete compiler, in 1957. COBOL was an early
language to be compiled on multiple architectures, in 1960.
In many application domains the idea of using a higher level language quickly caught
on. Because of the expanding functionality supported by newer programming
languages and the increasing complexity of computer architectures, compilers have
become more and more complex.
Early compilers were written in assembly language. The first self-hosting compiler —
capable of compiling its own source code in a high-level language — was created for
Lisp by Hart and Levin at MIT in 1962. Since the 1970s it has become common
practice to implement a compiler in the language it compiles, although both Pascal
and C have been popular choices for implementation language. Building a self-
hosting compiler is a bootstrapping problem -- the first such compiler for a language
must be compiled either by a compiler written in a different language, or (as in Hart
and Levin's Lisp compiler) compiled by running the compiler in an interpreter.
Compilers in education
Compiler construction and compiler optimization are taught at universities as part of
the computer science curriculum. Such courses are usually supplemented with the
implementation of a compiler for an educational programming language. A well-
documented example is Niklaus Wirth's PL/0 compiler, which Wirth used to teach
compiler construction in the 1970s. In spite of its simplicity, the PL/0 compiler
introduced several influential concepts to the field:
1. Program development by stepwise refinement (also the title of a 1971 paper
2. The use of a recursive descent parser
3. The use of EBNF to specify the syntax of a language
4. A code generator producing portable P-code
5. The use of T-diagrams in the formal description of the bootstrapping problem
One method used to classify compilers is by the platform on which the generated
code they produce executes. This is known as the target platform.
A native or hosted compiler is one whose output is intended to directly run on the
same type of computer and operating system as the compiler itself runs on. The
output of a cross compiler is designed to run on a different platform. Cross compilers
are often used when developing software for embedded systems that are not
intended to support a software development environment.
The output of a compiler that produces code for a virtual machine (VM) may or may
not be executed on the same platform as the compiler that produced it. For this
reason such compilers are not usually classified as native or cross compilers.
Diagram of different network topologies.
Network topology is the study of the arrangement or mapping of the elements
(links, nodes, etc.) of a network, especially the physical (real) and logical (virtual)
interconnections between nodes.
A local area network (LAN) is one example of a network that exhibits both a physical
topology and a logical topology. Any given node in the LAN will have one or more
links to one or more other nodes in the network and the mapping of these links and
nodes onto a graph results in a geometrical shape that determines the physical
topology of the network. Likewise, the mapping of the flow of data between the
nodes in the network determines the logical topology of the network. It is important
to note that the physical and logical topologies might be identical in any particular
network but they also may be different.
Any particular network topology is determined only by the graphical mapping of the
configuration of physical and/or logical connections between nodes - Network
Topology is, therefore, technically a part of graph theory. Distances between nodes,
physical interconnections, transmission rates, and/or signal types may differ in two
networks and yet their topologies may be identical.
Basic types of topologies
The arrangement or mapping of the elements of a network gives rise to certain basic
topologies which may then be combined to form more complex topologies (hybrid
topologies). The most common of these basic types of topologies are (refer to the
illustration at the top right of this page):
Bus (Linear, Linear Bus)
o partially connected mesh (or simply 'mesh')
o fully connected mesh
Classification of network topologies
There are also three basic categories of network topologies:
The terms signal topology and logical topology are often used interchangeably even
though there is a subtle difference between the two and the distinction is not often
made between the two.
The mapping of the nodes of a network and the physical connections between them
– i.e., the layout of wiring, cables, the locations of nodes, and the interconnections
between the nodes and the cabling or wiring system.
Classification of physical topologies
The simplest topology is a permanent link between two endpoints. Switched point-to-
point topologies are the basic model of conventional telephony. The value of a
permanent point-to-point network is the value of guaranteed, or nearly so,
communications between the two endpoints. The value of an on-demand point-to-
point connection is proportional to the number of potential pairs of subscribers, and
has been expressed as Metcalfe's Law.
Easiest to understand, of the variations of point-to-point topology, is a point-to-point
communications channel that appears, to the user, to be permanently associated
with the two endpoints. Children's "tin-can telephone" is one example, with a
microphone to a single public address speaker is another. These are examples of
physical dedicated channels.
Within many switched telecommunications systems, it is possible to establish
a permanent circuit. One example might be a telephone in the lobby of a
public building, which is programmed to ring only the number of a telephone
dispatcher. "Nailing down" a switched connection saves the cost of running a
physical circuit between the two points. The resources in such a connection
can be released when no longer needed, as, for example, a television circuit
from a parade route back to the studio.
Using circuit-switching or packet-switching technologies, a point-to-point
circuit can be set up dynamically, and dropped when no longer needed. This
is the basic mode of conventional telephony.
The type of network topology in which all of the nodes of the network are
connected to a common transmission medium which has exactly two
endpoints (this is the 'bus', which is also commonly referred to as the
backbone, or trunk) – all data that is transmitted between nodes in the
network is transmitted over this common transmission medium and is able to
be received by all nodes in the network virtually simultaneously (disregarding
Note: The two endpoints of the common transmission medium are normally
terminated with a device called a terminator that exhibits the characteristic
impedance of the transmission medium and which dissipates or absorbs the
energy that remains in the signal to prevent the signal from being reflected or
propagated back onto the transmission medium in the opposite direction,
which would cause interference with and degradation of the signals on the
transmission medium (See Electrical termination).
The type of network topology in which all of the nodes of the network are
connected to a common transmission medium which has more than two
endpoints that are created by adding branches to the main section of the
transmission medium – the physical distributed bus topology functions in
exactly the same fashion as the physical linear bus topology (i.e., all nodes
share a common transmission medium).
The type of network topology in which each of the nodes of the network is
connected to a central node with a point-to-point link in a 'hub' and 'spoke'
fashion, the central node being the 'hub' and the nodes that are attached to
the central node being the 'spokes' (e.g., a collection of point-to-point links
from the peripheral nodes that converge at a central node) – all data that is
transmitted between nodes in the network is transmitted to this central node,
which is usually some type of device that then retransmits the data to some
or all of the other nodes in the network, although the central node may also
be a simple common connection point (such as a 'punch-down' block) without
any active device to repeat the signals.
A type of network topology in which a network that is based upon the physical
star topology has one or more repeaters between the central node (the 'hub'
of the star) and the peripheral or 'spoke' nodes, the repeaters being used to
extend the maximum transmission distance of the point-to-point links
between the central node and the peripheral nodes beyond that which is
supported by the transmitter power of the central node or beyond that which
is supported by the standard upon which the physical layer of the physical
star network is based.
A type of network topology that is composed of individual networks that are
based upon the physical star topology connected together in a linear fashion –
i.e., 'daisy-chained' – with no central or top level connection point (e.g., two
or more 'stacked' hubs, along with their associated star connected nodes or
The type of network topology in which each of the nodes of the network is
connected to two other nodes in the network and with the first and last nodes
being connected to each other, forming a ring – all data that is transmitted
between nodes in the network travels from one node to the next node in a
circular manner and the data generally flows in a single direction only.
The type of network topology in which each of the nodes of the network is
connected to two other nodes in the network, with two connections to each of
these nodes, and with the first and last nodes being connected to each other
with two connections, forming a double ring – the data flows in opposite
directions around the two rings, although, generally, only one of the rings
carries data during normal operation, and the two rings are independent
unless there is a failure or break in one of the rings, at which time the two
rings are joined (by the stations on either side of the fault) to enable the flow
of data to continue using a segment of the second ring to bypass the fault in
the primary ring.
The value of fully meshed networks is proportional to the exponent of the
number of subscribers, assuming that communicating groups of any two endpoints,
up to and including all the endpoints, is approximated by Reed's Law.
The type of network topology in which each of the nodes of the network is
connected to each of the other nodes in the network with a point-to-point link
– this makes it possible for data to be simultaneously transmitted from any
single node to all of the other nodes.
The type of network topology in which some of the nodes of the network are
connected to more than one other node in the network with a point-to-point
link – this makes it possible to take advantage of some of the redundancy
that is provided by a physical fully connected mesh topology without the
expense and complexity required for a connection between every node in the
Tree (also known as hierarchical):
The type of network topology in which a central 'root' node (the top level of
the hierarchy) is connected to one or more other nodes that are one level
lower in the hierarchy (i.e., the second level) with a point-to-point link
between each of the second level nodes and the top level central 'root' node,
while each of the second level nodes that are connected to the top level
central 'root' node will also have one or more other nodes that are one level
lower in the hierarchy (i.e., the third level) connected to it, also with a point-
to-point link, the top level central 'root' node being the only node that has no
other node above it in the hierarchy – the hierarchy of the tree is
symmetrical, each node in the network having a specific fixed number, f, of
nodes connected to it at the next lower level in the hierarchy, the number, f,
being referred to as the 'branching factor' of the hierarchical tree.
In mathematics, computing, linguistics, and related disciplines, an algorithm is a
definite list of well-defined instructions for completing a task; that given an initial
state, will proceed through a well-defined series of successive states, eventually
terminating in an end-state. The transition from one state to the next is not
necessarily deterministic; some algorithms, known as probabilistic algorithms,
The concept of an algorithm originated as a means of recording procedures for
solving mathematical problems such as finding the common divisor of two numbers
or multiplying two numbers. A partial formalization of the concept began with
attempts to solve the Entscheidungsproblem (the "decision problem") that David
Hilbert posed in 1928. Subsequent formalizations were framed as attempts to define
"effective calculability" (cf Kleene 1943:274) or "effective method" (cf Rosser
1939:225); those formalizations included the Gödel-Herbrand-Kleene recursive
functions of 1930, 1934 and 1935, Alonzo Church's lambda calculus of 1936, Emil
Post's "Formulation I" of 1936, and Alan Turing's Turing machines of 1936-7 and
Al-Khwārizmī, Persian astronomer and mathematician, wrote a treatise in Arabic in
825 AD, On Calculation with Hindu Numerals. (See algorism). It was translated into
Latin in the 12th century as Algoritmi de numero Indorum, which title was likely
intended to mean "[Book by] Algoritmus on the numbers of the Indians", where
"Algoritmi" was the translator's rendition of the author's name in the genitive case;
but people misunderstanding the title treated Algoritmi as a Latin plural and this led
to the word "algorithm" (Latin algorismus) coming to mean "calculation method".
The intrusive "th" is most likely due to a false cognate with the Greek αριθμος
(arithmos) meaning "number".
Why algorithms are necessary: an informal definition
No generally accepted formal definition of "algorithm" exists yet. We can, however,
derive clues to the issues involved and an informal meaning of the word from the
following quotation from Boolos and Jeffrey (1974, 1999):
"No human being can write fast enough, or long enough, or small enough to
list all members of an enumerably infinite set by writing out their names, one
after another, in some notation. But humans can do something equally useful,
in the case of certain enumerably infinite sets: They can give explicit
instructions for determining the nth member of the set, for arbitrary
finite n. Such instructions are to be given quite explicitly, in a form in which
they could be followed by a computing machine, or by a human who is
capable of carrying out only very elementary operations on symbols"
(boldface added, p. 19).
The words "enumerably infinite" mean "countable using integers perhaps extending
to infinity". Thus Boolos and Jeffrey are saying that an algorithm implies instructions
for a process that "creates" output integers from an arbitrary "input" integer or
integers that, in theory, can be chosen from 0 to infinity. Thus we might expect an
algorithm to be an algebraic equation such as y = m + n — two arbitrary "input
variables" m and n that produce an output y. As we see in Algorithm
characterizations — the word algorithm implies much more than this, something on
the order of (for our addition example):
Precise instructions (in language understood by "the computer") for a "fast,
efficient, good" process that specifies the "moves" of "the computer"
(machine or human, equipped with the necessary internally-contained
information and capabilities) to find, decode, and then munch arbitrary input
integers/symbols m and n, symbols + and = ... and (reliably, correctly,
"effectively") produce, in a "reasonable" time, output-integer y at a specified
place and in a specified format.
The concept of algorithm is also used to define the notion of decidability (logic). That
notion is central for explaining how formal systems come into being starting from a
small set of axioms and rules. In logic, the time that an algorithm requires to
complete cannot be measured, as it is not apparently related with our customary
physical dimension. From such uncertainties, that characterize ongoing work, stems
the unavailability of a definition of algorithm that suits both concrete (in some sense)
and abstract usage of the term.
For a detailed presentation of the various points of view around the definition
of "algorithm" see Algorithm characterizations. For examples of simple
addition algorithms specified in the detailed manner described in Algorithm
characterizations, see Algorithm examples.
Formalization of algorithms
Algorithms are essential to the way computers process information, because a
computer program is essentially an algorithm that tells the computer what specific
steps to perform (in what specific order) in order to carry out a specified task, such
as calculating employees’ paychecks or printing students’ report cards. Thus, an
algorithm can be considered to be any sequence of operations that can be performed
by a Turing-complete system. Authors who assert this thesis include Savage (1987)
and Gurevich (2000):
"...Turing's informal argument in favor of his thesis justifies a stronger thesis:
every algorithm can be simulated by a Turing machine" (Gurevich 2000:1)
...according to Savage , "an algorithm is a computational process
defined by a Turing machine."(Gurevich 2000:3)
Typically, when an algorithm is associated with processing information, data are read
from an input source or device, written to an output sink or device, and/or stored for
further processing. Stored data are regarded as part of the internal state of the
entity performing the algorithm. In practice, the state is stored in a data structure,
but an algorithm requires the internal data only for specific operation sets called
abstract data types.
For any such computational process, the algorithm must be rigorously defined:
specified in the way it applies in all possible circumstances that could arise. That is,
any conditional steps must be systematically dealt with, case-by-case; the criteria
for each case must be clear (and computable).
Because an algorithm is a precise list of precise steps, the order of computation will
almost always be critical to the functioning of the algorithm. Instructions are usually
assumed to be listed explicitly, and are described as starting 'from the top' and going
'down to the bottom', an idea that is described more formally by flow of control.
So far, this discussion of the formalization of an algorithm has assumed the premises
of imperative programming. This is the most common conception, and it attempts to
describe a task in discrete, 'mechanical' means. Unique to this conception of
formalized algorithms is the assignment operation, setting the value of a variable. It
derives from the intuition of 'memory' as a scratchpad. There is an example below of
such an assignment.
For some alternate conceptions of what constitutes an algorithm see functional
programming and logic programming .
Some writers restrict the definition of algorithm to procedures that eventually finish.
In such a category Kleene places the "decision procedure or decision method or
algorithm for the question" (Kleene 1952:136). Others, including Kleene, include
procedures that could run forever without stopping; such a procedure has been
called a "computational method" (Knuth 1997:5) or "calculation procedure or
algorithm" (Kleene 1952:137); however, Kleene notes that such a method must
eventually exhibit "some object" (Kleene 1952:137).
Minsky makes the pertinent observation, in regards to determining whether an
algorithm will eventually terminate (from a particular starting state):
"But if the length of the process is not known in advance, then 'trying' it may
not be decisive, because if the process does go on forever — then at no time
will we ever be sure of the answer" (Minsky 1967:105)
As it happens, no other method can do any better, as was shown by Alan Turing with
his celebrated result on the undecidability of the so-called halting problem. There is
no algorithmic procedure for determining of arbitrary algorithms whether or not they
terminate from given starting states. The analysis of algorithms for their likelihood of
termination is called Termination analysis.
In the case of non-halting computation method (calculation procedure) success can
no longer be defined in terms of halting with a meaningful output. Instead, terms of
success that allow for unbounded output sequences must be defined. For example,
an algorithm that verifies if there are more zeros than ones in an infinite random
binary sequence must run forever to be effective. If it is implemented correctly,
however, the algorithm's output will be useful: for as long as it examines the
sequence, the algorithm will give a positive response while the number of examined
zeros outnumber the ones, and a negative response otherwise. Success for this
algorithm could then be defined as eventually outputting only positive responses if
there are actually more zeros than ones in the sequence, and in any other case
outputting any mixture of positive and negative responses.
See the examples of (im-)"proper" subtraction at partial function for more about
what can happen when an algorithm fails for certain of its input numbers — e.g. (i)
non-termination, (ii) production of "junk" (output in the wrong format to be
considered a number) or no number(s) at all (halt ends the computation with no
output), (iii) wrong number(s), or (iv) a combination of these. Kleene proposed that
the production of "junk" or failure to produce a number is solved by having the
algorithm detect these instances and produce e.g. an error message (he suggested
"0"), or preferably, force the algorithm into an endless loop (Kleene 1952:322).
Davis does this to his subtraction algorithm — he fixes his algorithm in a second
example so that it is proper subtraction (Davis 1958:12-15). Along with the logical
outcomes "true" and "false" Kleene also proposes the use of a third logical symbol
"u" — undecided (Kleene 1952:326) — thus an algorithm will always produce
something when confronted with a "proposition". The problem of wrong answers
must be solved with an independent "proof" of the algorithm e.g. using induction:
"We normally require auxiliary evidence for this (that the algorithm correctly
defines a mu recursive function), e.g. in the form of an inductive proof that,
for each argument value, the computation terminates with a unique value"
Algorithms can be expressed in many kinds of notation, including natural languages,
pseudocode, flowcharts, and programming languages. Natural language expressions
of algorithms tend to be verbose and ambiguous, and are rarely used for complex or
technical algorithms. Pseudocode and flowcharts are structured ways to express
algorithms that avoid many of the ambiguities common in natural language
statements, while remaining independent of a particular implementation language.
Programming languages are primarily intended for expressing algorithms in a form
that can be executed by a computer, but are often used as a way to define or
There is a wide variety of representations possible and one can express a given
Turing machine program as a sequence of machine tables (see more at finite state
machine and state transition table), as flowcharts (see more at state diagram), or as
a form of rudimentary machine code or assembly code called "sets of quadruples"
(see more at Turing machine).
Sometimes it is helpful in the description of an algorithm to supplement small "flow
charts" (state diagrams) with natural-language and/or arithmetic expressions written
inside "block diagrams" to summarize what the "flow charts" are accomplishing.
Representations of algorithms are generally classed into three accepted levels of
Turing machine description (Sipser 2006:157):
1 High-level description:
"...prose to describe an algorithm, ignoring the implementation details. At this
level we do not need to mention how the machine manages its tape or head"
2 Implementation description:
"...prose used to define the way the Turing machine uses its head and the
way that it stores data on its tape. At this level we do not give details of
states or transition function"
3 Formal description:
Most detailed, "lowest level", gives the Turing machine's "state table".
For an example of the simple algorithm "Add m+n" described in all three
Most algorithms are intended to be implemented as computer programs. However,
algorithms are also implemented by other means, such as in a biological neural
network (for example, the human brain implementing arithmetic or an insect looking
for food), in an electrical circuit, or in a mechanical device.
One of the simplest algorithms is to find the largest number in an (unsorted) list of
numbers. The solution necessarily requires looking at every number in the list, but
only once at each. From this follows a simple algorithm, which can be stated in a
high-level description English prose, as:
1. Assume the first item is largest.
2. Look at each of the remaining items in the list and if it is larger than the
largest item so far, make a note of it.
3. The last noted item is the largest in the list when the process is complete.
(Quasi-) Formal description: Written in prose but much closer to the high-level
language of a computer program, the following is the more formal coding of the
algorithm in pseudocode or pidgin code:
Input: A non-empty list of numbers L.
Output: The largest number in the list L.
largest ← L0
for each item in the list L≥1, do
if the item > largest, then
largest ← the item
"←" is a loose shorthand for "changes to". For instance, "largest ← item"
means that the value of largest changes to the value of item.
"return" terminates the algorithm and outputs the value that follows.
For a more complex example of an algorithm, see Euclid's algorithm for the greatest
common divisor, one of the earliest algorithms known.
As it happens, it is important to know how much of a particular resource (such as
time or storage) is required for a given algorithm. Methods have been developed for
the analysis of algorithms to obtain such quantitative answers; for example, the
algorithm above has a time requirement of O(n), using the big O notation with n as
the length of the list. At all times the algorithm only needs to remember two values:
the largest number found so far, and its current position in the input list. Therefore it
is said to have a space requirement of O(1). (Note that the size of the inputs is not
counted as space used by the algorithm.)
Different algorithms may complete the same task with a different set of instructions
in less or more time, space, or effort than others. For example, given two different
recipes for making potato salad, one may have peel the potato before boil the potato
while the other presents the steps in the reverse order, yet they both call for these
steps to be repeated for all potatoes and end when the potato salad is ready to be
The analysis and study of algorithms is a discipline of computer science, and is often
practiced abstractly without the use of a specific programming language or
implementation. In this sense, algorithm analysis resembles other mathematical
disciplines in that it focuses on the underlying properties of the algorithm and not on
the specifics of any particular implementation. Usually pseudocode is used for
analysis as it is the simplest and most general representation.
There are various ways to classify algorithms, each with its own merits.
Classification by implementation
One way to classify algorithms is by implementation means.
Recursion or iteration: A recursive algorithm is one that invokes (makes
reference to) itself repeatedly until a certain condition matches, which is a
method common to functional programming. Iterative algorithms use
repetitive constructs like loops and sometimes additional data structures like
stacks to solve the given problems. Some problems are naturally suited for
one implementation or the other. For example, towers of hanoi is well
understood in recursive implementation. Every recursive version has an
equivalent (but possibly more or less complex) iterative version, and vice
Logical: An algorithm may be viewed as controlled logical deduction. This
notion may be expressed as:
Algorithm = logic + control.
The logic component expresses the axioms that may be used in the
computation and the control component determines the way in which
deduction is applied to the axioms. This is the basis for the logic programming
paradigm. In pure logic programming languages the control component is
fixed and algorithms are specified by supplying only the logic component. The
appeal of this approach is the elegant semantics: a change in the axioms has
a well defined change in the algorithm.
Serial or parallel or distributed: Algorithms are usually discussed with the
assumption that computers execute one instruction of an algorithm at a time.
Those computers are sometimes called serial computers. An algorithm
designed for such an environment is called a serial algorithm, as opposed to
parallel algorithms or distributed algorithms. Parallel algorithms take
advantage of computer architectures where several processors can work on a
problem at the same time, whereas distributed algorithms utilise multiple
machines connected with a network. Parallel or distributed algorithms divide
the problem into more symmetrical or asymmetrical subproblems and collect
the results back together. The resource consumption in such algorithms is not
only processor cycles on each processor but also the communication overhead
between the processors. Sorting algorithms can be parallelized efficiently, but
their communication overhead is expensive. Iterative algorithms are generally
parallelizable. Some problems have no parallel algorithms, and are called
inherently serial problems.
Deterministic or non-deterministic: Deterministic algorithms solve the
problem with exact decision at every step of the algorithm whereas non-
deterministic algorithm solve problems via guessing although typical guesses
are made more accurate through the use of heuristics.
Exact or approximate: While many algorithms reach an exact solution,
approximation algorithms seek an approximation that is close to the true
solution. Approximation may use either a deterministic or a random strategy.
Such algorithms have practical value for many hard problems.
Classification by design paradigm
Another way of classifying algorithms is by their design methodology or paradigm.
There is a certain number of paradigms, each different from the other. Furthermore,
each of these categories will include many different types of algorithms. Some
commonly found paradigms include:
Divide and conquer. A divide and conquer algorithm repeatedly reduces an
instance of a problem to one or more smaller instances of the same problem
(usually recursively), until the instances are small enough to solve easily. One
such example of divide and conquer is merge sorting. Sorting can be done on
each segment of data after dividing data into segments and sorting of entire
data can be obtained in conquer phase by merging them. A simpler variant of
divide and conquer is called decrease and conquer algorithm, that solves
an identical subproblem and uses the solution of this subproblem to solve the
bigger problem. Divide and conquer divides the problem into multiple
subproblems and so conquer stage will be more complex than decrease and
conquer algorithms. An example of decrease and conquer algorithm is binary
Dynamic programming. When a problem shows optimal substructure,
meaning the optimal solution to a problem can be constructed from optimal
solutions to subproblems, and overlapping subproblems, meaning the same
subproblems are used to solve many different problem instances, a quicker
approach called dynamic programming avoids recomputing solutions that
have already been computed. For example, the shortest path to a goal from a
vertex in a weighted graph can be found by using the shortest path to the
goal from all adjacent vertices. Dynamic programming and memoization go
together. The main difference between dynamic programming and divide and
conquer is that subproblems are more or less independent in divide and
conquer, whereas subproblems overlap in dynamic programming. The
difference between dynamic programming and straightforward recursion is in
caching or memoization of recursive calls. When subproblems are
independent and there is no repetition, memoization does not help; hence
dynamic programming is not a solution for all complex problems. By using
memoization or maintaining a table of subproblems already solved, dynamic
programming reduces the exponential nature of many problems to polynomial
The greedy method. A greedy algorithm is similar to a dynamic
programming algorithm, but the difference is that solutions to the
subproblems do not have to be known at each stage; instead a "greedy"
choice can be made of what looks best for the moment. The greedy method
extends the solution with the best possible decision (not all feasible decisions)
at an algorithmic stage based on the current local optimum and the best
decision (not all possible decisions) made in previous stage. It is not
exhaustive, and does not give accurate answer to many problems. But when
it works, it will be the fastest method. The most popular greedy algorithm is
finding the minimal spanning tree as given by Kruskal.
Linear programming. When solving a problem using linear programming,
specific inequalities involving the inputs are found and then an attempt is
made to maximize (or minimize) some linear function of the inputs. Many
problems (such as the maximum flow for directed graphs) can be stated in a
linear programming way, and then be solved by a 'generic' algorithm such as
the simplex algorithm. A more complex variant of linear programming is
called integer programming, where the solution space is restricted to the
Reduction. This technique involves solving a difficult problem by transforming
it into a better known problem for which we have (hopefully) asymptotically
optimal algorithms. The goal is to find a reducing algorithm whose complexity
is not dominated by the resulting reduced algorithm's. For example, one
selection algorithm for finding the median in an unsorted list involves first
sorting the list (the expensive portion) and then pulling out the middle
element in the sorted list (the cheap portion). This technique is also known as
transform and conquer.
Search and enumeration. Many problems (such as playing chess) can be
modeled as problems on graphs. A graph exploration algorithm specifies rules
for moving around a graph and is useful for such problems. This category also
includes search algorithms, branch and bound enumeration and backtracking.
The probabilistic and heuristic paradigm. Algorithms belonging to this
class fit the definition of an algorithm more loosely.
1. Probabilistic algorithms are those that make some choices randomly (or
pseudo-randomly); for some problems, it can in fact be proven that the
fastest solutions must involve some randomness.
2. Genetic algorithms attempt to find solutions to problems by mimicking
biological evolutionary processes, with a cycle of random mutations yielding
successive generations of "solutions". Thus, they emulate reproduction and
"survival of the fittest". In genetic programming, this approach is extended to
algorithms, by regarding the algorithm itself as a "solution" to a problem.
3. Heuristic algorithms, whose general purpose is not to find an optimal solution,
but an approximate solution where the time or resources are limited. They
are not practical to find perfect solutions. An example of this would be local
search, tabu search, or simulated annealing algorithms, a class of heuristic
probabilistic algorithms that vary the solution of a problem by a random
amount. The name "simulated annealing" alludes to the metallurgic term
meaning the heating and cooling of metal to achieve freedom from defects.
The purpose of the random variance is to find close to globally optimal
solutions rather than simply locally optimal ones, the idea being that the
random element will be decreased as the algorithm settles down to a solution.