335 lines
16 KiB
HTML
335 lines
16 KiB
HTML
|
<HTML>
|
|||
|
<center>
|
|||
|
<A HREF="../tlk-toc.html"> Table of Contents</A>,
|
|||
|
<A href="../tlk.html" target="_top"> Show Frames</A>,
|
|||
|
<A href="../basics/hw.html" target="_top"> No Frames</A>
|
|||
|
</center>
|
|||
|
<hr>
|
|||
|
<META NAME="TtH" CONTENT="1.03">
|
|||
|
|
|||
|
<p>
|
|||
|
<H1><A NAME="tth_chAp1">Chapter 1 <br>Hardware Basics</H1>
|
|||
|
<img src="../logos/sit3-bw-tran.1.gif"><br>
|
|||
|
<p>
|
|||
|
<A NAME="hw-basics-chapter"></A> <tt><b></tt></b>
|
|||
|
An operating system has to work closely with the hardware system that acts as
|
|||
|
its foundations. The operating system needs certain services that can only
|
|||
|
be provided by the hardware.
|
|||
|
In order to fully understand the Linux operating system, you need to
|
|||
|
understand the basics of the underlying hardware.
|
|||
|
This chapter gives a brief introduction to that hardware: the modern PC.
|
|||
|
|
|||
|
<p>
|
|||
|
When the ``Popular Electronics'' magazine for January 1975 was printed with an
|
|||
|
illustration of the Altair 8080 on its front cover, a revolution started.
|
|||
|
The Altair 8080, named after the destination of an early Star Trek episode,
|
|||
|
could be assembled by home electronics enthusiasts for a mere $397.
|
|||
|
With its Intel 8080 processor and 256 bytes of memory but no screen or
|
|||
|
keyboard it was puny by today's standards.
|
|||
|
Its inventor, Ed Roberts, coined the term ``personal computer'' to describe
|
|||
|
his new invention, but the term PC is now used to refer to almost any computer that you can pick
|
|||
|
up without needing help.
|
|||
|
By this definition, even some of the very powerful Alpha AXP systems are PCs.
|
|||
|
|
|||
|
<p>
|
|||
|
Enthusiastic hackers saw the Altair's potential and started to write software and
|
|||
|
build hardware for it.
|
|||
|
To these early pioneers it represented freedom; the freedom from huge batch
|
|||
|
processing mainframe systems run and guarded by an elite priesthood.
|
|||
|
Overnight fortunes were made by college dropouts fascinated by this new
|
|||
|
phenomenon, a computer that you could have at home on your kitchen table.
|
|||
|
A lot of hardware appeared, all different to some degree and software hackers
|
|||
|
were happy to write software for these new machines.
|
|||
|
Paradoxically it was IBM who firmly cast the mould of the modern PC by
|
|||
|
announcing the IBM PC in 1981 and shipping it to customers early in 1982.
|
|||
|
With its Intel 8088 processor, 64K of memory (expandable to 256K), two
|
|||
|
floppy disks and an 80 character by 25 lines Colour Graphics Adapter (CGA)
|
|||
|
it was not very powerful by today's standards but it sold well.
|
|||
|
It was followed, in 1983, by the IBM PC-XT which had the luxury of a
|
|||
|
10Mbyte hard drive.
|
|||
|
It was not long before IBM PC clones were being produced by a host of companies
|
|||
|
such as Compaq and the architecture of the PC became a de-facto standard.
|
|||
|
This de-facto standard helped a multitude of hardware companies to compete together in
|
|||
|
a growing market which, happily for consumers, kept prices low.
|
|||
|
Many of the system architectural features of these early PCs have carried over
|
|||
|
into the modern PC. For example, even the most powerful Intel Pentium
|
|||
|
Pro based system starts running in the Intel 8086's addressing mode.
|
|||
|
When Linus Torvalds started writing what was to become Linux, he picked
|
|||
|
the most plentiful and reasonably priced hardware, an Intel 80386 PC.
|
|||
|
|
|||
|
<p>
|
|||
|
|
|||
|
<p><A NAME="tth_fIg1.1"></A>
|
|||
|
<center><center> <img src="board.gif"><br>
|
|||
|
<p>
|
|||
|
</center></center><center> Figure 1.1: A typical PC motherboard.</center>
|
|||
|
<A NAME="motherboard-figure"></A>
|
|||
|
<p>
|
|||
|
<p>Looking at a PC from the outside, the most obvious components are a
|
|||
|
system box, a keyboard, a mouse and a video monitor. On the front of
|
|||
|
the system box are some buttons, a little display showing some numbers and a
|
|||
|
floppy drive. Most systems these days have a CD ROM and if you feel that
|
|||
|
you have to protect your data, then there will also be a tape drive for
|
|||
|
backups. These devices are collectively known as the peripherals.
|
|||
|
|
|||
|
<p>
|
|||
|
Although the CPU is in overall control of the system, it is not the only
|
|||
|
intelligent device. All of the peripheral controllers, for example the IDE
|
|||
|
controller, have some level of intelligence.
|
|||
|
Inside the PC (Figure <A href="#motherboard-figure"
|
|||
|
> 1.1</A>) you will see a motherboard
|
|||
|
containing the CPU or microprocessor, the memory and a number of slots
|
|||
|
for the ISA or PCI peripheral controllers.
|
|||
|
Some of the controllers, for example the IDE disk controller may be built
|
|||
|
directly onto the system board.
|
|||
|
|
|||
|
<p>
|
|||
|
|
|||
|
<H2><A NAME="tth_sEc1.1">1.1 </A> The CPU</H2>
|
|||
|
|
|||
|
<p>
|
|||
|
The CPU, or rather microprocessor, is the heart of any computer system.
|
|||
|
The microprocessor calculates, performs logical operations and
|
|||
|
manages data flows by reading instructions from memory and then executing
|
|||
|
them.
|
|||
|
In the early days of computing the functional components of the
|
|||
|
microprocessor were separate (and physically large) units.
|
|||
|
This is when the term <em>Central Processing Unit</em> was coined.
|
|||
|
The modern microprocessor combines these components onto an
|
|||
|
integrated circuit etched onto a very small piece of silicon.
|
|||
|
The terms <em>CPU</em>, <em>microprocessor</em> and <em>processor</em> are
|
|||
|
all used interchangeably in this book.
|
|||
|
|
|||
|
<p>
|
|||
|
Microprocessors operate on binary data; that is data composed of
|
|||
|
ones and zeros.
|
|||
|
|
|||
|
<p>
|
|||
|
These ones and zeros correspond to electrical switches being either
|
|||
|
on or off.
|
|||
|
Just as 42 is a decimal number meaning ``4 10s and 2 units'', a binary
|
|||
|
number is a series of binary digits each one representing a power
|
|||
|
of 2.
|
|||
|
In this context, a power means the number of times that
|
|||
|
a number is multiplied by itself. 10 to the power 1 (
|
|||
|
10<sup>1</sup> ) is 10, 10 to
|
|||
|
the power 2 ( 10<sup>2</sup> ) is 10x10, 10<sup>3</sup> is 10x10x10 and so on.
|
|||
|
Binary 0001 is decimal 1, binary 0010 is decimal 2, binary 0011 is
|
|||
|
3, binary 0100 is 4 and so on.
|
|||
|
So, 42 decimal is 101010 binary or (2 + 8 + 32 or 2<sup>1</sup> + 2<sup>3</sup> + 2<sup>5</sup> ).
|
|||
|
Rather than using binary to represent numbers in computer programs,
|
|||
|
another base, hexadecimal is usually used.
|
|||
|
|
|||
|
<p>
|
|||
|
In this base, each digital represents a power of 16.
|
|||
|
As decimal numbers only go from 0 to 9 the numbers 10 to 15 are
|
|||
|
represented as a single digit by the letters A, B, C, D, E and F.
|
|||
|
For example, hexadecimal E is decimal 14 and hexadecimal 2A is
|
|||
|
decimal 42 (two 16s) + 10).
|
|||
|
Using the C programming language notation (as I do throughout this
|
|||
|
book) hexadecimal numbers are prefaced by ``<em>0x</em>''; hexadecimal
|
|||
|
2A is written as <em>0x2A</em> .
|
|||
|
|
|||
|
<p>
|
|||
|
Microprocessors can perform arithmetic operations such as add, multiply and
|
|||
|
divide and logical operations such as ``is X greater than Y?''.
|
|||
|
|
|||
|
<p>
|
|||
|
The processor's execution is governed by an external clock.
|
|||
|
This clock, the system clock, generates regular clock pulses to the
|
|||
|
processor and, at each clock pulse, the processor does some work.
|
|||
|
For example, a processor could execute an instruction every clock
|
|||
|
pulse.
|
|||
|
A processor's speed is described in terms of the rate of the system
|
|||
|
clock ticks.
|
|||
|
A 100Mhz processor will receive 100,000,000 clock ticks every second.
|
|||
|
It is misleading to describe the power of a CPU by its clock rate
|
|||
|
as different processors perform different amounts of work per
|
|||
|
clock tick.
|
|||
|
However, all things being equal, a faster clock speed means a more
|
|||
|
powerful processor.
|
|||
|
The instructions executed by the processor are very simple; for example ``read the
|
|||
|
contents of memory at location X into register Y''.
|
|||
|
Registers are the microprocessor's internal storage, used for storing
|
|||
|
data and performing operations on it.
|
|||
|
The operations performed may cause the processor to stop what it is
|
|||
|
doing and jump to another instruction somewhere else in memory.
|
|||
|
These tiny building blocks give the modern microprocessor almost
|
|||
|
limitless power as it can execute millions or even billions
|
|||
|
of instructions a second.
|
|||
|
|
|||
|
<p>
|
|||
|
The instructions have to be fetched from memory as they are executed.
|
|||
|
Instructions may themselves reference data within memory and that data must
|
|||
|
be fetched from memory and saved there when appropriate.
|
|||
|
|
|||
|
<p>
|
|||
|
The size, number and type of register within a microprocessor is entirely
|
|||
|
dependent on its type.
|
|||
|
An Intel 4086 processor has a different register set to an Alpha AXP processor;
|
|||
|
for
|
|||
|
a start, the Intel's are 32 bits wide and the Alpha AXP's are 64 bits wide.
|
|||
|
In general, though, any given processor will have a number of general purpose
|
|||
|
registers and a smaller number of dedicated registers. Most processors have
|
|||
|
the following special purpose, dedicated, registers:
|
|||
|
|
|||
|
<DL compact>
|
|||
|
<p>
|
|||
|
<dt><b>Program Counter (PC)</b></dt><dd> This register contains the address of
|
|||
|
the next instruction to be executed. The contents of the PC are
|
|||
|
automatically incremented each time an instruction is fetched,
|
|||
|
|
|||
|
<p>
|
|||
|
<dt><b>Stack Pointer (SP)</b></dt><dd> Processors have to have access to large
|
|||
|
amounts of external read/write random access memory (RAM) which facilitates
|
|||
|
temporary storage of data. The stack is a way of easily saving and
|
|||
|
restoring temporary values in external memory. Usually, processors
|
|||
|
have special instructions which allow you to push values onto the
|
|||
|
stack and to pop them off again later. The stack
|
|||
|
works on a last in first out (LIFO) basis.
|
|||
|
In other words, if you push two values, x and y, onto a stack and then pop
|
|||
|
a value off of the stack then you will get back the value of y.
|
|||
|
|
|||
|
<p>
|
|||
|
Some processor's stacks grow upwards towards the top of memory whilst others
|
|||
|
grow downwards towards the bottom, or base, of memory. Some processor's
|
|||
|
support both types, for example ARM.
|
|||
|
|
|||
|
<p>
|
|||
|
<dt><b>Processor Status (PS)</b></dt><dd> Instructions may yield results; for
|
|||
|
example ``is the content of register X greater than the content of
|
|||
|
register Y?'' will yield true or false as a result. The PS register
|
|||
|
holds this and other information about the current state of the
|
|||
|
processor. For example, most processors have at least two modes of operation,
|
|||
|
kernel (or supervisor) and user. The PS register would hold information
|
|||
|
identifying the current mode.
|
|||
|
</DL>
|
|||
|
<p>
|
|||
|
|
|||
|
<H2><A NAME="tth_sEc1.2">1.2 </A> Memory</H2>
|
|||
|
All systems have a memory hierarchy with memory at different speeds and sizes
|
|||
|
at different points in the hierarchy. The fastest memory is known as
|
|||
|
cache memory and is what it sounds like - memory that is used to temporarily hold, or cache, contents of the main memory.
|
|||
|
This sort of memory is very fast but expensive, therefore most processors have
|
|||
|
a small amount of on-chip cache memory and more system based (on-board) cache memory.
|
|||
|
Some processors have one cache to contain both instructions and data, but others have two, one for instructions
|
|||
|
and the other for data.
|
|||
|
The Alpha AXP processor has two internal
|
|||
|
memory caches; one for data (the D-Cache) and one for instructions (the
|
|||
|
I-Cache).
|
|||
|
The external cache (or B-Cache) mixes the two together.
|
|||
|
Finally there is the main memory which relative to the external cache memory
|
|||
|
is very slow.
|
|||
|
Relative to the on-CPU cache, main memory is positively crawling.
|
|||
|
|
|||
|
<p>
|
|||
|
The cache and main memories must be kept in step (coherent).
|
|||
|
In other words, if a word of main memory is held in one or more locations
|
|||
|
in cache, then the system must make sure that the contents of cache and
|
|||
|
memory are the same. The job of cache coherency is done partially by the
|
|||
|
hardware and partially by the operating system.
|
|||
|
This is also true for a number of major system tasks where the hardware and software
|
|||
|
must cooperate closely to achieve their aims.
|
|||
|
|
|||
|
<p>
|
|||
|
|
|||
|
<H2><A NAME="tth_sEc1.3">1.3 </A> Buses</H2>
|
|||
|
The individual components of the system board are interconnected by
|
|||
|
multiple connection systems known as buses.
|
|||
|
The system bus is divided into three logical functions; the address bus,
|
|||
|
the data bus and the control bus.
|
|||
|
The address bus specifies the memory locations (addresses) for the data
|
|||
|
transfers.
|
|||
|
The data bus holds the data transfered.
|
|||
|
The data bus is bidirectional; it allows data to be read into the CPU and
|
|||
|
written from the CPU.
|
|||
|
The control bus contains various lines used to route timing and control
|
|||
|
signals throughout the system.
|
|||
|
Many flavours of bus exist, for example ISA and PCI buses are popular ways
|
|||
|
of connecting peripherals to the system.
|
|||
|
|
|||
|
<p>
|
|||
|
|
|||
|
<H2><A NAME="tth_sEc1.4">1.4 </A> Controllers and Peripherals</H2>
|
|||
|
Peripherals are real devices, such as graphics cards or
|
|||
|
disks controlled by controller chips on the system board or on cards plugged
|
|||
|
into it.
|
|||
|
The IDE disks are controlled by the IDE controller chip and the SCSI
|
|||
|
disks by the SCSI disk controller chips and so on.
|
|||
|
These controllers are connected to the CPU and to each other
|
|||
|
by a variety of buses.
|
|||
|
Most systems built now use PCI and ISA buses to connect
|
|||
|
together the main system components.
|
|||
|
The controllers are processors like the CPU itself, they can be
|
|||
|
viewed as intelligent helpers to the CPU.
|
|||
|
The CPU is in overall control of the system.
|
|||
|
|
|||
|
<p>
|
|||
|
All controllers are different, but they usually have registers which
|
|||
|
control them.
|
|||
|
Software running on the CPU must be able to read and write those controlling
|
|||
|
registers.
|
|||
|
One register might contain status describing an error.
|
|||
|
Another might be used for control purposes; changing the mode of the
|
|||
|
controller.
|
|||
|
Each controller on a bus can be individually addressed by the CPU, this is
|
|||
|
so that the software device driver can write to its registers and thus
|
|||
|
control it.
|
|||
|
The IDE ribbon is a good example, as it gives you the ability to access
|
|||
|
each drive on the bus separately.
|
|||
|
Another good example is the PCI bus which allows each device (for example a
|
|||
|
graphics card) to be accessed independently.
|
|||
|
|
|||
|
<p>
|
|||
|
|
|||
|
<H2><A NAME="tth_sEc1.5">1.5 </A> Address Spaces</H2>
|
|||
|
The system bus connects the CPU with the main memory and is separate from the buses
|
|||
|
connecting the CPU with the system's hardware peripherals.
|
|||
|
Collectively the memory space that the hardware peripherals exist in is known as I/O space.
|
|||
|
I/O space may itself be further subdivided, but we will not worry too much about that for the moment.
|
|||
|
The CPU can access both the system space memory and the I/O space memory, whereas the controllers themselves
|
|||
|
can only access system memory indirectly and then only with the help of the CPU.
|
|||
|
From the point of view of the device, say the floppy disk controller,
|
|||
|
it will see only the address space that its control registers are in (ISA),
|
|||
|
and not the system memory.
|
|||
|
Typically a CPU will have separate instructions for accessing the memory and I/O space.
|
|||
|
For example, there might be an instruction that means ``read a byte from I/O address <em>0x3f0</em> into
|
|||
|
register X''.
|
|||
|
This is exactly how the CPU controls the system's hardware peripherals, by reading and writing
|
|||
|
to their registers in I/O space.
|
|||
|
Where in I/O space the common peripherals (IDE controller, serial port, floppy disk
|
|||
|
controller and so on) have their registers has been set by convention over the years as the PC
|
|||
|
architecture has developed.
|
|||
|
The I/O space address <em>0x3f0</em> just happens to be the address of one of the serial port's (COM1)
|
|||
|
control registers.
|
|||
|
|
|||
|
<p>
|
|||
|
There are times when controllers need to read or write large amounts of data directly to or from
|
|||
|
system memory.
|
|||
|
For example when user data is being written to the hard disk.
|
|||
|
In this case, Direct Memory Access (DMA) controllers are used to allow hardware peripherals to directly
|
|||
|
access system memory but this access is under strict control and supervision of
|
|||
|
the CPU.
|
|||
|
|
|||
|
<p>
|
|||
|
|
|||
|
<H2><A NAME="tth_sEc1.6">1.6 </A> Timers</H2>
|
|||
|
All operating systems need to know the time and so the modern PC includes a special peripheral
|
|||
|
called the Real Time Clock (RTC).
|
|||
|
This provides two things: a reliable time of day and an accurate timing interval.
|
|||
|
The RTC has its own battery so that it continues to run even when the PC is not powered on, this is
|
|||
|
how your PC always ``knows'' the correct date and time.
|
|||
|
The interval timer allows the operating system to accurately schedule essential work.
|
|||
|
|
|||
|
<p>
|
|||
|
|
|||
|
<p><hr><small>File translated from T<sub><font size=-1>E</font></sub>X by <a href="http://hutchinson.belmont.ma.us/tth/tth.html">T<sub><font size=-1>T</font></sub>H</a>, version 1.0.</small>
|
|||
|
<hr>
|
|||
|
<center>
|
|||
|
<A HREF="../basics/hw.html"> Top of Chapter</A>,
|
|||
|
<A HREF="../tlk-toc.html"> Table of Contents</A>,
|
|||
|
<A href="../tlk.html" target="_top"> Show Frames</A>,
|
|||
|
<A href="../basics/hw.html" target="_top"> No Frames</A><br>
|
|||
|
<EFBFBD> 1996-1999 David A Rusling <A HREF="../misc/copyright.html">copyright notice</a>.
|
|||
|
</center>
|
|||
|
</HTML>
|