<!--Chapter 1 Hardware Basics-->
<sect>ハードウェアの基本<label id="chapter_hb">
<p><figure><ph vspace="75"><img src="./The-Linux-Kernel-images/penguin2.gif">
</figure>

<!--
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>オペレーティングシステムは、その基礎であるハードウェアシステムと密接に協調
しながら動作しなければならない。そして、オペレーティングシステムはハードウェア
でしか提供できない一定のサービスを必要としている。
オペレーティングシステムを完全に理解するには、その基礎となるハードウェアの基本
を理解しなければならない。この章では、そうしたハードウェア、すなわち現代の PC 
について簡単に紹介する。

<!--
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>1975 年 1 月、「Popular Electrics」誌がその表紙に Altair 8080 のイラストを
載せたとき、革命が始まった。Altair 8080 は、初期のスタートレックのエピソード
の目的地にちなんで名付けられていたのだが、家庭電子工作の愛好家がわずか 397 ド
ルで組み立てられるというものだった。Intel 8080 プロセッサと 256 バイトのメ
モリ、スクリーンもキーボードもないというそのマシンは、今日の基準からすれば
随分貧弱ではある。その発明者 Ed Roberts は、かれの発明品を呼ぶために
「パーソナルコンピュータ(PC)」という言葉を作り出した。しかし今日ではこの PC 
という言葉は、目の前にあるほとんどあらゆるコンピュータに対して当たり前のよう
に使われていている。この定義からすると、非常にパワフルな Alpha AXP のシステム
のいくつかでさえ PC ということになる。

<!--
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. 
-->
熱心なハッカーたちは、Altair の潜在能力を理解し、そのためのソフトウェアを書き、
ハードウェアを作り始めた。そうした初期のパイオニアたちにとって、それは自由の
象徴であった。その自由とは、エリート聖職者階級によって守られて稼働してい
た、巨大なバッチプロセス方式のメインフレームシステムからの自由であった。
一夜にして富豪となる「落ちこぼれ」大学生たちが現れたのも、こうした現象、
すなわち自宅のキッチンテーブルに置くことができるコンピュータという産物に
魅了されてのことだった。多くのハードウェアが
出現し、それらは少しずつ違っていたから、ソフトウェアハッカーたちはそうしたマ
シンのソフトを喜んで書いていた。逆説的なのは、現代の PC の強固な鋳型を作った
のは、IBM であったことだ。彼らは 1981 年に IBM PC を告示して、1982 年はじめに
は顧客に出荷し始めた。Intel 8088 プロセッサ、64k のメモリ(256k まで拡張
可能)、ふたつのフロッピーディスク、25 行 80 文字のカラーグラフィックアダプタ
(CGA)というスペックは、今日の基準からすると決してパワフルとは言えないが、売れ
行きは好調であった。1983 年には IBM PC-XT が登場し、それには贅沢にも 10M バイ
トのハードドライブが付いていた。
まもなく、Compaq などの多くの会社によって IBM PC クローン
が製造されはじめ、PC アーキテクチャは事実上の標準となった。この事実上の標準
が出来たことで、成長する市場で無数の会社が競争し、消費者にとっては幸運なこと
に、価格は低く抑えられた。こうした初期 PC のシステムの構造上の多くの特徴が、
現代の PC にも受け継がれている。たとえば、最も強力な Intel Pentium Pro ベースの
マシンでも、起動時は Intel 8086 のアドレッシングモードで実行されている。
Linus Torvalds が将来 Linux となるはずのコードを書き始めたとき、最も普及して
いて妥当な値段のハードウェアとして彼が選んだのが、Intel 80386 PC であった。

<!--                Figure 1.1: A typical PC motherboard.-->
<#if output="html">
<figure><ph vspace="1">
<img src="./The-Linux-Kernel-images/figure1-1.gif"></figure>
</#if>
<#unless output="html">
<verb>
+--------------------------------------------------------------------+
|   +-------+ +-------+                                              |
|   | power | | power |                                              |
|   +-------+ +-------+   +-------------------+                      |
|  +----------------+     |                   |                      |
|  | パラレルポート |     |-------------------|                      |
|  +----------------+     |                   |                      |
| +-------+  +-------+    |-------------------|                      |
| | COM 1 |  | COM 2 |    |      C P U        |                      |
| +-------+  +-------+    |-------------------|                      |
|                         |                   |                      |
|                         |-------------------|                      |
|                         |                   |                      |
|                         +-------------------+                      |
|                  _______________________   _____________________   |
|                  |                      |  |                    |  |
|                  +----------------------+  +--------------------+  |
|                  _______________________   ______________________  |
|                  |                      |  |                    |  |
|                  +----------------------+  +--------------------+  |
|                                 SIMM メモリースロット              |
|       +-------------------------------+                            |
|       |                               |                            |
|       +-------------------------------+  PCI スロット              |
|       +-------------------------------+                            |
|       |                               |                            |
|       +-------------------------------+                            |
| +----------------------------------------------------+             |
| |                                                    |             |
| +----------------------------------------------------+             |
| +----------------------------------------------------+             |
| |                                                    |ISA スロット |
| +----------------------------------------------------+             |
| +----------------------------------------------------+             |
| |                                                    |             |
| +----------------------------------------------------+             |
+--------------------------------------------------------------------+
</verb>
</#if>
<p>(図表1.1) 典型的な PC マザーボード

<!--
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>外観からすると、PC を構成する部品として最も目立つのは、システムの本体であ
り、キーボード、マウス、モニターである。本体の前面には、いくつかのボタン、
数字を表示する小さなランプ、それにフロッピードライブがある。最近のシステム
では CD-ROM があり、データ保護の必要を感じているならバックアップ用のテープ
ドライブもあるだろう。それらのデバイスの総称は、周辺機器である。

<!--
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  1.1) 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. 
-->
CPU がシステム全体をコントロールしているのだが、情報処理機能を持つデバイスは
それだけではない。たとえば、IDE コントローラのような周辺機器のコントローラは
すべてあるレベルの情報処理能力を持っている。PC の内部には(図表(1.1)参照)
マザーボードがあり、
CPU もしくはマイクロプロセッサ、メモリ、ISA や PCI の周辺機器コントローラ
用のいくつかのスロットなどがある。IDE ディスクコントローラのようなコントローラ
の中には、システムボードに直接組み込まれているものもある。

<!--1.1  The CPU-->
<sect1>CPU<label id="chapter_hb_sect1">

<!--
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 Central Processing Unit was
coined. The modern microprocessor combines these components onto an
integrated circuit etched onto a very small piece of silicon. The terms CPU,
microprocessor and processor are all used interchangeably in this book. 
-->
<p>CPU もしくはマイクロプロセッサは、あらゆるコンピュータシステムの心臓部であ
る。マイクロプロセッサは、計算し、論理演算を行い、メモリから命令を読み出して
それらを実行することでデータフローを管理する。コンピュータの黎明期には、
マイクロプロセッサの演算処理部分は独立した(しかもかなり大きな)ユニットであっ
た。中央演算処理装置(CPU)という言葉が作られた当時はそういうものであった。
現代のマイクロプロセッサは、それらすべての部品を組み合わせて集積回路を作り、
非常に小さなシリコンチップにエッチング処理されている。CPU, マイクロプロセッ
サ、プロセッサといった用語は、本書ではすべて同じ意味で使用される。

<!--
Microprocessors operate on binary data; that is data composed of ones and
zeros. 
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 ( 101 ) is 10, 10 to the power 2 ( 102 ) is 10x10, 
103 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 21 + 23 + 25 ). Rather than using binary to represent 
numbers in computer programs, another base, hexadecimal is usually used. 
-->
<p>マイクロプロセッサは、バイナリデータを処理する。バイナリデータとは、1 と 
0 から成るデータである。
これらの 1 と 0 とは、電子スイッチのオンかオフかに対応している。単に 42 と
いうと、十進数で " 10 が 4 つと 2 " を意味するが、バイナリナンバー(二進数)
では、一連の二進数値の並びとなり、それぞれが 2 のベキ数を表す。
<#if output="html">
ここでベキ数とは、ある数を自乗する回数のことである。10 の 1乗 
(<dm>10<sup>1</sup></dm>) 
は、10 である。10 の 2 乗 (<dm>10<sup>2</sup></dm>) は、10x10 であり、
(<dm>10<sup>3</sup></dm>) は、10x10x10 になる。二進数の 0001 は、十進数の 1 
であり、二進数の 0010 は、十進数の 2 であり、二進数の 0011 は、3 で、二進数
の 0100 は、4 である。十進数 42 は、二進数 101010 もしくは、
(<dm>2 + 8 + 32</dm> もしくは <dm>2<sup>1</sup> + 2<sup>3</sup> + 2
<sup>5</sup></dm> ) となる。
</#if>
<#unless output="html">
ここでベキ数とは、ある数を自乗する回数のことである。10 の 1乗 は、10 である。
10 の 2 乗は、10x10 であり、10 の 3 乗は、10x10x10 になる。二進数の 0001 は、
十進数の 1 であり、二進数の 0010 は、十進数の 2 であり、二進数の 0011 は、3 
で、二進数の 0100 は、4 である。十進数 42 は、二進数 101010 もしくは、
(2 + 8 + 32 もしくは、2 + 2x2x2 + 2x2x2x2x2 ) となる。
</#if>
しかし、コンピュータプログラムの中で数を表現する場合には、二進数よりもむし
ろ、もう一つの基数である、十六進数のほうを使用するのが通常である。

<!--
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 ``0x''; hexadecimal 2A is written as 0x2A . 
-->
<p>16 進数では、それぞれの数が 16 のベキ数になっている。10 進数では 0 から 9 
までしかないが、16 進数では 10 から 16 までが A, B, C, D, E, F という数で表現
される。たとえば、16 進数の E は、10 進数では 14 であり、16 進数 2A は、10 進数
では 42 ( 16x2 + 10 ) である。C プログラム言語の表記法では(本書ではこの表記法
に従う)、16 進法は、先頭に " 0x " を付ける。したがって、16 進数 2A は、0x2A と
表記される。

<!--
Microprocessors can perform arithmetic operations such as add, multiply and
divide and logical operations such as ``is X greater than Y?''. 
-->
<p>マイクロプロセッサは、加算、乗算、除算などの算術演算や、「X は Y より大きい
か？」といった論理演算ができる。

<!--
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>プロセッサの処理は、外部クロックで管理されている。このクロックは、システム
クロックであり、プロセッサに一定間隔でクロックパルスを送り、そのクロックパル
スごとにプロセッサが何らかの処理をする。たとえば、プロセッサはクロックパルス
ごとに命令を実行したりする。プロセッサの速度は、システムクロックの発振速度で
記述される。100MHz のプロセッサは、一秒間に 100,000,000 回のクロックパルスを
受けているわけである。
確かに、プロセッサが違えばクロックごとに実行している処理の量も違うので、CPU の
パワーをクロック速度で考えるのは誤解である。しかし、他のすべての条件が
同じであれば、クロック速度が速いほどプロセッサもパワフルなものになる。
プロセッサで処理される命令は単純である。たとえば、「メモリ上の X という場所に
ある内容を読んでレジスタ Y に書き込め」といったものである。レジスタとは、
マイクロプロセッサ内部の記憶装置で、データを蓄え、そのデータを使って処理を
実行するために利用される。
実行される処理によっては、実行中の処理を停止して、メモリのどこか違う場所
に存在する別の命令処理に移るようプロセッサに命ずるものもある。このように処理
の対象を小さく分割したことによって、現代のマイクロプロセッサは、毎秒数百万や
数十億という命令の処理ができる、無限ともいえる力を手に入れたのである。

<!--
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: 
-->
<p>マイクロプロセッサ内のレジスタのサイズ、数、タイプは、完全にプロセッサのタ
イプに依存している。Intel 4086 (訳注:80486か？)プロセッサは、Alpha AXP プロ
セッサとは違ったレジスタのセットを持っている。たとえば、Intel のものは 32 ビッ
ト幅だが、Alpha は、64 ビット幅であることからすでに異なっている。しかし、一般
的には、どのようなプロセッサでも、多くの汎用レジスタと、それよりも少ない数の
特別なレジスタを持っている。大部分のプロセッサには、次のような特定の目的に特
化したレジスタがある。

<descrip>
<!--Program Counter (PC)-->
<tag>Program Counter (PC)</tag>
<!--
      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, 
-->
このレジスタは、次に実行される命令のアドレスを保持するものである。このカウンタ
 (PC) の内容は、命令がメモリから転送されるたびに、自動的にインクリメントされ
る。

<!--Stack Pointer (SP)-->
<tag>Stack Pointer (SP)</tag>
<!--
      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. 
-->
プロセッサは、メモリ(Random Access Memory, RAM)にアクセスできなければならな
い。メモリは、(レジスタと比較した場合)大容量の、CPU 外部にある読み書き可能な
記憶装置であり、一時(temporary)データの保存を容易にするものである。スタックは、
外部メモリに一時的に値を保存したり取り出したりするための簡単な方法である。
通常、プロセッサは、特別な命令を使って、スタックに値を積み(push)、あとでそれ
を取り出す(pop)処理をする。スタックは、後入れ先出し(Last In First Out, LIFO)
の原則で動く。言い換えると、x と y のふたつの値を順にスタックに積んでそこから
ひとつの値を取り出すと、値 y が取り出される。

<!--
      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. 
-->
あるプロセッサでは、スタックはメモリの上限に向かって積み上げられ、他の
プロセッサでは、メモリの下限あるいは最初に向かって積み上げられる。あるいは、
ARM のように両方をサポートしているプロセッサもある。

<!--Processor Status (PS)-->
<tag>Processor Status (PS)</tag>
<!--
      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. 
-->
命令が実行されると結果が生じる。たとえば、「レジスタ X の内容は、レジスタ Y の
内容より大きいか比較せよ」という命令には、大小という真か偽かの結果が生じる。
PS レジスタは、こうした結果を保持するとともに、プロセッサの現在の状態について
の情報も保持する。たとえば、大部分のプロセッサは、カーネルモード(あるいは、
スーパバイザーモード)とユーザモードという少なくともふたつのモードを持っている。
PS レジスタは、現在のモードを識別する情報も保持する。

</descrip>

<!--1.2  Memory-->
<sect1>メモリ<label id="chapter_hb_sect2">

<!--
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>すべてのシステムには、記憶階層(memory hierarchy)がある。そしてその階層の
位置によって、メモリのスピードやサイズが異なる。最速のメモリはキャッシュ
メモリ(cache memory)と呼ばれ、その名前の通りメインメモリの内容を一時的に保持
あるいはキャッシュするために使用される。この種のメモリは非常に高速だが高価
なので、大部分のプロセッサではチップ上に少量しか組み込まれず、マザーボード
上にそれより少し多いキャッシュが置かれるだけである。
プロセッサによっては、命令とデータの両方をひとつのキャッシュに保持するものが
あるが、命令とデータを別々のキャッシュに保存するものもある。Alpha AXP 
プロセッサはふたつの内部キャッシュを持ち、ひとつはデータ用(D-Cache)、もうひと
つは命令用(I-Cache)として使用される。そして、外部キャッシュ(B-Cache)は、両者
を同時に保持する。最後にメインメモリがある。これは外部キャッシュに比べると
非常に速度が遅い。CPU 上のキャッシュと比較すると、メインメモリはイモ虫ほどの
速度でしかない。

<!--
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>キャッシュとメインメモリとは足並みが揃っていなければならない(一貫性, 
coherent)。言い換えると、メインメモリ上のあるワード(word)がひとつ以上の
キャッシュに保持されている場合、(システムは)キャッシュとメモリの内容を確実に
一致させなければならない。キャッシュの一貫性を保つのは、主にハードウェ
アの仕事であり、オペレーティングシステムも部分的にそれに関与する。このことは
多くの重要なシステムタスクにも当てはまる。ハードウェアとソフトウェアが緊密に
協調することで目的を達成しなければならないタスクは数多くある。

<!--1.3  Buses-->
<sect1>バス<label id="chapter_hb_sect3">

<!--
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>システムボード上の個別の部品は、バスと総称される多様な接続方法で互いに結び
つけられている。システムバスは、論理的な機能から次の 3 つに分類される。
アドレスバス、データバス、そしてコントロールバスである。アドレスバスは、データ
転送のためにメモリ上の位置(アドレス)を指定するものであり、データバスはデータ
を保持して転送するするためのものである。データバスは双方向性で、CPU に読み
込まれるデータと、CPU から書き込まれるデータの転送を受け持つ。コントロールバス
は多種の信号線を含んでいて、クロックパルスや制御シグナルなどを(バス上の)シス
テム全体に配線するために使用される。それら以外にも様々な形態のバスが存在する。
たとえば ISA や PCI バスは、システムに周辺機器を接続する際の一般的な方法であ
る。

<!--1.4  Controllers and Peripherals-->
<sect1>コントローラと周辺機器<label id="chapter_hb_sect4">

<!--
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>周辺機器は、グラフィックカードやディスクといった実(real)デバイスであり、
それらは、システムボード上のチップやボードに差されるカード上のコントローラに
よって制御される。IDE ディスクは、IDE コントローラチップで制御され、SCSI 
ディスクは SCSI ディスクのコントローラチップで制御される。それらのコントローラ
は CPU に接続されていて、多様なバスにより相互にも接続されている。今日製造される
大部分のシステムでは、PCI か ISA バスによってメインシステムの部品に相互接続
されている。コントローラは、CPU 自体と同じプロセッサーであり、CPU を助ける
情報処理装置と考えることもできる。CPU はシステム全体を統括している点でそれらと
役割が異なる。

<!--
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>コントローラの仕様は相互に異なっているが、通常はレジスタを持ち、それによって
コントローラの制御がなされる。CPU 上で実行されるソフトウェアは、そうしたコン
トローラの制御レジスタを読み書きできなければならない。あるレジスタはエラーを
示すステータス情報を保持しているかもしれず、他のレジスタは、コントローラの
モード変更のための制御目的で使用されているかもしれない。バス上にある個々の
コントローラは、CPU で個別にアドレス管理されているので、それによって、
ソフトウェアであるデバイスドライバは、コントローラのレジスタに書き込みをし
て、それらを制御することができる。IDE ポート(IDE ribbon)がその典型であり、
それを使用することで、バス上のデバイスに対する個別のアクセスが可能になる。
他の典型例は、PCI バスであり、これによっても個別のデバイス(たとえば、グラフィッ
クカード)に独立してアクセスが可能となっている。

<!--1.5  Address Spaces-->
<sect1>アドレス空間<label id="chapter_hb_sect5">

<!--
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 0x3f0 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 0x3f0 just happens to be the
address of one of the serial port's (COM1) control registers. 
-->
<p>システムバスは、CPU をメインメモリに接続するものであり、CPU をシステムの
周辺機器に接続するバスとは区別されている。周辺機器が占めるメモリ空間は、
 I/O 空間(I/O space)と総称される。I/O 空間はそれ自体さらに細かく分かれるのだ
が、現時点ではあまり気にしないこととする。CPU はシステム空間メモリと I/O 空間
メモリの両方にアクセス可能なのだが、コントローラ自体はシステムメモリに間接的
にアクセスできるだけであり、その際には CPU の助けを借りなければならない。
フロッピーディスクコントローラのようなデバイスの側からこれを見ると、デバイス
はデバイスのコントロールレジスタが占めるアドレス空間しか見ることはできず
(ISA 等の場合)、システムメモリを見ることはできない。
CPU は、システムメモリにアクセスする場合と I/O 空間にアクセスする場合とでは
別々の命令を持っているのが一般的である。たとえば、「I/O 空間のアドレス 0x3f0 
から 1 バイト読み出して、レジスタ X に入れよ」という命令があったとする。
これは CPU がシステムの周辺機器を制御する方法そのものであり、I/O 空間にある
周辺機器コントローラのレジスタの読み書きがまさにそれにあたる。
PC アーキテクチャが今日のように発展しても、I/O 空間のどこに、よく利用される
周辺機器( IDE や シリアルポートやフロッピーのコントローラ)のレジスタがあるか
は、長年の慣習によって決まっている。上記の I/O 空間のアドレス 0x3f0 は、
シリアルポート(COM1)のコントロールレジスタのひとつがあるアドレスとなっている。

<!--
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. 
-->
時には、コントローラが、システムメモリに対して直接大量のデータを読み
書きする必要が生じる場合がある。たとえば、ユーザデータがハードディスクに書き込
まれるような時である。その場合、DMA(Direct Memory Aceesss)コントローラが利用さ
れ、周辺機器が直接システムメモリにアクセスできるようになっている。DMA による
システムメモリへのアクセスは、CPU の厳しい管理・監督のもとで行われる。

<!--1.6  Timers-->
<sect1>タイマー<label id="chapter_hb_sect6">

<!--
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>時間を知ることはすべてのオペレーティングシステムにとって必要なことなので、
現代の PC にはリアルタイムクロック(Real Time Clock, RTC) と呼ばれる特別の
周辺機器が組み込まれている。これが提供するのは、その日の正確な時間と精密な
タイミングインターバル(timing interval)のふたつである。RTC には内蔵バッテリー
があるので、PC に電源が入っていない時でも実行し続けることができる。それゆえ 
PC はいつも正確な日付と時間とを知っているわけである。インターバルタイマーに
よって、オペレーティングシステムは重要な処理を正確にスケジューリングすること
が可能となる。